106 lines
3.3 KiB
Diff
106 lines
3.3 KiB
Diff
|
From f160d979c4f8d46a9d0a52394240d51b78237d89 Mon Sep 17 00:00:00 2001
|
||
|
From: David Sterba <dsterba@suse.cz>
|
||
|
Date: Tue, 31 Jan 2012 14:40:22 +0100
|
||
|
Subject: [PATCH 164/170] btrfs-progs: convert: set label or copy from origin
|
||
|
|
||
|
Signed-off-by: David Sterba <dsterba@suse.cz>
|
||
|
---
|
||
|
btrfs-convert.c | 47 ++++++++++++++++++++++++++++++++++++++---------
|
||
|
1 file changed, 38 insertions(+), 9 deletions(-)
|
||
|
|
||
|
Index: btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-convert.c
|
||
|
===================================================================
|
||
|
--- btrfs-progs-v0.20-rc1-598-g8116550e1662.orig/btrfs-convert.c
|
||
|
+++ btrfs-progs-v0.20-rc1-598-g8116550e1662/btrfs-convert.c
|
||
|
@@ -2199,8 +2199,8 @@ err:
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
-static int do_convert(const char *devname, int datacsum, int packing,
|
||
|
- int noxattr)
|
||
|
+static int do_convert(const char *devname, int datacsum, int packing, int noxattr,
|
||
|
+ int copylabel, const char *fslabel)
|
||
|
{
|
||
|
int i, ret;
|
||
|
int fd = -1;
|
||
|
@@ -2294,6 +2294,17 @@ static int do_convert(const char *devnam
|
||
|
fprintf(stderr, "error during create_ext2_image %d\n", ret);
|
||
|
goto fail;
|
||
|
}
|
||
|
+ memset(root->fs_info->super_copy->label, 0, BTRFS_LABEL_SIZE);
|
||
|
+ if (copylabel == 1) {
|
||
|
+ strncpy(root->fs_info->super_copy->label,
|
||
|
+ ext2_fs->super->s_volume_name, 16);
|
||
|
+ fprintf(stderr, "copy label '%s'\n",
|
||
|
+ root->fs_info->super_copy->label);
|
||
|
+ } else if (copylabel == -1) {
|
||
|
+ strncpy(root->fs_info->super_copy->label, fslabel, BTRFS_LABEL_SIZE);
|
||
|
+ fprintf(stderr, "set label to '%s'\n", fslabel);
|
||
|
+ }
|
||
|
+
|
||
|
printf("cleaning up system chunk.\n");
|
||
|
ret = cleanup_sys_chunk(root, ext2_root);
|
||
|
if (ret) {
|
||
|
@@ -2688,11 +2699,13 @@ fail:
|
||
|
|
||
|
static void print_usage(void)
|
||
|
{
|
||
|
- printf("usage: btrfs-convert [-d] [-i] [-n] [-r] device\n");
|
||
|
- printf("\t-d disable data checksum\n");
|
||
|
- printf("\t-i ignore xattrs and ACLs\n");
|
||
|
- printf("\t-n disable packing of small files\n");
|
||
|
- printf("\t-r roll back to ext2fs\n");
|
||
|
+ printf("usage: btrfs-convert [-d] [-i] [-n] [-r] [-l label] [-L] device\n");
|
||
|
+ printf("\t-d disable data checksum\n");
|
||
|
+ printf("\t-i ignore xattrs and ACLs\n");
|
||
|
+ printf("\t-n disable packing of small files\n");
|
||
|
+ printf("\t-r roll back to ext2fs\n");
|
||
|
+ printf("\t-l LABEL set filesystem label\n");
|
||
|
+ printf("\t-L use label from converted fs\n");
|
||
|
}
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
@@ -2702,9 +2715,12 @@ int main(int argc, char *argv[])
|
||
|
int noxattr = 0;
|
||
|
int datacsum = 1;
|
||
|
int rollback = 0;
|
||
|
+ int copylabel = 0;
|
||
|
char *file;
|
||
|
+ char *fslabel = NULL;
|
||
|
+
|
||
|
while(1) {
|
||
|
- int c = getopt(argc, argv, "dinr");
|
||
|
+ int c = getopt(argc, argv, "dinrl:L");
|
||
|
if (c < 0)
|
||
|
break;
|
||
|
switch(c) {
|
||
|
@@ -2720,6 +2736,19 @@ int main(int argc, char *argv[])
|
||
|
case 'r':
|
||
|
rollback = 1;
|
||
|
break;
|
||
|
+ case 'l':
|
||
|
+ copylabel = -1;
|
||
|
+ fslabel = strdup(optarg);
|
||
|
+ if (strlen(fslabel) > BTRFS_LABEL_SIZE) {
|
||
|
+ fprintf(stderr,
|
||
|
+ "warning: label too long, trimmed to %d bytes\n",
|
||
|
+ BTRFS_LABEL_SIZE);
|
||
|
+ fslabel[BTRFS_LABEL_SIZE]=0;
|
||
|
+ }
|
||
|
+ break;
|
||
|
+ case 'L':
|
||
|
+ copylabel = 1;
|
||
|
+ break;
|
||
|
default:
|
||
|
print_usage();
|
||
|
return 1;
|
||
|
@@ -2740,7 +2769,7 @@ int main(int argc, char *argv[])
|
||
|
if (rollback) {
|
||
|
ret = do_rollback(file, 0);
|
||
|
} else {
|
||
|
- ret = do_convert(file, datacsum, packing, noxattr);
|
||
|
+ ret = do_convert(file, datacsum, packing, noxattr, copylabel, fslabel);
|
||
|
}
|
||
|
if (ret)
|
||
|
return 1;
|