aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/ctree.h10
-rw-r--r--fs/btrfs/super.c4
2 files changed, 14 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 169baa817d96..d8e539fe5544 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -1304,6 +1304,16 @@ struct btrfs_fs_info {
1304 * so it is also safe. 1304 * so it is also safe.
1305 */ 1305 */
1306 u64 max_inline; 1306 u64 max_inline;
1307 /*
1308 * Protected by ->chunk_mutex and sb->s_umount.
1309 *
1310 * The reason that we use two lock to protect it is because only
1311 * remount and mount operations can change it and these two operations
1312 * are under sb->s_umount, but the read side (chunk allocation) can not
1313 * acquire sb->s_umount or the deadlock would happen. So we use two
1314 * locks to protect it. On the write side, we must acquire two locks,
1315 * and on the read side, we just need acquire one of them.
1316 */
1307 u64 alloc_start; 1317 u64 alloc_start;
1308 struct btrfs_transaction *running_transaction; 1318 struct btrfs_transaction *running_transaction;
1309 wait_queue_head_t transaction_throttle; 1319 wait_queue_head_t transaction_throttle;
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 6846ededfe95..eda330df45a4 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -519,7 +519,9 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
519 case Opt_alloc_start: 519 case Opt_alloc_start:
520 num = match_strdup(&args[0]); 520 num = match_strdup(&args[0]);
521 if (num) { 521 if (num) {
522 mutex_lock(&info->chunk_mutex);
522 info->alloc_start = memparse(num, NULL); 523 info->alloc_start = memparse(num, NULL);
524 mutex_unlock(&info->chunk_mutex);
523 kfree(num); 525 kfree(num);
524 printk(KERN_INFO 526 printk(KERN_INFO
525 "btrfs: allocations start at %llu\n", 527 "btrfs: allocations start at %llu\n",
@@ -1289,7 +1291,9 @@ restore:
1289 fs_info->mount_opt = old_opts; 1291 fs_info->mount_opt = old_opts;
1290 fs_info->compress_type = old_compress_type; 1292 fs_info->compress_type = old_compress_type;
1291 fs_info->max_inline = old_max_inline; 1293 fs_info->max_inline = old_max_inline;
1294 mutex_lock(&fs_info->chunk_mutex);
1292 fs_info->alloc_start = old_alloc_start; 1295 fs_info->alloc_start = old_alloc_start;
1296 mutex_unlock(&fs_info->chunk_mutex);
1293 btrfs_resize_thread_pool(fs_info, 1297 btrfs_resize_thread_pool(fs_info,
1294 old_thread_pool_size, fs_info->thread_pool_size); 1298 old_thread_pool_size, fs_info->thread_pool_size);
1295 fs_info->metadata_ratio = old_metadata_ratio; 1299 fs_info->metadata_ratio = old_metadata_ratio;