diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2009-05-20 09:02:28 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2009-05-20 09:02:28 +0200 | 
| commit | 521c180874dae86f675d23c4eade4dba8b1f2cc8 (patch) | |
| tree | 7509303da3a9a1b40a26f6811f321c89cd31737b /fs/btrfs/super.c | |
| parent | f1a11e0576c7a73d759d05d776692b2b2d37172b (diff) | |
| parent | 64d1304a64477629cb16b75491a77bafe6f86963 (diff) | |
Merge branch 'core/urgent' into core/futexes
Merge reason: this branch was on an pre -rc1 base, merge it up to -rc6+
              to get the latest upstream fixes.
Conflicts:
	kernel/futex.c
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/btrfs/super.c')
| -rw-r--r-- | fs/btrfs/super.c | 56 | 
1 files changed, 30 insertions, 26 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 9744af9d71e..2ff7cd2db25 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -68,7 +68,7 @@ enum {  	Opt_degraded, Opt_subvol, Opt_device, Opt_nodatasum, Opt_nodatacow,  	Opt_max_extent, Opt_max_inline, Opt_alloc_start, Opt_nobarrier,  	Opt_ssd, Opt_thread_pool, Opt_noacl,  Opt_compress, Opt_notreelog, -	Opt_flushoncommit, Opt_err, +	Opt_ratio, Opt_flushoncommit, Opt_err,  };  static match_table_t tokens = { @@ -87,6 +87,7 @@ static match_table_t tokens = {  	{Opt_noacl, "noacl"},  	{Opt_notreelog, "notreelog"},  	{Opt_flushoncommit, "flushoncommit"}, +	{Opt_ratio, "metadata_ratio=%d"},  	{Opt_err, NULL},  }; @@ -195,7 +196,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)  				info->max_extent = max_t(u64,  					info->max_extent, root->sectorsize);  				printk(KERN_INFO "btrfs: max_extent at %llu\n", -				       info->max_extent); +				       (unsigned long long)info->max_extent);  			}  			break;  		case Opt_max_inline: @@ -210,7 +211,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)  						root->sectorsize);  				}  				printk(KERN_INFO "btrfs: max_inline at %llu\n", -					info->max_inline); +					(unsigned long long)info->max_inline);  			}  			break;  		case Opt_alloc_start: @@ -220,7 +221,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)  				kfree(num);  				printk(KERN_INFO  					"btrfs: allocations start at %llu\n", -					info->alloc_start); +					(unsigned long long)info->alloc_start);  			}  			break;  		case Opt_noacl: @@ -234,6 +235,15 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)  			printk(KERN_INFO "btrfs: turning on flush-on-commit\n");  			btrfs_set_opt(info->mount_opt, FLUSHONCOMMIT);  			break; +		case Opt_ratio: +			intarg = 0; +			match_int(&args[0], &intarg); +			if (intarg) { +				info->metadata_ratio = intarg; +				printk(KERN_INFO "btrfs: metadata ratio %d\n", +				       info->metadata_ratio); +			} +			break;  		default:  			break;  		} @@ -410,11 +420,14 @@ static int btrfs_show_options(struct seq_file *seq, struct vfsmount *vfs)  	if (btrfs_test_opt(root, NOBARRIER))  		seq_puts(seq, ",nobarrier");  	if (info->max_extent != (u64)-1) -		seq_printf(seq, ",max_extent=%llu", info->max_extent); +		seq_printf(seq, ",max_extent=%llu", +			   (unsigned long long)info->max_extent);  	if (info->max_inline != 8192 * 1024) -		seq_printf(seq, ",max_inline=%llu", info->max_inline); +		seq_printf(seq, ",max_inline=%llu", +			   (unsigned long long)info->max_inline);  	if (info->alloc_start != 0) -		seq_printf(seq, ",alloc_start=%llu", info->alloc_start); +		seq_printf(seq, ",alloc_start=%llu", +			   (unsigned long long)info->alloc_start);  	if (info->thread_pool_size !=  min_t(unsigned long,  					     num_online_cpus() + 2, 8))  		seq_printf(seq, ",thread_pool=%d", info->thread_pool_size); @@ -423,9 +436,9 @@ static int btrfs_show_options(struct seq_file *seq, struct vfsmount *vfs)  	if (btrfs_test_opt(root, SSD))  		seq_puts(seq, ",ssd");  	if (btrfs_test_opt(root, NOTREELOG)) -		seq_puts(seq, ",no-treelog"); +		seq_puts(seq, ",notreelog");  	if (btrfs_test_opt(root, FLUSHONCOMMIT)) -		seq_puts(seq, ",flush-on-commit"); +		seq_puts(seq, ",flushoncommit");  	if (!(root->fs_info->sb->s_flags & MS_POSIXACL))  		seq_puts(seq, ",noacl");  	return 0; @@ -489,8 +502,7 @@ static int btrfs_get_sb(struct file_system_type *fs_type, int flags,  	if (s->s_root) {  		if ((flags ^ s->s_flags) & MS_RDONLY) { -			up_write(&s->s_umount); -			deactivate_super(s); +			deactivate_locked_super(s);  			error = -EBUSY;  			goto error_close_devices;  		} @@ -504,8 +516,7 @@ static int btrfs_get_sb(struct file_system_type *fs_type, int flags,  		error = btrfs_fill_super(s, fs_devices, data,  					 flags & MS_SILENT ? 1 : 0);  		if (error) { -			up_write(&s->s_umount); -			deactivate_super(s); +			deactivate_locked_super(s);  			goto error_free_subvol_name;  		} @@ -522,15 +533,13 @@ static int btrfs_get_sb(struct file_system_type *fs_type, int flags,  		mutex_unlock(&s->s_root->d_inode->i_mutex);  		if (IS_ERR(root)) { -			up_write(&s->s_umount); -			deactivate_super(s); +			deactivate_locked_super(s);  			error = PTR_ERR(root);  			goto error_free_subvol_name;  		}  		if (!root->d_inode) {  			dput(root); -			up_write(&s->s_umount); -			deactivate_super(s); +			deactivate_locked_super(s);  			error = -ENXIO;  			goto error_free_subvol_name;  		} @@ -635,14 +644,9 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd,  	if (!capable(CAP_SYS_ADMIN))  		return -EPERM; -	vol = kmalloc(sizeof(*vol), GFP_KERNEL); -	if (!vol) -		return -ENOMEM; - -	if (copy_from_user(vol, (void __user *)arg, sizeof(*vol))) { -		ret = -EFAULT; -		goto out; -	} +	vol = memdup_user((void __user *)arg, sizeof(*vol)); +	if (IS_ERR(vol)) +		return PTR_ERR(vol);  	switch (cmd) {  	case BTRFS_IOC_SCAN_DEV: @@ -650,7 +654,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd,  					    &btrfs_fs_type, &fs_devices);  		break;  	} -out: +  	kfree(vol);  	return ret;  }  | 
