aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Behrens <sbehrens@giantdisaster.de>2013-08-15 11:11:22 -0400
committerChris Mason <chris.mason@fusionio.com>2013-09-01 08:15:57 -0400
commit26432799c902b76e87f68f5c88f2146a78ba84af (patch)
tree42f9421a2bb76eada9778ef81d50e3f52656378b
parent803b2f54fb4faf6d76fca43e59bcc555d9713cd4 (diff)
Btrfs: introduce uuid-tree-gen field
In order to be able to detect the case that a filesystem is mounted with an old kernel, add a uuid-tree-gen field like the free space cache is doing it. It is part of the super block and written with each commit. Old kernels do not know this field and don't update it. Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r--fs/btrfs/ctree.h5
-rw-r--r--fs/btrfs/transaction.c1
2 files changed, 5 insertions, 1 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index df2b9c22b4cf..02b1cefbc308 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -482,9 +482,10 @@ struct btrfs_super_block {
482 char label[BTRFS_LABEL_SIZE]; 482 char label[BTRFS_LABEL_SIZE];
483 483
484 __le64 cache_generation; 484 __le64 cache_generation;
485 __le64 uuid_tree_generation;
485 486
486 /* future expansion */ 487 /* future expansion */
487 __le64 reserved[31]; 488 __le64 reserved[30];
488 u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE]; 489 u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
489 struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS]; 490 struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
490} __attribute__ ((__packed__)); 491} __attribute__ ((__packed__));
@@ -2900,6 +2901,8 @@ BTRFS_SETGET_STACK_FUNCS(super_csum_type, struct btrfs_super_block,
2900BTRFS_SETGET_STACK_FUNCS(super_cache_generation, struct btrfs_super_block, 2901BTRFS_SETGET_STACK_FUNCS(super_cache_generation, struct btrfs_super_block,
2901 cache_generation, 64); 2902 cache_generation, 64);
2902BTRFS_SETGET_STACK_FUNCS(super_magic, struct btrfs_super_block, magic, 64); 2903BTRFS_SETGET_STACK_FUNCS(super_magic, struct btrfs_super_block, magic, 64);
2904BTRFS_SETGET_STACK_FUNCS(super_uuid_tree_generation, struct btrfs_super_block,
2905 uuid_tree_generation, 64);
2903 2906
2904static inline int btrfs_super_csum_size(struct btrfs_super_block *s) 2907static inline int btrfs_super_csum_size(struct btrfs_super_block *s)
2905{ 2908{
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index 72ab0dd31937..e76237c8802a 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -1380,6 +1380,7 @@ static void update_super_roots(struct btrfs_root *root)
1380 super->root_level = root_item->level; 1380 super->root_level = root_item->level;
1381 if (btrfs_test_opt(root, SPACE_CACHE)) 1381 if (btrfs_test_opt(root, SPACE_CACHE))
1382 super->cache_generation = root_item->generation; 1382 super->cache_generation = root_item->generation;
1383 super->uuid_tree_generation = root_item->generation;
1383} 1384}
1384 1385
1385int btrfs_transaction_in_commit(struct btrfs_fs_info *info) 1386int btrfs_transaction_in_commit(struct btrfs_fs_info *info)