From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kara Subject: Re: [PATCH] move remove_dquot_ref to dqout.c Date: Tue, 6 Feb 2007 12:13:44 +0100 Message-ID: <20070206111344.GD328@duck.suse.cz> References: <20070205180527.GA26951@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org To: Christoph Hellwig Return-path: Content-Disposition: inline In-Reply-To: <20070205180527.GA26951@lst.de> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Mon 05-02-07 19:05:27, Christoph Hellwig wrote: > Remove_dquot_ref can move to dqout.c instead of beeing in inode.c > under #ifdef CONFIG_QUOTA. Also clean the resulting code up Yes, this was because at the time the code was written, inode_lock was not exported from inode.c. > a tiny little bit by testing sb->dq_op earlier - it's constant > over a filesystems lifetime. Looks fine. > Signed-off-by: Christoph Hellwig Signed-off-by: Jan Kara > > Index: linux-2.6/fs/dquot.c > =================================================================== > --- linux-2.6.orig/fs/dquot.c 2007-02-05 18:49:41.000000000 +0100 > +++ linux-2.6/fs/dquot.c 2007-02-05 18:53:49.000000000 +0100 > @@ -79,6 +79,7 @@ > #include > #include > #include > +#include /* for inode_lock, oddly enough.. */ > > #include > > @@ -756,15 +757,30 @@ > } > } > > +static void remove_dquot_ref(struct super_block *sb, int type, > + struct list_head *tofree_head) > +{ > + struct inode *inode; > + > + spin_lock(&inode_lock); > + list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { > + if (!IS_NOQUOTA(inode)) > + remove_inode_dquot_ref(inode, type, tofree_head); > + } > + spin_unlock(&inode_lock); > +} > + > /* Gather all references from inodes and drop them */ > static void drop_dquot_ref(struct super_block *sb, int type) > { > LIST_HEAD(tofree_head); > > - down_write(&sb_dqopt(sb)->dqptr_sem); > - remove_dquot_ref(sb, type, &tofree_head); > - up_write(&sb_dqopt(sb)->dqptr_sem); > - put_dquot_list(&tofree_head); > + if (sb->dq_op) { > + down_write(&sb_dqopt(sb)->dqptr_sem); > + remove_dquot_ref(sb, type, &tofree_head); > + up_write(&sb_dqopt(sb)->dqptr_sem); > + put_dquot_list(&tofree_head); > + } > } > > static inline void dquot_incr_inodes(struct dquot *dquot, unsigned long number) > Index: linux-2.6/fs/inode.c > =================================================================== > --- linux-2.6.orig/fs/inode.c 2007-02-05 18:49:41.000000000 +0100 > +++ linux-2.6/fs/inode.c 2007-02-05 18:49:56.000000000 +0100 > @@ -1252,33 +1252,6 @@ > > EXPORT_SYMBOL(inode_needs_sync); > > -/* > - * Quota functions that want to walk the inode lists.. > - */ > -#ifdef CONFIG_QUOTA > - > -void remove_dquot_ref(struct super_block *sb, int type, > - struct list_head *tofree_head) > -{ > - struct inode *inode; > - > - if (!sb->dq_op) > - return; /* nothing to do */ > - spin_lock(&inode_lock); /* This lock is for inodes code */ > - > - /* > - * We don't have to lock against quota code - test IS_QUOTAINIT is > - * just for speedup... > - */ > - list_for_each_entry(inode, &sb->s_inodes, i_sb_list) > - if (!IS_NOQUOTA(inode)) > - remove_inode_dquot_ref(inode, type, tofree_head); > - > - spin_unlock(&inode_lock); > -} > - > -#endif > - > int inode_wait(void *word) > { > schedule(); > Index: linux-2.6/include/linux/fs.h > =================================================================== > --- linux-2.6.orig/include/linux/fs.h 2007-02-05 18:51:48.000000000 +0100 > +++ linux-2.6/include/linux/fs.h 2007-02-05 18:51:52.000000000 +0100 > @@ -1681,7 +1681,6 @@ > extern int __remove_suid(struct dentry *, int); > extern int should_remove_suid(struct dentry *); > extern int remove_suid(struct dentry *); > -extern void remove_dquot_ref(struct super_block *, int, struct list_head *); > > extern void __insert_inode_hash(struct inode *, unsigned long hashval); > extern void remove_inode_hash(struct inode *); Honza -- Jan Kara SuSE CR Labs