btrfs-progs: Introduce change_device_uuid function
authorQu Wenruo <quwenruo@cn.fujitsu.com>
Mon, 11 May 2015 08:08:49 +0000 (16:08 +0800)
committerDavid Sterba <dsterba@suse.cz>
Thu, 14 May 2015 13:41:07 +0000 (15:41 +0200)
This function changes a device items uuid.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
btrfstune.c

index b890011..4ccd6d4 100644 (file)
@@ -198,6 +198,27 @@ out:
        return ret;
 }
 
+static int change_device_uuid(struct btrfs_root *root, struct extent_buffer *eb,
+                             int slot)
+{
+       struct btrfs_fs_info *fs_info = root->fs_info;
+       struct btrfs_dev_item *di;
+       int ret = 0;
+
+       di = btrfs_item_ptr(eb, slot, struct btrfs_dev_item);
+       if (fs_info->new_fsid) {
+               if (!memcmp_extent_buffer(eb, fs_info->new_fsid,
+                                         (unsigned long)btrfs_device_fsid(di),
+                                         BTRFS_FSID_SIZE))
+                       return ret;
+               write_extent_buffer(eb, fs_info->new_fsid,
+                                   (unsigned long)btrfs_device_fsid(di),
+                                   BTRFS_FSID_SIZE);
+               ret = write_tree_block(NULL, root, eb);
+       }
+       return ret;
+}
+
 static void print_usage(void)
 {
        fprintf(stderr, "usage: btrfstune [options] device\n");