diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-04-22 14:06:56 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@hera.kernel.org> | 2008-04-22 14:06:56 -0400 |
commit | 8bfbb6b6f83975d85cf2f2018d9c08d0e6cfb500 (patch) | |
tree | fc2d28d6a05cba2f92e303f98e9fca122b26cf3b /disk-io.c | |
parent | 358564890ac230ccc8af2661268a6bcb0d6ea18f (diff) |
Update the Ext3 converter
The main changes in this patch are adding chunk handing and data relocation
ability. In the last step of conversion, the converter relocates data in system
chunk and move chunk tree into system chunk. In the rollback process, the
converter remove chunk tree from system chunk and copy data back.
Regards
YZ
---
Diffstat (limited to 'disk-io.c')
-rw-r--r-- | disk-io.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -457,12 +457,16 @@ insert: struct btrfs_root *open_ctree(const char *filename, u64 sb_bytenr) { int fp; + struct btrfs_root *root; fp = open(filename, O_CREAT | O_RDWR, 0600); if (fp < 0) { return NULL; } - return open_ctree_fd(fp, filename, sb_bytenr); + root = open_ctree_fd(fp, filename, sb_bytenr); + close(fp); + + return root; } struct btrfs_root *open_ctree_fd(int fp, const char *path, u64 sb_bytenr) @@ -500,7 +504,6 @@ struct btrfs_root *open_ctree_fd(int fp, const char *path, u64 sb_bytenr) } memset(fs_info, 0, sizeof(*fs_info)); - fs_info->fp = fs_devices->lowest_bdev; fs_info->fs_root = root; fs_info->tree_root = tree_root; fs_info->extent_root = extent_root; @@ -638,7 +641,7 @@ int write_all_supers(struct btrfs_root *root) (unsigned long)btrfs_device_uuid(dev_item), BTRFS_UUID_SIZE); sb->fd = dev->fd; - sb->dev_bytenr = BTRFS_SUPER_INFO_OFFSET; + sb->dev_bytenr = sb->start; btrfs_set_header_flag(sb, BTRFS_HEADER_FLAG_WRITTEN); csum_tree_block(root, sb, 0); ret = write_extent_to_disk(sb); @@ -683,7 +686,7 @@ static int close_all_devices(struct btrfs_fs_info *fs_info) list = &fs_info->fs_devices->devices; list_for_each(next, list) { device = list_entry(next, struct btrfs_device, dev_list); - // close(device->fd); + close(device->fd); } return 0; } @@ -704,7 +707,6 @@ int close_ctree(struct btrfs_root *root) write_ctree_super(trans, root); btrfs_free_transaction(root, trans); btrfs_free_block_groups(root->fs_info); - close(root->fs_info->fp); if (root->node) free_extent_buffer(root->node); if (root->fs_info->extent_root->node) |