diff options
author | Chris Mason <chris.mason@fusionio.com> | 2012-07-25 19:17:39 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2012-07-25 19:19:10 -0400 |
commit | 113c1cb530e10bcada93d88ffaa6b521aae2d251 (patch) | |
tree | e41776281314eb8fdc6b07e1533491e5f9ec21af /fs/btrfs/transaction.c | |
parent | cd1cfc49153ba2bef247e500d8bd4d135193ece9 (diff) | |
parent | 31db9f7c23fbf7e95026143f79645de6507b583b (diff) |
Merge branch 'send-v2' of git://github.com/ablock84/linux-btrfs into for-linus
This is the kernel portion of btrfs send/receive
Conflicts:
fs/btrfs/Makefile
fs/btrfs/backref.h
fs/btrfs/ctree.c
fs/btrfs/ioctl.c
fs/btrfs/ioctl.h
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs/btrfs/transaction.c')
-rw-r--r-- | fs/btrfs/transaction.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index cc20e95ea28..7ac7cdcc294 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/writeback.h> | 22 | #include <linux/writeback.h> |
23 | #include <linux/pagemap.h> | 23 | #include <linux/pagemap.h> |
24 | #include <linux/blkdev.h> | 24 | #include <linux/blkdev.h> |
25 | #include <linux/uuid.h> | ||
25 | #include "ctree.h" | 26 | #include "ctree.h" |
26 | #include "disk-io.h" | 27 | #include "disk-io.h" |
27 | #include "transaction.h" | 28 | #include "transaction.h" |
@@ -953,11 +954,13 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, | |||
953 | struct dentry *dentry; | 954 | struct dentry *dentry; |
954 | struct extent_buffer *tmp; | 955 | struct extent_buffer *tmp; |
955 | struct extent_buffer *old; | 956 | struct extent_buffer *old; |
957 | struct timespec cur_time = CURRENT_TIME; | ||
956 | int ret; | 958 | int ret; |
957 | u64 to_reserve = 0; | 959 | u64 to_reserve = 0; |
958 | u64 index = 0; | 960 | u64 index = 0; |
959 | u64 objectid; | 961 | u64 objectid; |
960 | u64 root_flags; | 962 | u64 root_flags; |
963 | uuid_le new_uuid; | ||
961 | 964 | ||
962 | rsv = trans->block_rsv; | 965 | rsv = trans->block_rsv; |
963 | 966 | ||
@@ -1051,6 +1054,20 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, | |||
1051 | root_flags &= ~BTRFS_ROOT_SUBVOL_RDONLY; | 1054 | root_flags &= ~BTRFS_ROOT_SUBVOL_RDONLY; |
1052 | btrfs_set_root_flags(new_root_item, root_flags); | 1055 | btrfs_set_root_flags(new_root_item, root_flags); |
1053 | 1056 | ||
1057 | btrfs_set_root_generation_v2(new_root_item, | ||
1058 | trans->transid); | ||
1059 | uuid_le_gen(&new_uuid); | ||
1060 | memcpy(new_root_item->uuid, new_uuid.b, BTRFS_UUID_SIZE); | ||
1061 | memcpy(new_root_item->parent_uuid, root->root_item.uuid, | ||
1062 | BTRFS_UUID_SIZE); | ||
1063 | new_root_item->otime.sec = cpu_to_le64(cur_time.tv_sec); | ||
1064 | new_root_item->otime.nsec = cpu_to_le64(cur_time.tv_nsec); | ||
1065 | btrfs_set_root_otransid(new_root_item, trans->transid); | ||
1066 | memset(&new_root_item->stime, 0, sizeof(new_root_item->stime)); | ||
1067 | memset(&new_root_item->rtime, 0, sizeof(new_root_item->rtime)); | ||
1068 | btrfs_set_root_stransid(new_root_item, 0); | ||
1069 | btrfs_set_root_rtransid(new_root_item, 0); | ||
1070 | |||
1054 | old = btrfs_lock_root_node(root); | 1071 | old = btrfs_lock_root_node(root); |
1055 | ret = btrfs_cow_block(trans, root, old, NULL, 0, &old); | 1072 | ret = btrfs_cow_block(trans, root, old, NULL, 0, &old); |
1056 | if (ret) { | 1073 | if (ret) { |