switch gfs2 to ->evict_inode()
Subsystems (2)
PATCH 44/58 switch gfs2 to ->evict_inode()
Signed-off-by Al Viro <[email protected]>
--- fs/gfs2/super.c | 39 +++++++++++++++------------------------ 1 files changed, 15 insertions(+), 24 deletions(-)
fs/gfs2/super.c +15 -24
@@ -1203,25 +1203,6 @@ static void gfs2_drop_inode(struct inode *inode)generic_drop_inode (inode); } -/** -* gfs2_clear_inode - Deallocate an inode when VFS is done with it -* @inode: The VFS inode -* -*/ - -static void gfs2_clear_inode (struct inode *inode) -{ -struct gfs2_inode *ip =GFS2_I (inode); - - ip->i_gl->gl_object =NULL ; -gfs2_glock_put (ip->i_gl); - ip->i_gl =NULL ; -if (ip->i_iopen_gh.gh_gl) { - ip->i_iopen_gh.gh_gl->gl_object =NULL ; -gfs2_glock_dq_uninit (&ip->i_iopen_gh); - } -} -static int is_ancestor (const struct dentry *d1,const struct dentry *d2) { do {
@@ -1347,13 +1328,16 @@ static int gfs2_show_options(struct seq_file *s, struct vfsmount *mnt)* is safe, just less efficient. */ -static void gfs2_delete_inode (struct inode *inode) +static void gfs2_evict_inode (struct inode *inode) {struct gfs2_sbd *sdp = inode->i_sb->s_fs_info;struct gfs2_inode *ip =GFS2_I (inode);struct gfs2_holder gh;int error; +if (inode->i_nlink) + goto out; + error =gfs2_glock_nq_init (ip->i_gl,LM_ST_EXCLUSIVE ,0 , &gh);if (unlikely (error)) {gfs2_glock_dq_uninit (&ip->i_iopen_gh);
@@ -1407,10 +1391,18 @@ out_unlock:gfs2_holder_uninit (&ip->i_iopen_gh);gfs2_glock_dq_uninit (&gh);if (error && error !=GLR_TRYFAILED && error != -EROFS ) -fs_warn (sdp,"gfs2_delete_inode: %d\n" , error); +fs_warn (sdp,"gfs2_evict_inode: %d\n" , error); out:truncate_inode_pages (&inode->i_data,0 ); -clear_inode (inode); +end_writeback (inode); + + ip->i_gl->gl_object =NULL ; +gfs2_glock_put (ip->i_gl); + ip->i_gl =NULL ; +if (ip->i_iopen_gh.gh_gl) { + ip->i_iopen_gh.gh_gl->gl_object =NULL ; +gfs2_glock_dq_uninit (&ip->i_iopen_gh); + } }static struct inode *gfs2_alloc_inode (struct super_block *sb)
@@ -1434,14 +1426,13 @@ const struct super_operations gfs2_super_ops = { .alloc_inode = gfs2_alloc_inode, .destroy_inode = gfs2_destroy_inode, .write_inode = gfs2_write_inode, - .delete_inode = gfs2_delete_inode, + .evict_inode = gfs2_evict_inode, .put_super = gfs2_put_super, .sync_fs = gfs2_sync_fs, .freeze_fs = gfs2_freeze, .unfreeze_fs = gfs2_unfreeze, .statfs = gfs2_statfs, .remount_fs = gfs2_remount_fs, - .clear_inode = gfs2_clear_inode, .drop_inode = gfs2_drop_inode, .show_options = gfs2_show_options, };
Signature · 1 line
1.5.6.5
Hi,
This looks ok for GFS2 to me. Also the drop_inode changes, so:
for both,
Steve.
Quoted 90 lines · Al Viro
Signed-off-by Al Viro <[email protected]>--- fs/gfs2/super.c | 39 +++++++++++++++------------------------ 1 files changed, 15 insertions(+), 24 deletions(-)fs/gfs2/super.c +15
-24@@ -1203,25 +1203,6 @@ static void gfs2_drop_inode(struct inode *inode)generic_drop_inode (inode); } -/** -* gfs2_clear_inode - Deallocate an inode when VFS is done with it -* @inode: The VFS inode -* -*/ - -static void gfs2_clear_inode (struct inode *inode) -{ -struct gfs2_inode *ip =GFS2_I (inode); - - ip->i_gl->gl_object =NULL ; -gfs2_glock_put (ip->i_gl); - ip->i_gl =NULL ; -if (ip->i_iopen_gh.gh_gl) { - ip->i_iopen_gh.gh_gl->gl_object =NULL ; -gfs2_glock_dq_uninit (&ip->i_iopen_gh); - } -} -static int is_ancestor (const struct dentry *d1,const struct dentry *d2) { do {@@ -1347,13 +1328,16 @@ static int gfs2_show_options(struct seq_file *s, struct vfsmount *mnt)* is safe, just less efficient. */ -static void gfs2_delete_inode (struct inode *inode) +static void gfs2_evict_inode (struct inode *inode) {struct gfs2_sbd *sdp = inode->i_sb->s_fs_info;struct gfs2_inode *ip =GFS2_I (inode);struct gfs2_holder gh;int error; +if (inode->i_nlink) + goto out; + error =gfs2_glock_nq_init (ip->i_gl,LM_ST_EXCLUSIVE ,0 , &gh);if (unlikely (error)) {gfs2_glock_dq_uninit (&ip->i_iopen_gh);@@ -1407,10 +1391,18 @@ out_unlock:gfs2_holder_uninit (&ip->i_iopen_gh);gfs2_glock_dq_uninit (&gh);if (error && error !=GLR_TRYFAILED && error != -EROFS ) -fs_warn (sdp,"gfs2_delete_inode: %d\n" , error); +fs_warn (sdp,"gfs2_evict_inode: %d\n" , error); out:truncate_inode_pages (&inode->i_data,0 ); -clear_inode (inode); +end_writeback (inode); + + ip->i_gl->gl_object =NULL ; +gfs2_glock_put (ip->i_gl); + ip->i_gl =NULL ; +if (ip->i_iopen_gh.gh_gl) { + ip->i_iopen_gh.gh_gl->gl_object =NULL ; +gfs2_glock_dq_uninit (&ip->i_iopen_gh); + } }static struct inode *gfs2_alloc_inode (struct super_block *sb)@@ -1434,14 +1426,13 @@ const struct super_operations gfs2_super_ops = { .alloc_inode = gfs2_alloc_inode, .destroy_inode = gfs2_destroy_inode, .write_inode = gfs2_write_inode, - .delete_inode = gfs2_delete_inode, + .evict_inode = gfs2_evict_inode, .put_super = gfs2_put_super, .sync_fs = gfs2_sync_fs, .freeze_fs = gfs2_freeze, .unfreeze_fs = gfs2_unfreeze, .statfs = gfs2_statfs, .remount_fs = gfs2_remount_fs, - .clear_inode = gfs2_clear_inode, .drop_inode = gfs2_drop_inode, .show_options = gfs2_show_options, };