quota: consolidate code surrounding vfs_quota_on_mount
PATCH 1/2 quota: consolidate code surrounding vfs_quota_on_mount
Move some code duplicated in both callers into vfs_quota_on_mount
Signed-off-by Christoph Hellwig <[email protected]>
fs/reiserfs/super.c +3 -18
@@ -1930,27 +1930,12 @@ }/* -* Turn on quotas during mount time - we need to find -* the quota file and such... +* Turn on quotas during mount time - we need to find the quota file and such... */ static int reiserfs_quota_on_mount (struct super_block *sb,int type) { -int err; -struct dentry *dentry; -struct qstr name = { .name =REISERFS_SB (sb)->s_qf_names[type], - .hash =0 , - .len =strlen (REISERFS_SB (sb)->s_qf_names[type])}; - - dentry =lookup_hash (&name, sb->s_root); -if (IS_ERR (dentry)) -return PTR_ERR (dentry); - err =vfs_quota_on_mount (type,REISERFS_SB (sb)->s_jquota_fmt, dentry); -/* Now invalidate and put the dentry - quota got its own reference -* to inode and dentry has at least wrong hash so we had better -* throw it away */ -d_invalidate (dentry); -dput (dentry); -return err; +return vfs_quota_on_mount (sb,REISERFS_SB (sb)->s_qf_names[type], +REISERFS_SB (sb)->s_jquota_fmt, type); }/*
fs/ext3/super.c +2 -16
@@ -2340,22 +2340,8 @@*/ static int ext3_quota_on_mount (struct super_block *sb,int type) { -int err; -struct dentry *dentry; -struct qstr name = { .name =EXT3_SB (sb)->s_qf_names[type], - .hash =0 , - .len =strlen (EXT3_SB (sb)->s_qf_names[type])}; - - dentry =lookup_hash (&name, sb->s_root); -if (IS_ERR (dentry)) -return PTR_ERR (dentry); - err =vfs_quota_on_mount (type,EXT3_SB (sb)->s_jquota_fmt, dentry); -/* Now invalidate and put the dentry - quota got its own reference -* to inode and dentry has at least wrong hash so we had better -* throw it away */ -d_invalidate (dentry); -dput (dentry); -return err; +return vfs_quota_on_mount (sb,EXT3_SB (sb)->s_qf_names[type], +EXT3_SB (sb)->s_jquota_fmt, type); }/*
include/linux/quotaops.h +2 -1
@@ -39,7 +39,8 @@extern int dquot_mark_dquot_dirty (struct dquot *dquot);extern int vfs_quota_on (struct super_block *sb,int type,int format_id,char *path); -extern int vfs_quota_on_mount (int type,int format_id,struct dentry *dentry); +extern int vfs_quota_on_mount (struct super_block *sb,char *qf_name, +int format_id,int type);extern int vfs_quota_off (struct super_block *sb,int type);#define vfs_quota_off_mount (sb, type) vfs_quota_off(sb, type)extern int vfs_quota_sync (struct super_block *sb,int type);
fs/dquot.c +19 -4
@@ -1519,14 +1519,29 @@* This function is used when filesystem needs to initialize quotas * during mount time. */ -int vfs_quota_on_mount (int type,int format_id,struct dentry *dentry) +int vfs_quota_on_mount (struct super_block *sb,char *qf_name, +int format_id,int type) { +struct qstr name = {.name = qf_name, .len =0 , .len =strlen (qf_name)}; +struct dentry *dentry;int error; + dentry =lookup_hash (&name, sb->s_root); +if (IS_ERR (dentry)) +return PTR_ERR (dentry); + error =security_quota_on (dentry); -if (error) -return error; -return vfs_quota_on_inode (dentry->d_inode, type, format_id); +if (!error) + error =vfs_quota_on_inode (dentry->d_inode, type, format_id); + +/* +* Now invalidate and put the dentry - quota got its own reference +* to inode and dentry has at least wrong hash so we had better +* throw it away. +*/ +d_invalidate (dentry); +dput (dentry); +return error; }/* Generic routine for getting common part of quota structure */
Quoted 4 lines
Move some code duplicated in both callers into
vfs_quota_on_mountSigned-off-by Christoph Hellwig <[email protected]>
Acked-by Jan Kara <[email protected]>
Quoted 106 lines
Index:
linux-2.6/fs/reiserfs/super.c
===================================================================fs/reiserfs/super.c +3
-18@@ -1930,27 +1930,12 @@ }/* -* Turn on quotas during mount time - we need to find -* the quota file and such... +* Turn on quotas during mount time - we need to find the quota file and such... */ static int reiserfs_quota_on_mount (struct super_block *sb,int type) { -int err; -struct dentry *dentry; -struct qstr name = { .name =REISERFS_SB (sb)->s_qf_names[type], - .hash =0 , - .len =strlen (REISERFS_SB (sb)->s_qf_names[type])}; - - dentry =lookup_hash (&name, sb->s_root); -if (IS_ERR (dentry)) -return PTR_ERR (dentry); - err =vfs_quota_on_mount (type,REISERFS_SB (sb)->s_jquota_fmt, dentry); -/* Now invalidate and put the dentry - quota got its own reference -* to inode and dentry has at least wrong hash so we had better -* throw it away */ -d_invalidate (dentry); -dput (dentry); -return err; +return vfs_quota_on_mount (sb,REISERFS_SB (sb)->s_qf_names[type], +REISERFS_SB (sb)->s_jquota_fmt, type); }/* Index:
linux-2.6/fs/ext3/super.c
===================================================================fs/ext3/super.c +2
-16@@ -2340,22 +2340,8 @@*/ static int ext3_quota_on_mount (struct super_block *sb,int type) { -int err; -struct dentry *dentry; -struct qstr name = { .name =EXT3_SB (sb)->s_qf_names[type], - .hash =0 , - .len =strlen (EXT3_SB (sb)->s_qf_names[type])}; - - dentry =lookup_hash (&name, sb->s_root); -if (IS_ERR (dentry)) -return PTR_ERR (dentry); - err =vfs_quota_on_mount (type,EXT3_SB (sb)->s_jquota_fmt, dentry); -/* Now invalidate and put the dentry - quota got its own reference -* to inode and dentry has at least wrong hash so we had better -* throw it away */ -d_invalidate (dentry); -dput (dentry); -return err; +return vfs_quota_on_mount (sb,EXT3_SB (sb)->s_qf_names[type], +EXT3_SB (sb)->s_jquota_fmt, type); }/* Index:
linux-2.6/include/linux/quotaops.h
===================================================================include/linux/quotaops.h +2
-1@@ -39,7 +39,8 @@extern int dquot_mark_dquot_dirty (struct dquot *dquot);extern int vfs_quota_on (struct super_block *sb,int type,int format_id,char *path); -extern int vfs_quota_on_mount (int type,int format_id,struct dentry *dentry); +extern int vfs_quota_on_mount (struct super_block *sb,char *qf_name, +int format_id,int type);extern int vfs_quota_off (struct super_block *sb,int type);#define vfs_quota_off_mount (sb, type) vfs_quota_off(sb, type)extern int vfs_quota_sync (struct super_block *sb,int type);Index:
linux-2.6/fs/dquot.c
===================================================================fs/dquot.c +12
-4@@ -1519,14 +1519,29 @@* This function is used when filesystem needs to initialize quotas * during mount time. */ -int vfs_quota_on_mount (int type,int format_id,struct dentry *dentry) +int vfs_quota_on_mount (struct super_block *sb,char *qf_name, +int format_id,int type) { +struct qstr name = {.name = qf_name, .len =0 , .len =strlen (qf_name)}; +struct dentry *dentry;int error; + dentry =lookup_hash (&name, sb->s_root); +if (IS_ERR (dentry)) +return PTR_ERR (dentry); + error =security_quota_on (dentry); -if (error) -return error; -return vfs_quota_on_inode (dentry->d_inode, type, format_id); +if (!error) + error =vfs_quota_on_inode (dentry->d_inode, type, format_id); + +/*
fs/dquot.c line 1547
Quoted 10 lines
fs/dquot.c +7
-0+* Now invalidate and put the dentry - quota got its own reference +* to inode and dentry has at least wrong hash so we had better +* throw it away. +*/ +d_invalidate (dentry); +dput (dentry); +return error; }/* Generic routine for getting common part of quota structure */
Honza
Signature · 2 lines
Jan Kara <[email protected]> SuSE CR Labs