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 <[email protected]>
Signed-off-by: Jan Kara <[email protected]>
>
> 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 <linux/buffer_head.h>
> #include <linux/capability.h>
> #include <linux/quotaops.h>
> +#include <linux/writeback.h> /* for inode_lock, oddly enough.. */
>
> #include <asm/uaccess.h>
>
> @@ -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 <[email protected]>
SuSE CR Labs
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]