Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] 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 <hch@lst.de>
Acked-by: Jan Kara <jack@ucw.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Christoph Hellwig and committed by
Linus Torvalds
84de856e df164db5

+26 -39
+19 -4
fs/dquot.c
··· 1519 1519 * This function is used when filesystem needs to initialize quotas 1520 1520 * during mount time. 1521 1521 */ 1522 - int vfs_quota_on_mount(int type, int format_id, struct dentry *dentry) 1522 + int vfs_quota_on_mount(struct super_block *sb, char *qf_name, 1523 + int format_id, int type) 1523 1524 { 1525 + struct qstr name = {.name = qf_name, .len = 0, .len = strlen(qf_name)}; 1526 + struct dentry *dentry; 1524 1527 int error; 1525 1528 1529 + dentry = lookup_hash(&name, sb->s_root); 1530 + if (IS_ERR(dentry)) 1531 + return PTR_ERR(dentry); 1532 + 1526 1533 error = security_quota_on(dentry); 1527 - if (error) 1528 - return error; 1529 - return vfs_quota_on_inode(dentry->d_inode, type, format_id); 1534 + if (!error) 1535 + error = vfs_quota_on_inode(dentry->d_inode, type, format_id); 1536 + 1537 + /* 1538 + * Now invalidate and put the dentry - quota got its own reference 1539 + * to inode and dentry has at least wrong hash so we had better 1540 + * throw it away. 1541 + */ 1542 + d_invalidate(dentry); 1543 + dput(dentry); 1544 + return error; 1530 1545 } 1531 1546 1532 1547 /* Generic routine for getting common part of quota structure */
+2 -16
fs/ext3/super.c
··· 2348 2348 */ 2349 2349 static int ext3_quota_on_mount(struct super_block *sb, int type) 2350 2350 { 2351 - int err; 2352 - struct dentry *dentry; 2353 - struct qstr name = { .name = EXT3_SB(sb)->s_qf_names[type], 2354 - .hash = 0, 2355 - .len = strlen(EXT3_SB(sb)->s_qf_names[type])}; 2356 - 2357 - dentry = lookup_hash(&name, sb->s_root); 2358 - if (IS_ERR(dentry)) 2359 - return PTR_ERR(dentry); 2360 - err = vfs_quota_on_mount(type, EXT3_SB(sb)->s_jquota_fmt, dentry); 2361 - /* Now invalidate and put the dentry - quota got its own reference 2362 - * to inode and dentry has at least wrong hash so we had better 2363 - * throw it away */ 2364 - d_invalidate(dentry); 2365 - dput(dentry); 2366 - return err; 2351 + return vfs_quota_on_mount(sb, EXT3_SB(sb)->s_qf_names[type], 2352 + EXT3_SB(sb)->s_jquota_fmt, type); 2367 2353 } 2368 2354 2369 2355 /*
+3 -18
fs/reiserfs/super.c
··· 1932 1932 } 1933 1933 1934 1934 /* 1935 - * Turn on quotas during mount time - we need to find 1936 - * the quota file and such... 1935 + * Turn on quotas during mount time - we need to find the quota file and such... 1937 1936 */ 1938 1937 static int reiserfs_quota_on_mount(struct super_block *sb, int type) 1939 1938 { 1940 - int err; 1941 - struct dentry *dentry; 1942 - struct qstr name = { .name = REISERFS_SB(sb)->s_qf_names[type], 1943 - .hash = 0, 1944 - .len = strlen(REISERFS_SB(sb)->s_qf_names[type])}; 1945 - 1946 - dentry = lookup_hash(&name, sb->s_root); 1947 - if (IS_ERR(dentry)) 1948 - return PTR_ERR(dentry); 1949 - err = vfs_quota_on_mount(type, REISERFS_SB(sb)->s_jquota_fmt, dentry); 1950 - /* Now invalidate and put the dentry - quota got its own reference 1951 - * to inode and dentry has at least wrong hash so we had better 1952 - * throw it away */ 1953 - d_invalidate(dentry); 1954 - dput(dentry); 1955 - return err; 1939 + return vfs_quota_on_mount(sb, REISERFS_SB(sb)->s_qf_names[type], 1940 + REISERFS_SB(sb)->s_jquota_fmt, type); 1956 1941 } 1957 1942 1958 1943 /*
+2 -1
include/linux/quotaops.h
··· 39 39 extern int dquot_mark_dquot_dirty(struct dquot *dquot); 40 40 41 41 extern int vfs_quota_on(struct super_block *sb, int type, int format_id, char *path); 42 - extern int vfs_quota_on_mount(int type, int format_id, struct dentry *dentry); 42 + extern int vfs_quota_on_mount(struct super_block *sb, char *qf_name, 43 + int format_id, int type); 43 44 extern int vfs_quota_off(struct super_block *sb, int type); 44 45 #define vfs_quota_off_mount(sb, type) vfs_quota_off(sb, type) 45 46 extern int vfs_quota_sync(struct super_block *sb, int type);