Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add the "btrfs filesystem label" command
Hi all, this patch adds the command "btrfs filesystem label" to change (or show) the label of a filesystem. This patch is a subset of the one written previously by Morey Roof. I included the user space part only. So it is possible only to change/show a label of a *single device* and *unounted* filesystem. The reason of excluding the kernel space part, is to simplify the patch in order to speed the check and then the merging of the patch itself. In fact I have to point out that in the past there was almost three attempts to propose this patch, without success neither complaints. Chris, let me know how you want to proceed. I know that you are very busy, and you prefer to work to stabilize btrfs instead adding new feature. But I think that changing a label is a *essential* feature for a filesystem managing tool. Think about a mount by LABEL. To show a label $ btrfs filesystem label <device> To set a label $ btrfs filesystem label <device> <newlabel> Please guys, give a look to the source. Comments are welcome. You can pull the source from the branch "label" of the repository http://cassiopea.homelinux.net/git/btrfs-progs-unstable.git Regards G.Baroncelli Signed-off-by: Chris Mason <chris.mason@oracle.com>
- Loading branch information
1 parent
002d021
commit e8f47cf
Showing
9 changed files
with
222 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
/* | ||
* Copyright (C) 2008 Morey Roof. All rights reserved. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public | ||
* License v2 as published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public | ||
* License along with this program; if not, write to the | ||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
* Boston, MA 021110-1307, USA. | ||
*/ | ||
|
||
#define _GNU_SOURCE | ||
|
||
#ifndef __CHECKER__ | ||
#include <sys/ioctl.h> | ||
#include <sys/mount.h> | ||
#include "ioctl.h" | ||
#endif /* __CHECKER__ */ | ||
|
||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <sys/types.h> | ||
#include <sys/stat.h> | ||
#include <dirent.h> | ||
#include <fcntl.h> | ||
#include <unistd.h> | ||
#include <linux/fs.h> | ||
#include <linux/limits.h> | ||
#include <ctype.h> | ||
#include "kerncompat.h" | ||
#include "ctree.h" | ||
#include "utils.h" | ||
#include "version.h" | ||
#include "disk-io.h" | ||
#include "transaction.h" | ||
|
||
#define MOUNTED 1 | ||
#define UNMOUNTED 2 | ||
#define GET_LABEL 3 | ||
#define SET_LABEL 4 | ||
|
||
static void change_label_unmounted(char *dev, char *nLabel) | ||
{ | ||
struct btrfs_root *root; | ||
struct btrfs_trans_handle *trans; | ||
|
||
/* Open the super_block at the default location | ||
* and as read-write. | ||
*/ | ||
root = open_ctree(dev, 0, 1); | ||
|
||
trans = btrfs_start_transaction(root, 1); | ||
strncpy(root->fs_info->super_copy.label, nLabel, BTRFS_LABEL_SIZE); | ||
btrfs_commit_transaction(trans, root); | ||
|
||
/* Now we close it since we are done. */ | ||
close_ctree(root); | ||
} | ||
|
||
static void get_label_unmounted(char *dev) | ||
{ | ||
struct btrfs_root *root; | ||
|
||
/* Open the super_block at the default location | ||
* and as read-only. | ||
*/ | ||
root = open_ctree(dev, 0, 0); | ||
|
||
fprintf(stdout, "%s\n", root->fs_info->super_copy.label); | ||
|
||
/* Now we close it since we are done. */ | ||
close_ctree(root); | ||
} | ||
|
||
int get_label(char *btrfs_dev) | ||
{ | ||
|
||
int ret; | ||
ret = check_mounted(btrfs_dev); | ||
if (ret < 0) | ||
{ | ||
fprintf(stderr, "FATAL: error checking %s mount status\n", btrfs_dev); | ||
return -1; | ||
} | ||
|
||
if(ret != 0) | ||
{ | ||
fprintf(stderr, "FATAL: the filesystem has to be unmounted\n"); | ||
return -2; | ||
} | ||
get_label_unmounted(btrfs_dev); | ||
return 0; | ||
} | ||
|
||
|
||
int set_label(char *btrfs_dev, char *nLabel) | ||
{ | ||
|
||
int ret; | ||
ret = check_mounted(btrfs_dev); | ||
if (ret < 0) | ||
{ | ||
fprintf(stderr, "FATAL: error checking %s mount status\n", btrfs_dev); | ||
return -1; | ||
} | ||
|
||
if(ret != 0) | ||
{ | ||
fprintf(stderr, "FATAL: the filesystem has to be unmounted\n"); | ||
return -2; | ||
} | ||
change_label_unmounted(btrfs_dev, nLabel); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
/* btrflabel.h */ | ||
|
||
|
||
int get_label(char *btrfs_dev); | ||
int set_label(char *btrfs_dev, char *nLabel); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters