From 0c0f2b19d534c5eb3f110cc3a3f3302fd1baf3b0 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Thu, 17 Mar 2016 19:12:49 -0700 Subject: [PATCH] scoutfs: update dirty inode items Wire up the code to update dirty inode items as inodes are modified in memory. We had a bit of the code but it wasn't being called. Signed-off-by: Zach Brown --- kmod/src/dir.c | 8 ++++---- kmod/src/inode.c | 11 ++++++----- kmod/src/inode.h | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/kmod/src/dir.c b/kmod/src/dir.c index 66d9006f..f1ab3190 100644 --- a/kmod/src/dir.c +++ b/kmod/src/dir.c @@ -418,8 +418,8 @@ static int scoutfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, inc_nlink(dir); } - mark_inode_dirty(inode); - mark_inode_dirty(dir); + scoutfs_update_inode_item(inode); + scoutfs_update_inode_item(dir); insert_inode_hash(inode); d_instantiate(dentry, inode); @@ -510,8 +510,8 @@ static int scoutfs_unlink(struct inode *dir, struct dentry *dentry) drop_nlink(dir); drop_nlink(inode); } - mark_inode_dirty(inode); - mark_inode_dirty(dir); + scoutfs_update_inode_item(inode); + scoutfs_update_inode_item(dir); out: return ret; diff --git a/kmod/src/inode.c b/kmod/src/inode.c index 02446332..521a1671 100644 --- a/kmod/src/inode.c +++ b/kmod/src/inode.c @@ -192,8 +192,12 @@ static void store_inode(struct scoutfs_inode *cinode, struct inode *inode) * Every time we modify the inode in memory we copy it to its inode * item. This lets us write out blocks of items without having to track * down dirty vfs inodes and safely copy them into items before writing. + * + * The caller makes sure that the item is dirty and pinned so they don't + * have to deal with errors and unwinding after they've modified the + * vfs inode and get here. */ -int scoutfs_inode_update(struct inode *inode) +void scoutfs_update_inode_item(struct inode *inode) { struct super_block *sb = inode->i_sb; struct scoutfs_item *item; @@ -202,13 +206,10 @@ int scoutfs_inode_update(struct inode *inode) scoutfs_set_key(&key, scoutfs_ino(inode), SCOUTFS_INODE_KEY, 0); item = scoutfs_item_lookup(sb, &key); - if (IS_ERR(item)) - return PTR_ERR(item); + BUG_ON(IS_ERR(item)); store_inode(item->val, inode); scoutfs_item_put(item); - - return 0; } /* diff --git a/kmod/src/inode.h b/kmod/src/inode.h index bb9a6149..d7009352 100644 --- a/kmod/src/inode.h +++ b/kmod/src/inode.h @@ -22,7 +22,7 @@ struct inode *scoutfs_alloc_inode(struct super_block *sb); void scoutfs_destroy_inode(struct inode *inode); struct inode *scoutfs_iget(struct super_block *sb, u64 ino); -int scoutfs_inode_update(struct inode *inode); +void scoutfs_update_inode_item(struct inode *inode); struct inode *scoutfs_new_inode(struct super_block *sb, struct inode *dir, umode_t mode, dev_t rdev);