diff options
Diffstat (limited to 'fs/btrfs/super.c')
-rw-r--r-- | fs/btrfs/super.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index b2130c46fdb5..d39a9895d932 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
@@ -155,7 +155,8 @@ enum { | |||
155 | Opt_nossd, Opt_ssd_spread, Opt_thread_pool, Opt_noacl, Opt_compress, | 155 | Opt_nossd, Opt_ssd_spread, Opt_thread_pool, Opt_noacl, Opt_compress, |
156 | Opt_compress_type, Opt_compress_force, Opt_compress_force_type, | 156 | Opt_compress_type, Opt_compress_force, Opt_compress_force_type, |
157 | Opt_notreelog, Opt_ratio, Opt_flushoncommit, Opt_discard, | 157 | Opt_notreelog, Opt_ratio, Opt_flushoncommit, Opt_discard, |
158 | Opt_space_cache, Opt_clear_cache, Opt_user_subvol_rm_allowed, Opt_err, | 158 | Opt_space_cache, Opt_clear_cache, Opt_user_subvol_rm_allowed, |
159 | Opt_enospc_debug, Opt_err, | ||
159 | }; | 160 | }; |
160 | 161 | ||
161 | static match_table_t tokens = { | 162 | static match_table_t tokens = { |
@@ -184,6 +185,7 @@ static match_table_t tokens = { | |||
184 | {Opt_space_cache, "space_cache"}, | 185 | {Opt_space_cache, "space_cache"}, |
185 | {Opt_clear_cache, "clear_cache"}, | 186 | {Opt_clear_cache, "clear_cache"}, |
186 | {Opt_user_subvol_rm_allowed, "user_subvol_rm_allowed"}, | 187 | {Opt_user_subvol_rm_allowed, "user_subvol_rm_allowed"}, |
188 | {Opt_enospc_debug, "enospc_debug"}, | ||
187 | {Opt_err, NULL}, | 189 | {Opt_err, NULL}, |
188 | }; | 190 | }; |
189 | 191 | ||
@@ -358,6 +360,9 @@ int btrfs_parse_options(struct btrfs_root *root, char *options) | |||
358 | case Opt_user_subvol_rm_allowed: | 360 | case Opt_user_subvol_rm_allowed: |
359 | btrfs_set_opt(info->mount_opt, USER_SUBVOL_RM_ALLOWED); | 361 | btrfs_set_opt(info->mount_opt, USER_SUBVOL_RM_ALLOWED); |
360 | break; | 362 | break; |
363 | case Opt_enospc_debug: | ||
364 | btrfs_set_opt(info->mount_opt, ENOSPC_DEBUG); | ||
365 | break; | ||
361 | case Opt_err: | 366 | case Opt_err: |
362 | printk(KERN_INFO "btrfs: unrecognized mount option " | 367 | printk(KERN_INFO "btrfs: unrecognized mount option " |
363 | "'%s'\n", p); | 368 | "'%s'\n", p); |
@@ -383,7 +388,7 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags, | |||
383 | struct btrfs_fs_devices **fs_devices) | 388 | struct btrfs_fs_devices **fs_devices) |
384 | { | 389 | { |
385 | substring_t args[MAX_OPT_ARGS]; | 390 | substring_t args[MAX_OPT_ARGS]; |
386 | char *opts, *p; | 391 | char *opts, *orig, *p; |
387 | int error = 0; | 392 | int error = 0; |
388 | int intarg; | 393 | int intarg; |
389 | 394 | ||
@@ -397,6 +402,7 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags, | |||
397 | opts = kstrdup(options, GFP_KERNEL); | 402 | opts = kstrdup(options, GFP_KERNEL); |
398 | if (!opts) | 403 | if (!opts) |
399 | return -ENOMEM; | 404 | return -ENOMEM; |
405 | orig = opts; | ||
400 | 406 | ||
401 | while ((p = strsep(&opts, ",")) != NULL) { | 407 | while ((p = strsep(&opts, ",")) != NULL) { |
402 | int token; | 408 | int token; |
@@ -432,7 +438,7 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags, | |||
432 | } | 438 | } |
433 | 439 | ||
434 | out_free_opts: | 440 | out_free_opts: |
435 | kfree(opts); | 441 | kfree(orig); |
436 | out: | 442 | out: |
437 | /* | 443 | /* |
438 | * If no subvolume name is specified we use the default one. Allocate | 444 | * If no subvolume name is specified we use the default one. Allocate |
@@ -623,6 +629,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait) | |||
623 | btrfs_wait_ordered_extents(root, 0, 0); | 629 | btrfs_wait_ordered_extents(root, 0, 0); |
624 | 630 | ||
625 | trans = btrfs_start_transaction(root, 0); | 631 | trans = btrfs_start_transaction(root, 0); |
632 | if (IS_ERR(trans)) | ||
633 | return PTR_ERR(trans); | ||
626 | ret = btrfs_commit_transaction(trans, root); | 634 | ret = btrfs_commit_transaction(trans, root); |
627 | return ret; | 635 | return ret; |
628 | } | 636 | } |
@@ -761,6 +769,8 @@ static struct dentry *btrfs_mount(struct file_system_type *fs_type, int flags, | |||
761 | } | 769 | } |
762 | 770 | ||
763 | btrfs_close_devices(fs_devices); | 771 | btrfs_close_devices(fs_devices); |
772 | kfree(fs_info); | ||
773 | kfree(tree_root); | ||
764 | } else { | 774 | } else { |
765 | char b[BDEVNAME_SIZE]; | 775 | char b[BDEVNAME_SIZE]; |
766 | 776 | ||