Skip to content

Commit

Permalink
quota: explicitly set ->dq_op and ->s_qcop
Browse files Browse the repository at this point in the history
Only set the quota operation vectors if the filesystem actually supports
quota instead of doing it for all filesystems in alloc_super().

[Jan Kara: Export dquot_operations and vfs_quotactl_ops]

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
  • Loading branch information
Christoph Hellwig authored and Jan Kara committed May 24, 2010
1 parent 307ae18 commit 123e9ca
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 15 deletions.
6 changes: 6 additions & 0 deletions fs/ext2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1065,6 +1065,12 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
sb->s_op = &ext2_sops;
sb->s_export_op = &ext2_export_ops;
sb->s_xattr = ext2_xattr_handlers;

#ifdef CONFIG_QUOTA
sb->dq_op = &dquot_operations;
sb->s_qcop = &vfs_quotactl_ops;
#endif

root = ext2_iget(sb, EXT2_ROOT_INO);
if (IS_ERR(root)) {
ret = PTR_ERR(root);
Expand Down
4 changes: 4 additions & 0 deletions fs/jfs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,10 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent)
*/
sb->s_op = &jfs_super_operations;
sb->s_export_op = &jfs_export_operations;
#ifdef CONFIG_QUOTA
sb->dq_op = &dquot_operations;
sb->s_qcop = &vfs_quotactl_ops;
#endif

/*
* Initialize direct-mapping inode/address-space
Expand Down
3 changes: 2 additions & 1 deletion fs/quota/dquot.c
Original file line number Diff line number Diff line change
Expand Up @@ -1847,6 +1847,7 @@ const struct dquot_operations dquot_operations = {
.alloc_dquot = dquot_alloc,
.destroy_dquot = dquot_destroy,
};
EXPORT_SYMBOL(dquot_operations);

/*
* Generic helper for ->open on filesystems supporting disk quotas.
Expand Down Expand Up @@ -2491,7 +2492,7 @@ const struct quotactl_ops vfs_quotactl_ops = {
.get_dqblk = vfs_get_dqblk,
.set_dqblk = vfs_set_dqblk
};

EXPORT_SYMBOL(vfs_quotactl_ops);

static int do_proc_dqstats(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
Expand Down
3 changes: 0 additions & 3 deletions fs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
#include <linux/slab.h>
#include <linux/acct.h>
#include <linux/blkdev.h>
#include <linux/quotaops.h>
#include <linux/mount.h>
#include <linux/security.h>
#include <linux/writeback.h> /* for the emergency remount stuff */
Expand Down Expand Up @@ -94,8 +93,6 @@ static struct super_block *alloc_super(struct file_system_type *type)
init_rwsem(&s->s_dquot.dqptr_sem);
init_waitqueue_head(&s->s_wait_unfrozen);
s->s_maxbytes = MAX_NON_LFS;
s->dq_op = sb_dquot_ops;
s->s_qcop = sb_quotactl_ops;
s->s_op = &default_op;
s->s_time_gran = 1000000000;
}
Expand Down
6 changes: 5 additions & 1 deletion fs/udf/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1948,7 +1948,11 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
/* Fill in the rest of the superblock */
sb->s_op = &udf_sb_ops;
sb->s_export_op = &udf_export_ops;
sb->dq_op = NULL;
#ifdef CONFIG_QUOTA
sb->s_qcop = &vfs_quotactl_ops;
sb->dq_op = NULL; /* &dquot_operations */
#endif

sb->s_dirt = 0;
sb->s_magic = UDF_SUPER_MAGIC;
sb->s_time_gran = 1000;
Expand Down
6 changes: 5 additions & 1 deletion fs/ufs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1045,7 +1045,11 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
*/
sb->s_op = &ufs_super_ops;
sb->s_export_op = &ufs_export_ops;
sb->dq_op = NULL; /***/
#ifdef CONFIG_QUOTA
sb->s_qcop = &vfs_quotactl_ops;
sb->dq_op = NULL; /* &dquot_operations */
#endif

sb->s_magic = fs32_to_cpu(sb, usb3->fs_magic);

uspi->s_sblkno = fs32_to_cpu(sb, usb1->fs_sblkno);
Expand Down
9 changes: 0 additions & 9 deletions include/linux/quotaops.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,6 @@ static inline unsigned sb_any_quota_active(struct super_block *sb)
extern const struct dquot_operations dquot_operations;
extern const struct quotactl_ops vfs_quotactl_ops;

#define sb_dquot_ops (&dquot_operations)
#define sb_quotactl_ops (&vfs_quotactl_ops)

#else

static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
Expand Down Expand Up @@ -199,12 +196,6 @@ static inline int sb_any_quota_active(struct super_block *sb)
return 0;
}

/*
* NO-OP when quota not configured.
*/
#define sb_dquot_ops (NULL)
#define sb_quotactl_ops (NULL)

static inline void dquot_initialize(struct inode *inode)
{
}
Expand Down

0 comments on commit 123e9ca

Please sign in to comment.