24434a14bd
Sync to a long-awaited upstream release. Version update. Only a handful of local packages that will be upstreamed later. This set of changes is not suitable for direct copy to currently released products because there are changes in mkfs defaults (12.x, 13.x, SLES). Fine for Factory. (forwarded request 208357 from dsterba) OBS-URL: https://build.opensuse.org/request/show/208360 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/btrfsprogs?expand=0&rev=36
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;
|