diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2015-10-12 22:46:36 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-01-18 21:35:39 -0900 |
commit | e8204e4e1373386dc8c357ade4161e77de825085 (patch) | |
tree | ce271c061063ace50b0ad5f8aeea7c506c7e2183 | |
parent | d12368e0911e107f8a10e5296cc420af5baa2da2 (diff) |
bcachefs: Hook up journal_seq for unlink
-rw-r--r-- | drivers/md/bcache/dirent.c | 5 | ||||
-rw-r--r-- | drivers/md/bcache/dirent.h | 2 | ||||
-rw-r--r-- | drivers/md/bcache/fs.c | 8 |
3 files changed, 11 insertions, 4 deletions
diff --git a/drivers/md/bcache/dirent.c b/drivers/md/bcache/dirent.c index a730742efb44..759bd4ab6452 100644 --- a/drivers/md/bcache/dirent.c +++ b/drivers/md/bcache/dirent.c @@ -369,7 +369,8 @@ err: } int bch_dirent_delete(struct cache_set *c, u64 dir_inum, - const struct qstr *name) + const struct qstr *name, + u64 *journal_seq) { struct btree_iter iter; struct bkey_s_c k; @@ -390,7 +391,7 @@ int bch_dirent_delete(struct cache_set *c, u64 dir_inum, ret = bch_btree_insert_at(&iter, &keylist_single(&delete), - NULL, NULL, + NULL, journal_seq, BTREE_INSERT_NOFAIL| BTREE_INSERT_ATOMIC); /* diff --git a/drivers/md/bcache/dirent.h b/drivers/md/bcache/dirent.h index f7a1d08421d8..dee59955efd9 100644 --- a/drivers/md/bcache/dirent.h +++ b/drivers/md/bcache/dirent.h @@ -11,7 +11,7 @@ struct cache_set; int bch_dirent_create(struct cache_set *, u64, u8, const struct qstr *, u64, u64 *); -int bch_dirent_delete(struct cache_set *, u64, const struct qstr *); +int bch_dirent_delete(struct cache_set *, u64, const struct qstr *, u64 *); enum bch_rename_mode { BCH_RENAME, diff --git a/drivers/md/bcache/fs.c b/drivers/md/bcache/fs.c index b8ef9ee0fa89..1fefa90523fa 100644 --- a/drivers/md/bcache/fs.c +++ b/drivers/md/bcache/fs.c @@ -580,15 +580,21 @@ static int bch_link(struct dentry *old_dentry, struct inode *dir, static int bch_unlink(struct inode *dir, struct dentry *dentry) { struct cache_set *c = dir->i_sb->s_fs_info; + struct bch_inode_info *dir_ei = to_bch_ei(dir); struct inode *inode = dentry->d_inode; + struct bch_inode_info *ei = to_bch_ei(inode); int ret; lockdep_assert_held(&inode->i_rwsem); - ret = bch_dirent_delete(c, dir->i_ino, &dentry->d_name); + ret = bch_dirent_delete(c, dir->i_ino, &dentry->d_name, + &dir_ei->journal_seq); if (ret) return ret; + if (dir_ei->journal_seq > ei->journal_seq) + ei->journal_seq = dir_ei->journal_seq; + inode->i_ctime = dir->i_ctime; inode_dec_link_count(inode); |