Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull ext2, ext3, udf updates from Jan Kara: "Several UDF fixes, a support for UDF extent cache, and couple of ext2 and ext3 cleanups and minor fixes" * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: Ext2: remove the static function release_blocks to optimize the kernel Ext2: mark inode dirty after the function dquot_free_block_nodirty is called Ext2: remove the overhead check about sb in the function ext2_new_blocks udf: Remove unused s_extLength from udf_bitmap udf: Make s_block_bitmap standard array udf: Fix bitmap overflow on large filesystems with small block size udf: add extent cache support in case of file reading udf: Write LVID to disk after opening / closing Ext3: return ENOMEM rather than EIO if sb_getblk fails Ext2: return ENOMEM rather than EIO if sb_getblk fails Ext3: use unlikely to improve the efficiency of the kernel Ext2: use unlikely to improve the efficiency of the kernel Ext3: add necessary check in case IO error happens Ext2: free memory allocated and forget buffer head when io error happens ext3: Fix memory leak when quota options are specified multiple times ext3, ext4, ocfs2: remove unused macro NAMEI_RA_INDEX
This commit is contained in:
commit
bbbd27e694
16 changed files with 178 additions and 79 deletions
|
@ -916,21 +916,24 @@ static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
|
|||
"Not enough memory for storing quotafile name");
|
||||
return 0;
|
||||
}
|
||||
if (sbi->s_qf_names[qtype] &&
|
||||
strcmp(sbi->s_qf_names[qtype], qname)) {
|
||||
if (sbi->s_qf_names[qtype]) {
|
||||
int same = !strcmp(sbi->s_qf_names[qtype], qname);
|
||||
|
||||
kfree(qname);
|
||||
if (!same) {
|
||||
ext3_msg(sb, KERN_ERR,
|
||||
"%s quota file already specified",
|
||||
QTYPE2NAME(qtype));
|
||||
}
|
||||
return same;
|
||||
}
|
||||
if (strchr(qname, '/')) {
|
||||
ext3_msg(sb, KERN_ERR,
|
||||
"%s quota file already specified", QTYPE2NAME(qtype));
|
||||
"quotafile must be on filesystem root");
|
||||
kfree(qname);
|
||||
return 0;
|
||||
}
|
||||
sbi->s_qf_names[qtype] = qname;
|
||||
if (strchr(sbi->s_qf_names[qtype], '/')) {
|
||||
ext3_msg(sb, KERN_ERR,
|
||||
"quotafile must be on filesystem root");
|
||||
kfree(sbi->s_qf_names[qtype]);
|
||||
sbi->s_qf_names[qtype] = NULL;
|
||||
return 0;
|
||||
}
|
||||
set_opt(sbi->s_mount_opt, QUOTA);
|
||||
return 1;
|
||||
}
|
||||
|
@ -945,11 +948,10 @@ static int clear_qf_name(struct super_block *sb, int qtype) {
|
|||
" when quota turned on");
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* The space will be released later when all options are confirmed
|
||||
* to be correct
|
||||
*/
|
||||
sbi->s_qf_names[qtype] = NULL;
|
||||
if (sbi->s_qf_names[qtype]) {
|
||||
kfree(sbi->s_qf_names[qtype]);
|
||||
sbi->s_qf_names[qtype] = NULL;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
@ -2606,7 +2608,18 @@ static int ext3_remount (struct super_block * sb, int * flags, char * data)
|
|||
#ifdef CONFIG_QUOTA
|
||||
old_opts.s_jquota_fmt = sbi->s_jquota_fmt;
|
||||
for (i = 0; i < MAXQUOTAS; i++)
|
||||
old_opts.s_qf_names[i] = sbi->s_qf_names[i];
|
||||
if (sbi->s_qf_names[i]) {
|
||||
old_opts.s_qf_names[i] = kstrdup(sbi->s_qf_names[i],
|
||||
GFP_KERNEL);
|
||||
if (!old_opts.s_qf_names[i]) {
|
||||
int j;
|
||||
|
||||
for (j = 0; j < i; j++)
|
||||
kfree(old_opts.s_qf_names[j]);
|
||||
return -ENOMEM;
|
||||
}
|
||||
} else
|
||||
old_opts.s_qf_names[i] = NULL;
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -2699,9 +2712,7 @@ static int ext3_remount (struct super_block * sb, int * flags, char * data)
|
|||
#ifdef CONFIG_QUOTA
|
||||
/* Release old quota file names */
|
||||
for (i = 0; i < MAXQUOTAS; i++)
|
||||
if (old_opts.s_qf_names[i] &&
|
||||
old_opts.s_qf_names[i] != sbi->s_qf_names[i])
|
||||
kfree(old_opts.s_qf_names[i]);
|
||||
kfree(old_opts.s_qf_names[i]);
|
||||
#endif
|
||||
if (enable_quota)
|
||||
dquot_resume(sb, -1);
|
||||
|
@ -2715,9 +2726,7 @@ restore_opts:
|
|||
#ifdef CONFIG_QUOTA
|
||||
sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
|
||||
for (i = 0; i < MAXQUOTAS; i++) {
|
||||
if (sbi->s_qf_names[i] &&
|
||||
old_opts.s_qf_names[i] != sbi->s_qf_names[i])
|
||||
kfree(sbi->s_qf_names[i]);
|
||||
kfree(sbi->s_qf_names[i]);
|
||||
sbi->s_qf_names[i] = old_opts.s_qf_names[i];
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue