summaryrefslogtreecommitdiff
path: root/convert/main.c
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2017-01-30 17:52:15 +0100
committerDavid Sterba <dsterba@suse.com>2017-03-08 13:00:46 +0100
commit0c362b9031e5c0441f40ef3535572505d52006f2 (patch)
treec16d28c42ed5fcbc296bc754c7c318d1bf010518 /convert/main.c
parentc45a060f3e2d7a46935f92397bf561cd56d3127f (diff)
btrfs-progs: convert: use bit field for convert flags
Use one flag field instead of several variables. The change cascades down to the callchain and modifies several functions. Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'convert/main.c')
-rw-r--r--convert/main.c65
1 files changed, 35 insertions, 30 deletions
diff --git a/convert/main.c b/convert/main.c
index b2b24ae4..f5c560c4 100644
--- a/convert/main.c
+++ b/convert/main.c
@@ -74,11 +74,10 @@ static int after_copied_inodes(void *p)
}
static inline int copy_inodes(struct btrfs_convert_context *cctx,
- struct btrfs_root *root, int datacsum,
- int packing, int noxattr, struct task_ctx *p)
+ struct btrfs_root *root, u32 convert_flags,
+ struct task_ctx *p)
{
- return cctx->convert_ops->copy_inodes(cctx, root, datacsum, packing,
- noxattr, p);
+ return cctx->convert_ops->copy_inodes(cctx, root, convert_flags, p);
}
static inline void convert_close_fs(struct btrfs_convert_context *cctx)
@@ -125,7 +124,7 @@ static int create_image_file_range(struct btrfs_trans_handle *trans,
struct cache_tree *used,
struct btrfs_inode_item *inode,
u64 ino, u64 bytenr, u64 *ret_len,
- int datacsum)
+ u32 convert_flags)
{
struct cache_extent *cache;
struct btrfs_block_group_cache *bg_cache;
@@ -133,6 +132,7 @@ static int create_image_file_range(struct btrfs_trans_handle *trans,
u64 disk_bytenr;
int i;
int ret;
+ u32 datacsum = convert_flags & CONVERT_FLAG_DATACSUM;
if (bytenr != round_down(bytenr, root->sectorsize)) {
error("bytenr not sectorsize aligned: %llu",
@@ -259,7 +259,8 @@ static int migrate_one_reserved_range(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct cache_tree *used,
struct btrfs_inode_item *inode, int fd,
- u64 ino, u64 start, u64 len, int datacsum)
+ u64 ino, u64 start, u64 len,
+ u32 convert_flags)
{
u64 cur_off = start;
u64 cur_len = len;
@@ -312,7 +313,7 @@ static int migrate_one_reserved_range(struct btrfs_trans_handle *trans,
if (ret < 0)
break;
/* Finally, insert csum items */
- if (datacsum)
+ if (convert_flags & CONVERT_FLAG_DATACSUM)
ret = csum_disk_extent(trans, root, key.objectid,
key.offset);
@@ -346,7 +347,7 @@ static int migrate_reserved_ranges(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct cache_tree *used,
struct btrfs_inode_item *inode, int fd,
- u64 ino, u64 total_bytes, int datacsum)
+ u64 ino, u64 total_bytes, u32 convert_flags)
{
u64 cur_off;
u64 cur_len;
@@ -356,7 +357,7 @@ static int migrate_reserved_ranges(struct btrfs_trans_handle *trans,
cur_off = 0;
cur_len = 1024 * 1024;
ret = migrate_one_reserved_range(trans, root, used, inode, fd, ino,
- cur_off, cur_len, datacsum);
+ cur_off, cur_len, convert_flags);
if (ret < 0)
return ret;
@@ -366,7 +367,7 @@ static int migrate_reserved_ranges(struct btrfs_trans_handle *trans,
if (cur_off > total_bytes)
return ret;
ret = migrate_one_reserved_range(trans, root, used, inode, fd, ino,
- cur_off, cur_len, datacsum);
+ cur_off, cur_len, convert_flags);
if (ret < 0)
return ret;
@@ -376,7 +377,7 @@ static int migrate_reserved_ranges(struct btrfs_trans_handle *trans,
if (cur_off > total_bytes)
return ret;
ret = migrate_one_reserved_range(trans, root, used, inode, fd, ino,
- cur_off, cur_len, datacsum);
+ cur_off, cur_len, convert_flags);
return ret;
}
@@ -670,7 +671,7 @@ static int convert_read_used_space(struct btrfs_convert_context *cctx)
static int create_image(struct btrfs_root *root,
struct btrfs_mkfs_config *cfg,
struct btrfs_convert_context *cctx, int fd,
- u64 size, char *name, int datacsum)
+ u64 size, char *name, u32 convert_flags)
{
struct btrfs_inode_item buf;
struct btrfs_trans_handle *trans;
@@ -683,7 +684,7 @@ static int create_image(struct btrfs_root *root,
u64 flags = BTRFS_INODE_READONLY;
int ret;
- if (!datacsum)
+ if (!(convert_flags & CONVERT_FLAG_DATACSUM))
flags |= BTRFS_INODE_NODATASUM;
trans = btrfs_start_transaction(root, 1);
@@ -745,15 +746,15 @@ static int create_image(struct btrfs_root *root,
u64 len = size - cur;
ret = create_image_file_range(trans, root, &used_tmp,
- &buf, ino, cur, &len, datacsum);
+ &buf, ino, cur, &len,
+ convert_flags);
if (ret < 0)
goto out;
cur += len;
}
/* Handle the reserved ranges */
ret = migrate_reserved_ranges(trans, root, &cctx->used, &buf, fd, ino,
- cfg->num_bytes, datacsum);
-
+ cfg->num_bytes, convert_flags);
key.objectid = ino;
key.type = BTRFS_INODE_ITEM_KEY;
@@ -997,8 +998,7 @@ static int make_convert_data_block_groups(struct btrfs_trans_handle *trans,
* But the convert image subvolume is *NOT* linked to fs tree yet.
*/
static int init_btrfs(struct btrfs_mkfs_config *cfg, struct btrfs_root *root,
- struct btrfs_convert_context *cctx, int datacsum,
- int packing, int noxattr)
+ struct btrfs_convert_context *cctx, u32 convert_flags)
{
struct btrfs_key location;
struct btrfs_trans_handle *trans;
@@ -1166,9 +1166,8 @@ static int convert_open_fs(const char *devname,
return -1;
}
-static int do_convert(const char *devname, int datacsum, int packing,
- int noxattr, u32 nodesize, int copylabel, const char *fslabel,
- int progress, u64 features)
+static int do_convert(const char *devname, u32 convert_flags, u32 nodesize,
+ const char *fslabel, int progress, u64 features)
{
int ret;
int fd = -1;
@@ -1239,7 +1238,7 @@ static int do_convert(const char *devname, int datacsum, int packing,
error("unable to open ctree");
goto fail;
}
- ret = init_btrfs(&mkfs_cfg, root, &cctx, datacsum, packing, noxattr);
+ ret = init_btrfs(&mkfs_cfg, root, &cctx, convert_flags);
if (ret) {
error("unable to setup the root tree: %d", ret);
goto fail;
@@ -1257,7 +1256,8 @@ static int do_convert(const char *devname, int datacsum, int packing,
goto fail;
}
ret = create_image(image_root, &mkfs_cfg, &cctx, fd,
- mkfs_cfg.num_bytes, "image", datacsum);
+ mkfs_cfg.num_bytes, "image",
+ convert_flags);
if (ret) {
error("failed to create %s/image: %d", subvol_name, ret);
goto fail;
@@ -1272,7 +1272,7 @@ static int do_convert(const char *devname, int datacsum, int packing,
&ctx);
task_start(ctx.info);
}
- ret = copy_inodes(&cctx, root, datacsum, packing, noxattr, &ctx);
+ ret = copy_inodes(&cctx, root, convert_flags, &ctx);
if (ret) {
error("error during copy_inodes %d", ret);
goto fail;
@@ -1289,11 +1289,11 @@ static int do_convert(const char *devname, int datacsum, int packing,
}
memset(root->fs_info->super_copy->label, 0, BTRFS_LABEL_SIZE);
- if (copylabel == 1) {
+ if (convert_flags & CONVERT_FLAG_COPY_LABEL) {
__strncpy_null(root->fs_info->super_copy->label,
cctx.volume_name, BTRFS_LABEL_SIZE - 1);
printf("copy label '%s'\n", root->fs_info->super_copy->label);
- } else if (copylabel == -1) {
+ } else if (convert_flags & CONVERT_FLAG_SET_LABEL) {
strcpy(root->fs_info->super_copy->label, fslabel);
printf("set label to '%s'\n", fslabel);
}
@@ -1886,7 +1886,7 @@ int main(int argc, char *argv[])
rollback = 1;
break;
case 'l':
- copylabel = -1;
+ copylabel = CONVERT_FLAG_SET_LABEL;
if (strlen(optarg) >= BTRFS_LABEL_SIZE) {
warning(
"label too long, trimmed to %d bytes",
@@ -1895,7 +1895,7 @@ int main(int argc, char *argv[])
__strncpy_null(fslabel, optarg, BTRFS_LABEL_SIZE - 1);
break;
case 'L':
- copylabel = 1;
+ copylabel = CONVERT_FLAG_COPY_LABEL;
break;
case 'p':
progress = 1;
@@ -1968,8 +1968,13 @@ int main(int argc, char *argv[])
if (rollback) {
ret = do_rollback(file);
} else {
- ret = do_convert(file, datacsum, packing, noxattr, nodesize,
- copylabel, fslabel, progress, features);
+ u32 cf = 0;
+
+ cf |= datacsum ? CONVERT_FLAG_DATACSUM : 0;
+ cf |= packing ? CONVERT_FLAG_INLINE_DATA : 0;
+ cf |= noxattr ? 0 : CONVERT_FLAG_XATTR;
+ cf |= copylabel;
+ ret = do_convert(file, cf, nodesize, fslabel, progress, features);
}
if (ret)
return 1;