summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2015-10-12 22:46:36 -0800
committerKent Overstreet <kent.overstreet@gmail.com>2017-01-18 21:35:39 -0900
commite8204e4e1373386dc8c357ade4161e77de825085 (patch)
treece271c061063ace50b0ad5f8aeea7c506c7e2183
parentd12368e0911e107f8a10e5296cc420af5baa2da2 (diff)
bcachefs: Hook up journal_seq for unlink
-rw-r--r--drivers/md/bcache/dirent.c5
-rw-r--r--drivers/md/bcache/dirent.h2
-rw-r--r--drivers/md/bcache/fs.c8
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);