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 <zab@versity.com>
This commit is contained in:
Zach Brown
2016-03-17 19:12:49 -07:00
parent edf3c8a5d4
commit 0c0f2b19d5
3 changed files with 11 additions and 10 deletions

View File

@@ -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;

View File

@@ -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;
}
/*

View File

@@ -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);