diff options
| author | Tony Lindgren <tony@atomide.com> | 2011-11-07 12:27:23 -0800 | 
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2011-11-07 12:27:23 -0800 | 
| commit | d30cc16c8e48368e0518f4975a78711e53e14a0f (patch) | |
| tree | 26b57f7ab5a963cc3d6c57dff6951bd930875583 /fs/ext4/ioctl.c | |
| parent | 41eb2d813f558900884e240c2f723e36c7bd151f (diff) | |
| parent | a1bcc1dcef8451b4291ea2a1b2677cb194102952 (diff) | |
| download | olio-linux-3.10-d30cc16c8e48368e0518f4975a78711e53e14a0f.tar.xz olio-linux-3.10-d30cc16c8e48368e0518f4975a78711e53e14a0f.zip  | |
Merge branch 'fixes-modulesplit' into fixes
Diffstat (limited to 'fs/ext4/ioctl.c')
| -rw-r--r-- | fs/ext4/ioctl.c | 65 | 
1 files changed, 31 insertions, 34 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index f18bfe37aff..a56796814d6 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -21,6 +21,7 @@  long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)  {  	struct inode *inode = filp->f_dentry->d_inode; +	struct super_block *sb = inode->i_sb;  	struct ext4_inode_info *ei = EXT4_I(inode);  	unsigned int flags; @@ -173,33 +174,8 @@ setversion_out:  		mnt_drop_write(filp->f_path.mnt);  		return err;  	} -#ifdef CONFIG_JBD2_DEBUG -	case EXT4_IOC_WAIT_FOR_READONLY: -		/* -		 * This is racy - by the time we're woken up and running, -		 * the superblock could be released.  And the module could -		 * have been unloaded.  So sue me. -		 * -		 * Returns 1 if it slept, else zero. -		 */ -		{ -			struct super_block *sb = inode->i_sb; -			DECLARE_WAITQUEUE(wait, current); -			int ret = 0; - -			set_current_state(TASK_INTERRUPTIBLE); -			add_wait_queue(&EXT4_SB(sb)->ro_wait_queue, &wait); -			if (timer_pending(&EXT4_SB(sb)->turn_ro_timer)) { -				schedule(); -				ret = 1; -			} -			remove_wait_queue(&EXT4_SB(sb)->ro_wait_queue, &wait); -			return ret; -		} -#endif  	case EXT4_IOC_GROUP_EXTEND: {  		ext4_fsblk_t n_blocks_count; -		struct super_block *sb = inode->i_sb;  		int err, err2=0;  		err = ext4_resize_begin(sb); @@ -209,6 +185,13 @@ setversion_out:  		if (get_user(n_blocks_count, (__u32 __user *)arg))  			return -EFAULT; +		if (EXT4_HAS_RO_COMPAT_FEATURE(sb, +			       EXT4_FEATURE_RO_COMPAT_BIGALLOC)) { +			ext4_msg(sb, KERN_ERR, +				 "Online resizing not supported with bigalloc"); +			return -EOPNOTSUPP; +		} +  		err = mnt_want_write(filp->f_path.mnt);  		if (err)  			return err; @@ -250,6 +233,13 @@ setversion_out:  			goto mext_out;  		} +		if (EXT4_HAS_RO_COMPAT_FEATURE(sb, +			       EXT4_FEATURE_RO_COMPAT_BIGALLOC)) { +			ext4_msg(sb, KERN_ERR, +				 "Online defrag not supported with bigalloc"); +			return -EOPNOTSUPP; +		} +  		err = mnt_want_write(filp->f_path.mnt);  		if (err)  			goto mext_out; @@ -270,7 +260,6 @@ mext_out:  	case EXT4_IOC_GROUP_ADD: {  		struct ext4_new_group_data input; -		struct super_block *sb = inode->i_sb;  		int err, err2=0;  		err = ext4_resize_begin(sb); @@ -281,6 +270,13 @@ mext_out:  				sizeof(input)))  			return -EFAULT; +		if (EXT4_HAS_RO_COMPAT_FEATURE(sb, +			       EXT4_FEATURE_RO_COMPAT_BIGALLOC)) { +			ext4_msg(sb, KERN_ERR, +				 "Online resizing not supported with bigalloc"); +			return -EOPNOTSUPP; +		} +  		err = mnt_want_write(filp->f_path.mnt);  		if (err)  			return err; @@ -337,7 +333,6 @@ mext_out:  	case FITRIM:  	{ -		struct super_block *sb = inode->i_sb;  		struct request_queue *q = bdev_get_queue(sb->s_bdev);  		struct fstrim_range range;  		int ret = 0; @@ -348,7 +343,14 @@ mext_out:  		if (!blk_queue_discard(q))  			return -EOPNOTSUPP; -		if (copy_from_user(&range, (struct fstrim_range *)arg, +		if (EXT4_HAS_RO_COMPAT_FEATURE(sb, +			       EXT4_FEATURE_RO_COMPAT_BIGALLOC)) { +			ext4_msg(sb, KERN_ERR, +				 "FITRIM not supported with bigalloc"); +			return -EOPNOTSUPP; +		} + +		if (copy_from_user(&range, (struct fstrim_range __user *)arg,  		    sizeof(range)))  			return -EFAULT; @@ -358,7 +360,7 @@ mext_out:  		if (ret < 0)  			return ret; -		if (copy_to_user((struct fstrim_range *)arg, &range, +		if (copy_to_user((struct fstrim_range __user *)arg, &range,  		    sizeof(range)))  			return -EFAULT; @@ -396,11 +398,6 @@ long ext4_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)  	case EXT4_IOC32_SETVERSION_OLD:  		cmd = EXT4_IOC_SETVERSION_OLD;  		break; -#ifdef CONFIG_JBD2_DEBUG -	case EXT4_IOC32_WAIT_FOR_READONLY: -		cmd = EXT4_IOC_WAIT_FOR_READONLY; -		break; -#endif  	case EXT4_IOC32_GETRSVSZ:  		cmd = EXT4_IOC_GETRSVSZ;  		break;  |