diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-03 18:14:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-03 18:14:44 -0400 |
commit | b983471794e568fd71fa767da77a62ba517c3e63 (patch) | |
tree | 92a1cc26c4846b49d90225d004ba1b7bd6fe3d81 /fs/btrfs/super.c | |
parent | 5a3ae276057840f0e60664c12fc3ef80aa59d1d4 (diff) | |
parent | c293498be69816087746161338de4b81efdf69fc (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:
Btrfs: BUG to BUG_ON changes
Btrfs: remove dead code
Btrfs: remove dead code
Btrfs: fix typos in comments
Btrfs: remove unused ftrace include
Btrfs: fix __ucmpdi2 compile bug on 32 bit builds
Btrfs: free inode struct when btrfs_new_inode fails
Btrfs: fix race in worker_loop
Btrfs: add flushoncommit mount option
Btrfs: notreelog mount option
Btrfs: introduce btrfs_show_options
Btrfs: rework allocation clustering
Btrfs: Optimize locking in btrfs_next_leaf()
Btrfs: break up btrfs_search_slot into smaller pieces
Btrfs: kill the pinned_mutex
Btrfs: kill the block group alloc mutex
Btrfs: clean up find_free_extent
Btrfs: free space cache cleanups
Btrfs: unplug in the async bio submission threads
Btrfs: keep processing bios for a given bdev if our proc is batching
Diffstat (limited to 'fs/btrfs/super.c')
-rw-r--r-- | fs/btrfs/super.c | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 19a4daf03ccb..9744af9d71e9 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/highmem.h> | 24 | #include <linux/highmem.h> |
25 | #include <linux/time.h> | 25 | #include <linux/time.h> |
26 | #include <linux/init.h> | 26 | #include <linux/init.h> |
27 | #include <linux/seq_file.h> | ||
27 | #include <linux/string.h> | 28 | #include <linux/string.h> |
28 | #include <linux/smp_lock.h> | 29 | #include <linux/smp_lock.h> |
29 | #include <linux/backing-dev.h> | 30 | #include <linux/backing-dev.h> |
@@ -66,7 +67,8 @@ static void btrfs_put_super(struct super_block *sb) | |||
66 | enum { | 67 | enum { |
67 | Opt_degraded, Opt_subvol, Opt_device, Opt_nodatasum, Opt_nodatacow, | 68 | Opt_degraded, Opt_subvol, Opt_device, Opt_nodatasum, Opt_nodatacow, |
68 | Opt_max_extent, Opt_max_inline, Opt_alloc_start, Opt_nobarrier, | 69 | Opt_max_extent, Opt_max_inline, Opt_alloc_start, Opt_nobarrier, |
69 | Opt_ssd, Opt_thread_pool, Opt_noacl, Opt_compress, Opt_err, | 70 | Opt_ssd, Opt_thread_pool, Opt_noacl, Opt_compress, Opt_notreelog, |
71 | Opt_flushoncommit, Opt_err, | ||
70 | }; | 72 | }; |
71 | 73 | ||
72 | static match_table_t tokens = { | 74 | static match_table_t tokens = { |
@@ -83,6 +85,8 @@ static match_table_t tokens = { | |||
83 | {Opt_compress, "compress"}, | 85 | {Opt_compress, "compress"}, |
84 | {Opt_ssd, "ssd"}, | 86 | {Opt_ssd, "ssd"}, |
85 | {Opt_noacl, "noacl"}, | 87 | {Opt_noacl, "noacl"}, |
88 | {Opt_notreelog, "notreelog"}, | ||
89 | {Opt_flushoncommit, "flushoncommit"}, | ||
86 | {Opt_err, NULL}, | 90 | {Opt_err, NULL}, |
87 | }; | 91 | }; |
88 | 92 | ||
@@ -222,6 +226,14 @@ int btrfs_parse_options(struct btrfs_root *root, char *options) | |||
222 | case Opt_noacl: | 226 | case Opt_noacl: |
223 | root->fs_info->sb->s_flags &= ~MS_POSIXACL; | 227 | root->fs_info->sb->s_flags &= ~MS_POSIXACL; |
224 | break; | 228 | break; |
229 | case Opt_notreelog: | ||
230 | printk(KERN_INFO "btrfs: disabling tree log\n"); | ||
231 | btrfs_set_opt(info->mount_opt, NOTREELOG); | ||
232 | break; | ||
233 | case Opt_flushoncommit: | ||
234 | printk(KERN_INFO "btrfs: turning on flush-on-commit\n"); | ||
235 | btrfs_set_opt(info->mount_opt, FLUSHONCOMMIT); | ||
236 | break; | ||
225 | default: | 237 | default: |
226 | break; | 238 | break; |
227 | } | 239 | } |
@@ -363,9 +375,8 @@ fail_close: | |||
363 | int btrfs_sync_fs(struct super_block *sb, int wait) | 375 | int btrfs_sync_fs(struct super_block *sb, int wait) |
364 | { | 376 | { |
365 | struct btrfs_trans_handle *trans; | 377 | struct btrfs_trans_handle *trans; |
366 | struct btrfs_root *root; | 378 | struct btrfs_root *root = btrfs_sb(sb); |
367 | int ret; | 379 | int ret; |
368 | root = btrfs_sb(sb); | ||
369 | 380 | ||
370 | if (sb->s_flags & MS_RDONLY) | 381 | if (sb->s_flags & MS_RDONLY) |
371 | return 0; | 382 | return 0; |
@@ -385,6 +396,41 @@ int btrfs_sync_fs(struct super_block *sb, int wait) | |||
385 | return ret; | 396 | return ret; |
386 | } | 397 | } |
387 | 398 | ||
399 | static int btrfs_show_options(struct seq_file *seq, struct vfsmount *vfs) | ||
400 | { | ||
401 | struct btrfs_root *root = btrfs_sb(vfs->mnt_sb); | ||
402 | struct btrfs_fs_info *info = root->fs_info; | ||
403 | |||
404 | if (btrfs_test_opt(root, DEGRADED)) | ||
405 | seq_puts(seq, ",degraded"); | ||
406 | if (btrfs_test_opt(root, NODATASUM)) | ||
407 | seq_puts(seq, ",nodatasum"); | ||
408 | if (btrfs_test_opt(root, NODATACOW)) | ||
409 | seq_puts(seq, ",nodatacow"); | ||
410 | if (btrfs_test_opt(root, NOBARRIER)) | ||
411 | seq_puts(seq, ",nobarrier"); | ||
412 | if (info->max_extent != (u64)-1) | ||
413 | seq_printf(seq, ",max_extent=%llu", info->max_extent); | ||
414 | if (info->max_inline != 8192 * 1024) | ||
415 | seq_printf(seq, ",max_inline=%llu", info->max_inline); | ||
416 | if (info->alloc_start != 0) | ||
417 | seq_printf(seq, ",alloc_start=%llu", info->alloc_start); | ||
418 | if (info->thread_pool_size != min_t(unsigned long, | ||
419 | num_online_cpus() + 2, 8)) | ||
420 | seq_printf(seq, ",thread_pool=%d", info->thread_pool_size); | ||
421 | if (btrfs_test_opt(root, COMPRESS)) | ||
422 | seq_puts(seq, ",compress"); | ||
423 | if (btrfs_test_opt(root, SSD)) | ||
424 | seq_puts(seq, ",ssd"); | ||
425 | if (btrfs_test_opt(root, NOTREELOG)) | ||
426 | seq_puts(seq, ",no-treelog"); | ||
427 | if (btrfs_test_opt(root, FLUSHONCOMMIT)) | ||
428 | seq_puts(seq, ",flush-on-commit"); | ||
429 | if (!(root->fs_info->sb->s_flags & MS_POSIXACL)) | ||
430 | seq_puts(seq, ",noacl"); | ||
431 | return 0; | ||
432 | } | ||
433 | |||
388 | static void btrfs_write_super(struct super_block *sb) | 434 | static void btrfs_write_super(struct super_block *sb) |
389 | { | 435 | { |
390 | sb->s_dirt = 0; | 436 | sb->s_dirt = 0; |
@@ -630,7 +676,7 @@ static struct super_operations btrfs_super_ops = { | |||
630 | .put_super = btrfs_put_super, | 676 | .put_super = btrfs_put_super, |
631 | .write_super = btrfs_write_super, | 677 | .write_super = btrfs_write_super, |
632 | .sync_fs = btrfs_sync_fs, | 678 | .sync_fs = btrfs_sync_fs, |
633 | .show_options = generic_show_options, | 679 | .show_options = btrfs_show_options, |
634 | .write_inode = btrfs_write_inode, | 680 | .write_inode = btrfs_write_inode, |
635 | .dirty_inode = btrfs_dirty_inode, | 681 | .dirty_inode = btrfs_dirty_inode, |
636 | .alloc_inode = btrfs_alloc_inode, | 682 | .alloc_inode = btrfs_alloc_inode, |