mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
quota: explicitly set ->dq_op and ->s_qcop
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>
This commit is contained in:
parent
307ae18a56
commit
123e9caf1e
@ -1065,6 +1065,12 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
|
|||||||
sb->s_op = &ext2_sops;
|
sb->s_op = &ext2_sops;
|
||||||
sb->s_export_op = &ext2_export_ops;
|
sb->s_export_op = &ext2_export_ops;
|
||||||
sb->s_xattr = ext2_xattr_handlers;
|
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);
|
root = ext2_iget(sb, EXT2_ROOT_INO);
|
||||||
if (IS_ERR(root)) {
|
if (IS_ERR(root)) {
|
||||||
ret = PTR_ERR(root);
|
ret = PTR_ERR(root);
|
||||||
|
@ -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_op = &jfs_super_operations;
|
||||||
sb->s_export_op = &jfs_export_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
|
* Initialize direct-mapping inode/address-space
|
||||||
|
@ -1847,6 +1847,7 @@ const struct dquot_operations dquot_operations = {
|
|||||||
.alloc_dquot = dquot_alloc,
|
.alloc_dquot = dquot_alloc,
|
||||||
.destroy_dquot = dquot_destroy,
|
.destroy_dquot = dquot_destroy,
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL(dquot_operations);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic helper for ->open on filesystems supporting disk quotas.
|
* Generic helper for ->open on filesystems supporting disk quotas.
|
||||||
@ -2491,7 +2492,7 @@ const struct quotactl_ops vfs_quotactl_ops = {
|
|||||||
.get_dqblk = vfs_get_dqblk,
|
.get_dqblk = vfs_get_dqblk,
|
||||||
.set_dqblk = vfs_set_dqblk
|
.set_dqblk = vfs_set_dqblk
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL(vfs_quotactl_ops);
|
||||||
|
|
||||||
static int do_proc_dqstats(struct ctl_table *table, int write,
|
static int do_proc_dqstats(struct ctl_table *table, int write,
|
||||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
void __user *buffer, size_t *lenp, loff_t *ppos)
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/acct.h>
|
#include <linux/acct.h>
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
#include <linux/quotaops.h>
|
|
||||||
#include <linux/mount.h>
|
#include <linux/mount.h>
|
||||||
#include <linux/security.h>
|
#include <linux/security.h>
|
||||||
#include <linux/writeback.h> /* for the emergency remount stuff */
|
#include <linux/writeback.h> /* for the emergency remount stuff */
|
||||||
@ -94,8 +93,6 @@ static struct super_block *alloc_super(struct file_system_type *type)
|
|||||||
init_rwsem(&s->s_dquot.dqptr_sem);
|
init_rwsem(&s->s_dquot.dqptr_sem);
|
||||||
init_waitqueue_head(&s->s_wait_unfrozen);
|
init_waitqueue_head(&s->s_wait_unfrozen);
|
||||||
s->s_maxbytes = MAX_NON_LFS;
|
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_op = &default_op;
|
||||||
s->s_time_gran = 1000000000;
|
s->s_time_gran = 1000000000;
|
||||||
}
|
}
|
||||||
|
@ -1948,7 +1948,11 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
|
|||||||
/* Fill in the rest of the superblock */
|
/* Fill in the rest of the superblock */
|
||||||
sb->s_op = &udf_sb_ops;
|
sb->s_op = &udf_sb_ops;
|
||||||
sb->s_export_op = &udf_export_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_dirt = 0;
|
||||||
sb->s_magic = UDF_SUPER_MAGIC;
|
sb->s_magic = UDF_SUPER_MAGIC;
|
||||||
sb->s_time_gran = 1000;
|
sb->s_time_gran = 1000;
|
||||||
|
@ -1045,7 +1045,11 @@ magic_found:
|
|||||||
*/
|
*/
|
||||||
sb->s_op = &ufs_super_ops;
|
sb->s_op = &ufs_super_ops;
|
||||||
sb->s_export_op = &ufs_export_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);
|
sb->s_magic = fs32_to_cpu(sb, usb3->fs_magic);
|
||||||
|
|
||||||
uspi->s_sblkno = fs32_to_cpu(sb, usb1->fs_sblkno);
|
uspi->s_sblkno = fs32_to_cpu(sb, usb1->fs_sblkno);
|
||||||
|
@ -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 dquot_operations dquot_operations;
|
||||||
extern const struct quotactl_ops vfs_quotactl_ops;
|
extern const struct quotactl_ops vfs_quotactl_ops;
|
||||||
|
|
||||||
#define sb_dquot_ops (&dquot_operations)
|
|
||||||
#define sb_quotactl_ops (&vfs_quotactl_ops)
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
|
static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
|
||||||
@ -199,12 +196,6 @@ static inline int sb_any_quota_active(struct super_block *sb)
|
|||||||
return 0;
|
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)
|
static inline void dquot_initialize(struct inode *inode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user