Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
btrfsprogs.356
0068-btrfs-progs-convert-set-label-or-copy-from...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0068-btrfs-progs-convert-set-label-or-copy-from-origin.patch of Package btrfsprogs.356
From 56a7ff5775c7843afd27771d61fdf37b1de169eb Mon Sep 17 00:00:00 2001 From: David Sterba <dsterba@suse.cz> Date: Tue, 31 Jan 2012 14:40:22 +0100 Subject: [PATCH 068/303] btrfs-progs: convert: set label or copy from origin Signed-off-by: David Sterba <dsterba@suse.cz> --- Documentation/btrfs-convert.txt | 4 ++++ btrfs-convert.c | 47 +++++++++++++++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/Documentation/btrfs-convert.txt b/Documentation/btrfs-convert.txt index 11d60444ec90..555fb35520c9 100644 --- a/Documentation/btrfs-convert.txt +++ b/Documentation/btrfs-convert.txt @@ -25,6 +25,10 @@ Ignore xattrs and ACLs. Disable packing of small files. -r:: Roll back to ext2fs. +-l <LABEL>:: +set filesystem label during conversion. +-L:: +use label from the converted filesystem. EXIT STATUS ----------- diff --git a/btrfs-convert.c b/btrfs-convert.c index 2977533ac0e8..a544fc64892f 100644 --- a/btrfs-convert.c +++ b/btrfs-convert.c @@ -2196,8 +2196,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; @@ -2291,6 +2291,17 @@ static int do_convert(const char *devname, int datacsum, int packing, 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) { @@ -2685,11 +2696,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[]) @@ -2699,10 +2712,13 @@ int main(int argc, char *argv[]) int noxattr = 0; int datacsum = 1; int rollback = 0; + int copylabel = 0; int usage_error = 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) { @@ -2718,6 +2734,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; @@ -2755,7 +2784,7 @@ int main(int argc, char *argv[]) if (rollback) { ret = do_rollback(file); } else { - ret = do_convert(file, datacsum, packing, noxattr); + ret = do_convert(file, datacsum, packing, noxattr, copylabel, fslabel); } if (ret) return 1; -- 2.1.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor