summaryrefslogtreecommitdiff
path: root/disk-io.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-04-22 14:06:56 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2008-04-22 14:06:56 -0400
commit8bfbb6b6f83975d85cf2f2018d9c08d0e6cfb500 (patch)
treefc2d28d6a05cba2f92e303f98e9fca122b26cf3b /disk-io.c
parent358564890ac230ccc8af2661268a6bcb0d6ea18f (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.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/disk-io.c b/disk-io.c
index dc82a96c..23c9aa89 100644
--- a/disk-io.c
+++ b/disk-io.c
@@ -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)