aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.c
diff options
context:
space:
mode:
authorJan Schmidt <list.btrfs@jan-o-sch.net>2012-05-31 08:59:09 -0400
committerJan Schmidt <list.btrfs@jan-o-sch.net>2012-05-31 13:56:18 -0400
commite9b7fd4d8b7c915cff353ca085b83bd19737396b (patch)
tree44cb78d1d1a5d677b0c01fd082554150a2f0ce20 /fs/btrfs/ctree.c
parent926dd8a640da1bbf7478eebea1c23a842fc9c890 (diff)
Btrfs: add tree_mod_dont_log helper
Replace duplicate code by small inline helper function. Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r--fs/btrfs/ctree.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index 26e8dc1681b0..c7c48489b963 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -455,14 +455,25 @@ unlock:
455 return ret; 455 return ret;
456} 456}
457 457
458static inline int tree_mod_dont_log(struct btrfs_fs_info *fs_info,
459 struct extent_buffer *eb) {
460 smp_mb();
461 if (list_empty(&(fs_info)->tree_mod_seq_list))
462 return 1;
463 if (!eb)
464 return 0;
465 if (btrfs_header_level(eb) == 0)
466 return 1;
467 return 0;
468}
469
458static inline int tree_mod_alloc(struct btrfs_fs_info *fs_info, gfp_t flags, 470static inline int tree_mod_alloc(struct btrfs_fs_info *fs_info, gfp_t flags,
459 struct tree_mod_elem **tm_ret) 471 struct tree_mod_elem **tm_ret)
460{ 472{
461 struct tree_mod_elem *tm; 473 struct tree_mod_elem *tm;
462 int seq; 474 int seq;
463 475
464 smp_mb(); 476 if (tree_mod_dont_log(fs_info, NULL))
465 if (list_empty(&fs_info->tree_mod_seq_list))
466 return 0; 477 return 0;
467 478
468 tm = *tm_ret = kzalloc(sizeof(*tm), flags); 479 tm = *tm_ret = kzalloc(sizeof(*tm), flags);
@@ -643,8 +654,7 @@ tree_mod_log_eb_copy(struct btrfs_fs_info *fs_info, struct extent_buffer *dst,
643 int ret; 654 int ret;
644 int i; 655 int i;
645 656
646 smp_mb(); 657 if (tree_mod_dont_log(fs_info, NULL))
647 if (list_empty(&fs_info->tree_mod_seq_list))
648 return; 658 return;
649 659
650 if (btrfs_header_level(dst) == 0 && btrfs_header_level(src) == 0) 660 if (btrfs_header_level(dst) == 0 && btrfs_header_level(src) == 0)
@@ -691,11 +701,7 @@ static void tree_mod_log_free_eb(struct btrfs_fs_info *fs_info,
691 int ret; 701 int ret;
692 u32 nritems; 702 u32 nritems;
693 703
694 smp_mb(); 704 if (tree_mod_dont_log(fs_info, eb))
695 if (list_empty(&fs_info->tree_mod_seq_list))
696 return;
697
698 if (btrfs_header_level(eb) == 0)
699 return; 705 return;
700 706
701 nritems = btrfs_header_nritems(eb); 707 nritems = btrfs_header_nritems(eb);