Make ->drop_inode() just return whether inode needs to be dropped
Subsystems (5)
PATCH 55/58 Make ->drop_inode() just return whether inode needs to be dropped
... and let iput_final() do the actual eviction or retention
--- drivers/staging/pohmelfs/inode.c | 2 +- fs/btrfs/ctree.h | 2 +- fs/btrfs/inode.c | 6 +- fs/gfs2/super.c | 4 +- fs/inode.c | 113 +++++++++++-------------------------- fs/logfs/inode.c | 4 +- fs/ocfs2/inode.c | 8 ++- fs/ocfs2/inode.h | 2 +- include/linux/fs.h | 6 +- 9 files changed, 52 insertions(+), 95 deletions(-)
drivers/staging/pohmelfs/inode.c +1 -1
@@ -1232,7 +1232,7 @@ static void pohmelfs_drop_inode(struct inode *inode)list_del_init (&pi->inode_entry);spin_unlock (&psb->ino_lock); -generic_drop_inode (inode); +return generic_drop_inode (inode); } static struct pohmelfs_inode *pohmelfs_get_inode_from_list(struct pohmelfs_sb *psb,
fs/btrfs/ctree.h +1 -1
@@ -2395,7 +2395,7 @@ int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc);void btrfs_dirty_inode (struct inode *inode);struct inode *btrfs_alloc_inode (struct super_block *sb);void btrfs_destroy_inode (struct inode *inode); -void btrfs_drop_inode (struct inode *inode); +int btrfs_drop_inode (struct inode *inode);int btrfs_init_cachep (void );void btrfs_destroy_cachep (void );long btrfs_ioctl_trans_end (struct file *file);
fs/btrfs/inode.c +3 -3
@@ -6336,13 +6336,13 @@ free:kmem_cache_free (btrfs_inode_cachep,BTRFS_I (inode)); } -void btrfs_drop_inode (struct inode *inode) +int btrfs_drop_inode (struct inode *inode) {struct btrfs_root *root =BTRFS_I (inode)->root;if (inode->i_nlink >0 &&btrfs_root_refs (&root->root_item) ==0 ) -generic_delete_inode (inode); +return 1 ;else -generic_drop_inode (inode); +return generic_drop_inode (inode); }static void init_once (void *foo)
fs/gfs2/super.c +2 -2
@@ -1191,7 +1191,7 @@ static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)* node for later deallocation. */ -static void gfs2_drop_inode (struct inode *inode) +static int gfs2_drop_inode (struct inode *inode) {struct gfs2_inode *ip =GFS2_I (inode);
@@ -1200,7 +1200,7 @@ static void gfs2_drop_inode(struct inode *inode)if (gl &&test_bit (GLF_DEMOTE , &gl->gl_flags))clear_nlink (inode); } -generic_drop_inode (inode); +return generic_drop_inode (inode); }static int is_ancestor (const struct dentry *d1,const struct dentry *d2)
fs/inode.c +34 -79
145 lines not on this page · raw message
fs/logfs/inode.c +2 -2
@@ -287,7 +287,7 @@ static int logfs_write_inode(struct inode *inode, struct writeback_control *wbc) }/* called with inode_lock held */ -static void logfs_drop_inode (struct inode *inode) +static int logfs_drop_inode (struct inode *inode) {struct logfs_super *super =logfs_super (inode->i_sb);struct logfs_inode *li =logfs_inode (inode);
@@ -295,7 +295,7 @@ static void logfs_drop_inode(struct inode *inode)spin_lock (&logfs_inode_lock);list_move (&li->li_freeing_list, &super->s_freeing_list);spin_unlock (&logfs_inode_lock); -generic_drop_inode (inode); +return generic_drop_inode (inode); } static void logfs_set_ino_generation(struct super_block *sb,
fs/ocfs2/inode.c +5 -3
@@ -1180,9 +1180,10 @@ bail:/* Called under inode_lock, with no more references on the * struct inode, so it's safe here to check the flags field * and to manipulate i_nlink without any other locks. */ -void ocfs2_drop_inode (struct inode *inode) +int ocfs2_drop_inode (struct inode *inode) {struct ocfs2_inode_info *oi =OCFS2_I (inode); +int res;mlog_entry_void ();
@@ -1190,11 +1191,12 @@ void ocfs2_drop_inode(struct inode *inode) (unsigned long long)oi->ip_blkno, inode->i_nlink, oi->ip_flags);if (oi->ip_flags &OCFS2_INODE_MAYBE_ORPHANED ) -generic_delete_inode (inode); + res =1 ;else -generic_drop_inode (inode); + res =generic_drop_inode (inode);mlog_exit_void (); +return res; }/*
fs/ocfs2/inode.h +1 -1
@@ -124,7 +124,7 @@ static inline struct ocfs2_caching_info *INODE_CACHE(struct inode *inode) }void ocfs2_evict_inode (struct inode *inode); -void ocfs2_drop_inode (struct inode *inode); +int ocfs2_drop_inode (struct inode *inode);/* Flags for ocfs2_iget() */ #define OCFS2_FI_FLAG_SYSFILE 0x1
include/linux/fs.h +3 -3
@@ -1561,7 +1561,7 @@ struct super_operations {void (*dirty_inode) (struct inode *);int (*write_inode) (struct inode *,struct writeback_control *wbc); -void (*drop_inode) (struct inode *); +int (*drop_inode) (struct inode *);void (*evict_inode) (struct inode *);void (*put_super) (struct super_block *);void (*write_super) (struct super_block *);
@@ -2150,8 +2150,8 @@ extern void iput(struct inode *);extern struct inode *igrab (struct inode *);extern ino_t iunique (struct super_block *,ino_t );extern int inode_needs_sync (struct inode *inode); -extern void generic_delete_inode (struct inode *inode); -extern void generic_drop_inode (struct inode *inode); +extern int generic_delete_inode (struct inode *inode); +extern int generic_drop_inode (struct inode *inode); extern struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *),
Signature · 1 line
1.5.6.5
Quoted 4 lines · Al Viro
... and let
iput_final()do the actual eviction or retentionSigned-off-by Al Viro <[email protected]>
This one behaves as ocfs2 wants it to.
Signature · 10 lines
One look at the From: understanding has blossomed .procmailrc grows - Alexander Viro Joel Becker Principal Software Developer Oracle E-mail: [email protected] Phone: (650) 506-8127
Al Viro
maintainerPATCH v2 55/58 Make ->drop_inode() just return whether inode needs to be dropped
In reply to Al Viro[v2:clean btrfs part of that a bit]
... and let iput_final() do the actual eviction or retention
drivers/staging/pohmelfs/inode.c +1 -1
@@ -1232,7 +1232,7 @@ static void pohmelfs_drop_inode(struct inode *inode)list_del_init (&pi->inode_entry);spin_unlock (&psb->ino_lock); -generic_drop_inode (inode); +return generic_drop_inode (inode); } static struct pohmelfs_inode *pohmelfs_get_inode_from_list(struct pohmelfs_sb *psb,
fs/btrfs/ctree.h +1 -1
@@ -2395,7 +2395,7 @@ int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc);void btrfs_dirty_inode (struct inode *inode);struct inode *btrfs_alloc_inode (struct super_block *sb);void btrfs_destroy_inode (struct inode *inode); -void btrfs_drop_inode (struct inode *inode); +int btrfs_drop_inode (struct inode *inode);int btrfs_init_cachep (void );void btrfs_destroy_cachep (void );long btrfs_ioctl_trans_end (struct file *file);
fs/btrfs/inode.c +6 -5
@@ -3943,7 +3943,7 @@ again:if (atomic_read (&inode->i_count) >1 )d_prune_aliases (inode);/* -* btrfs_drop_inode will remove it from +* btrfs_drop_inode will have it removed from * the inode cache when its usage count * hits zero. */
@@ -6337,13 +6337,14 @@ free:kmem_cache_free (btrfs_inode_cachep,BTRFS_I (inode)); } -void btrfs_drop_inode (struct inode *inode) +int btrfs_drop_inode (struct inode *inode) {struct btrfs_root *root =BTRFS_I (inode)->root; -if (inode->i_nlink >0 &&btrfs_root_refs (&root->root_item) ==0 ) -generic_delete_inode (inode); + +if (btrfs_root_refs (&root->root_item) ==0 ) +return 1 ;else -generic_drop_inode (inode); +return generic_drop_inode (inode); }static void init_once (void *foo)
fs/gfs2/super.c +2 -2
@@ -1191,7 +1191,7 @@ static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)* node for later deallocation. */ -static void gfs2_drop_inode (struct inode *inode) +static int gfs2_drop_inode (struct inode *inode) {struct gfs2_inode *ip =GFS2_I (inode);
@@ -1200,7 +1200,7 @@ static void gfs2_drop_inode(struct inode *inode)if (gl &&test_bit (GLF_DEMOTE , &gl->gl_flags))clear_nlink (inode); } -generic_drop_inode (inode); +return generic_drop_inode (inode); }static int is_ancestor (const struct dentry *d1,const struct dentry *d2)
fs/inode.c +34 -79
145 lines not on this page · raw message
fs/logfs/inode.c +2 -2
@@ -287,7 +287,7 @@ static int logfs_write_inode(struct inode *inode, struct writeback_control *wbc) }/* called with inode_lock held */ -static void logfs_drop_inode (struct inode *inode) +static int logfs_drop_inode (struct inode *inode) {struct logfs_super *super =logfs_super (inode->i_sb);struct logfs_inode *li =logfs_inode (inode);
@@ -295,7 +295,7 @@ static void logfs_drop_inode(struct inode *inode)spin_lock (&logfs_inode_lock);list_move (&li->li_freeing_list, &super->s_freeing_list);spin_unlock (&logfs_inode_lock); -generic_drop_inode (inode); +return generic_drop_inode (inode); } static void logfs_set_ino_generation(struct super_block *sb,
fs/ocfs2/inode.c +5 -3
@@ -1194,9 +1194,10 @@ void ocfs2_evict_inode(struct inode *inode)/* Called under inode_lock, with no more references on the * struct inode, so it's safe here to check the flags field * and to manipulate i_nlink without any other locks. */ -void ocfs2_drop_inode (struct inode *inode) +int ocfs2_drop_inode (struct inode *inode) {struct ocfs2_inode_info *oi =OCFS2_I (inode); +int res;mlog_entry_void ();
@@ -1204,11 +1205,12 @@ void ocfs2_drop_inode(struct inode *inode) (unsigned long long)oi->ip_blkno, inode->i_nlink, oi->ip_flags);if (oi->ip_flags &OCFS2_INODE_MAYBE_ORPHANED ) -generic_delete_inode (inode); + res =1 ;else -generic_drop_inode (inode); + res =generic_drop_inode (inode);mlog_exit_void (); +return res; }/*
fs/ocfs2/inode.h +1 -1
@@ -124,7 +124,7 @@ static inline struct ocfs2_caching_info *INODE_CACHE(struct inode *inode) }void ocfs2_evict_inode (struct inode *inode); -void ocfs2_drop_inode (struct inode *inode); +int ocfs2_drop_inode (struct inode *inode);/* Flags for ocfs2_iget() */ #define OCFS2_FI_FLAG_SYSFILE 0x1
include/linux/fs.h +3 -3
@@ -1561,7 +1561,7 @@ struct super_operations {void (*dirty_inode) (struct inode *);int (*write_inode) (struct inode *,struct writeback_control *wbc); -void (*drop_inode) (struct inode *); +int (*drop_inode) (struct inode *);void (*evict_inode) (struct inode *);void (*put_super) (struct super_block *);void (*write_super) (struct super_block *);
@@ -2150,8 +2150,8 @@ extern void iput(struct inode *);extern struct inode *igrab (struct inode *);extern ino_t iunique (struct super_block *,ino_t );extern int inode_needs_sync (struct inode *inode); -extern void generic_delete_inode (struct inode *inode); -extern void generic_drop_inode (struct inode *inode); +extern int generic_delete_inode (struct inode *inode); +extern int generic_drop_inode (struct inode *inode); extern struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *),
Al Viro:
drivers/staging/pohmelfs/inode.c static void pohmelfs_drop_inode(struct inode *inode) · line 1236
Quoted 11 lines
drivers/staging/pohmelfs/inode.c +1
-1@@ -1232,7 +1232,7 @@ static void pohmelfs_drop_inode(struct inode *inode)list_del_init (&pi->inode_entry);spin_unlock (&psb->ino_lock); -generic_drop_inode (inode); +return generic_drop_inode (inode); }
The type of this function pohmelfs_drop_inode() should be converted too.
J. R. Okajima
Al Viro
maintainerQuoted 10 lines · J. R. Okajima
Al Viro:
Quoted 8 lines
drivers/staging/pohmelfs/inode.c +0
-0@@ -1232,7 +1232,7 @@ static void pohmelfs_drop_inode(struct inode *inode)list_del_init (&pi->inode_entry);spin_unlock (&psb->ino_lock);
Quoted 5 lines
drivers/staging/pohmelfs/inode.c static void pohmelfs_drop_inode(struct inode *inode) · line 1236
Quoted 3 lines
drivers/staging/pohmelfs/inode.c +1
-1-generic_drop_inode (inode); +return generic_drop_inode (inode); }The type of this function
pohmelfs_drop_inode()should be converted too.
Thanks, fixed.