diff options
Diffstat (limited to 'fs/ext4/ioctl.c')
| -rw-r--r-- | fs/ext4/ioctl.c | 21 | 
1 files changed, 12 insertions, 9 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index bb415408fdb..7050a9cd04a 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -12,7 +12,6 @@  #include <linux/capability.h>  #include <linux/time.h>  #include <linux/compat.h> -#include <linux/smp_lock.h>  #include <linux/mount.h>  #include <linux/file.h>  #include <asm/uaccess.h> @@ -192,7 +191,7 @@ setversion_out:  	case EXT4_IOC_GROUP_EXTEND: {  		ext4_fsblk_t n_blocks_count;  		struct super_block *sb = inode->i_sb; -		int err, err2; +		int err, err2=0;  		if (!capable(CAP_SYS_RESOURCE))  			return -EPERM; @@ -205,9 +204,11 @@ setversion_out:  			return err;  		err = ext4_group_extend(sb, EXT4_SB(sb)->s_es, n_blocks_count); -		jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); -		err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal); -		jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); +		if (EXT4_SB(sb)->s_journal) { +			jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); +			err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal); +			jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); +		}  		if (err == 0)  			err = err2;  		mnt_drop_write(filp->f_path.mnt); @@ -252,7 +253,7 @@ setversion_out:  	case EXT4_IOC_GROUP_ADD: {  		struct ext4_new_group_data input;  		struct super_block *sb = inode->i_sb; -		int err, err2; +		int err, err2=0;  		if (!capable(CAP_SYS_RESOURCE))  			return -EPERM; @@ -266,9 +267,11 @@ setversion_out:  			return err;  		err = ext4_group_add(sb, &input); -		jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); -		err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal); -		jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); +		if (EXT4_SB(sb)->s_journal) { +			jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); +			err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal); +			jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); +		}  		if (err == 0)  			err = err2;  		mnt_drop_write(filp->f_path.mnt);  |