From patchwork Tue Jan 29 06:24:13 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "jeff.liu" X-Patchwork-Id: 2059441 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 1B9663FDD1 for ; Tue, 29 Jan 2013 06:25:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753922Ab3A2GZM (ORCPT ); Tue, 29 Jan 2013 01:25:12 -0500 Received: from aserp1040.oracle.com ([141.146.126.69]:51220 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753772Ab3A2GZJ (ORCPT ); Tue, 29 Jan 2013 01:25:09 -0500 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r0T6OK48024198 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 29 Jan 2013 06:24:21 GMT Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r0T6OKA6001540 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 29 Jan 2013 06:24:20 GMT Received: from abhmt110.oracle.com (abhmt110.oracle.com [141.146.116.62]) by acsmt356.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id r0T6OKx8006561; Tue, 29 Jan 2013 00:24:20 -0600 Received: from [192.168.1.103] (/221.223.96.144) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 28 Jan 2013 22:24:19 -0800 Message-ID: <51076B0D.8090900@oracle.com> Date: Tue, 29 Jan 2013 14:24:13 +0800 From: Jeff Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2 MIME-Version: 1.0 To: linux-btrfs@vger.kernel.org CC: dsterba@suse.cz, Gene Czarcinski Subject: [PATCH 2/2] btrfs-progs: remove btrfslabel.[c|h] X-Source-IP: acsinet21.oracle.com [141.146.126.237] Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Clean btrfslabel.[c|h] out of the source tree and move those related functions to utils.[c|h]. Signed-off-by: Jie Liu CC: David Sterba CC: Gene Czarcinski --- Makefile | 4 +- btrfslabel.c | 178 ----------------------------------------------------- btrfslabel.h | 5 -- cmds-filesystem.c | 1 - utils.c | 129 ++++++++++++++++++++++++++++++++++++++ utils.h | 2 + 6 files changed, 133 insertions(+), 186 deletions(-) delete mode 100644 btrfslabel.c delete mode 100644 btrfslabel.h diff --git a/Makefile b/Makefile index 4894903..e54b21e 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ CFLAGS = -g -O1 objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \ root-tree.o dir-item.o file-item.o inode-item.o \ inode-map.o crc32c.o rbtree.o extent-cache.o extent_io.o \ - volumes.o utils.o btrfs-list.o btrfslabel.o repair.o \ - send-stream.o send-utils.o qgroup.o + volumes.o utils.o btrfs-list.o repair.o send-stream.o \ + send-utils.o qgroup.o cmds_objects = cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o \ cmds-inspect.o cmds-balance.o cmds-send.o cmds-receive.o \ cmds-quota.o cmds-qgroup.o diff --git a/btrfslabel.c b/btrfslabel.c deleted file mode 100644 index 2826050..0000000 --- a/btrfslabel.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * 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 -#include -#include "ioctl.h" -#endif /* __CHECKER__ */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#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 int set_label_unmounted(const char *dev, const char *label) -{ - struct btrfs_trans_handle *trans; - struct btrfs_root *root; - int ret; - - ret = check_mounted(dev); - if (ret < 0) { - fprintf(stderr, "FATAL: error checking %s mount status\n", dev); - return -1; - } - if (ret > 0) { - fprintf(stderr, "ERROR: dev %s is mounted, use mount point\n", - dev); - return -1; - } - - if (strlen(label) > BTRFS_LABEL_SIZE - 1) { - fprintf(stderr, "ERROR: Label %s is too long (max %d)\n", - label, BTRFS_LABEL_SIZE - 1); - return -1; - } - - /* Open the super_block at the default location - * and as read-write. - */ - root = open_ctree(dev, 0, 1); - if (!root) /* errors are printed by open_ctree() */ - return -1; - - trans = btrfs_start_transaction(root, 1); - snprintf(root->fs_info->super_copy.label, BTRFS_LABEL_SIZE, "%s", - label); - btrfs_commit_transaction(trans, root); - - /* Now we close it since we are done. */ - close_ctree(root); - return 0; -} - -static int set_label_mounted(const char *mount_path, const char *label) -{ - int fd; - - fd = open(mount_path, O_RDONLY | O_NOATIME); - if (fd < 0) { - fprintf(stderr, "ERROR: unable access to '%s'\n", mount_path); - return -1; - } - - if (ioctl(fd, BTRFS_IOC_SET_FSLABEL, label) < 0) { - fprintf(stderr, "ERROR: unable to set label %s\n", - strerror(errno)); - close(fd); - return -1; - } - - return 0; -} - -static int get_label_unmounted(const char *dev) -{ - struct btrfs_root *root; - int ret; - - ret = check_mounted(dev); - if (ret < 0) { - fprintf(stderr, "FATAL: error checking %s mount status\n", dev); - return -1; - } - if (ret > 0) { - fprintf(stderr, "ERROR: dev %s is mounted, use mount point\n", - dev); - return -1; - } - - /* Open the super_block at the default location - * and as read-only. - */ - root = open_ctree(dev, 0, 0); - if(!root) - return -1; - - fprintf(stdout, "%s\n", root->fs_info->super_copy.label); - - /* Now we close it since we are done. */ - close_ctree(root); - return 0; -} - -/* - * If a partition is mounted, try to get the filesystem label via its - * mounted path rather than device. Return the corresponding error - * the user specified the device path. - */ -static int get_label_mounted(const char *mount_path) -{ - char label[BTRFS_LABEL_SIZE]; - int fd; - - fd = open(mount_path, O_RDONLY | O_NOATIME); - if (fd < 0) { - fprintf(stderr, "ERROR: unable access to '%s'\n", mount_path); - return -1; - } - - memset(label, '\0', sizeof(label)); - if (ioctl(fd, BTRFS_IOC_GET_FSLABEL, label) < 0) { - fprintf(stderr, "ERROR: unable get label %s\n", strerror(errno)); - close(fd); - return -1; - } - - fprintf(stdout, "%s\n", label); - return 0; -} - -int get_label(const char *btrfs_dev) -{ - return is_existing_blk_or_reg_file(btrfs_dev) ? - get_label_unmounted(btrfs_dev) : - get_label_mounted(btrfs_dev); -} - -int set_label(char *btrfs_dev, char *label) -{ - return is_existing_blk_or_reg_file(btrfs_dev) ? - set_label_unmounted(btrfs_dev, label) : - set_label_mounted(btrfs_dev, label); -} diff --git a/btrfslabel.h b/btrfslabel.h deleted file mode 100644 index abf43ad..0000000 --- a/btrfslabel.h +++ /dev/null @@ -1,5 +0,0 @@ -/* btrflabel.h */ - - -int get_label(char *btrfs_dev); -int set_label(char *btrfs_dev, char *nLabel); \ No newline at end of file diff --git a/cmds-filesystem.c b/cmds-filesystem.c index 5770d8b..3752703 100644 --- a/cmds-filesystem.c +++ b/cmds-filesystem.c @@ -32,7 +32,6 @@ #include "version.h" #include "commands.h" -#include "btrfslabel.h" static const char * const filesystem_cmd_group_usage[] = { "btrfs filesystem [] []", diff --git a/utils.c b/utils.c index 034da8f..d65bc35 100644 --- a/utils.c +++ b/utils.c @@ -16,6 +16,7 @@ * Boston, MA 021110-1307, USA. */ +#define _GNU_SOURCE #define _XOPEN_SOURCE 600 #define __USE_XOPEN2K #include @@ -1144,6 +1145,134 @@ static int check_label(char *input) return 0; } +static int set_label_unmounted(const char *dev, const char *label) +{ + struct btrfs_trans_handle *trans; + struct btrfs_root *root; + int ret; + + ret = check_mounted(dev); + if (ret < 0) { + fprintf(stderr, "FATAL: error checking %s mount status\n", dev); + return -1; + } + if (ret > 0) { + fprintf(stderr, "ERROR: dev %s is mounted, use mount point\n", + dev); + return -1; + } + + /* Open the super_block at the default location + * and as read-write. + */ + root = open_ctree(dev, 0, 1); + if (!root) /* errors are printed by open_ctree() */ + return -1; + + trans = btrfs_start_transaction(root, 1); + snprintf(root->fs_info->super_copy.label, BTRFS_LABEL_SIZE, "%s", + label); + btrfs_commit_transaction(trans, root); + + /* Now we close it since we are done. */ + close_ctree(root); + return 0; +} + +static int set_label_mounted(const char *mount_path, const char *label) +{ + int fd; + + fd = open(mount_path, O_RDONLY | O_NOATIME); + if (fd < 0) { + fprintf(stderr, "ERROR: unable access to '%s'\n", mount_path); + return -1; + } + + if (ioctl(fd, BTRFS_IOC_SET_FSLABEL, label) < 0) { + fprintf(stderr, "ERROR: unable to set label %s\n", + strerror(errno)); + close(fd); + return -1; + } + + return 0; +} + +static int get_label_unmounted(const char *dev) +{ + struct btrfs_root *root; + int ret; + + ret = check_mounted(dev); + if (ret < 0) { + fprintf(stderr, "FATAL: error checking %s mount status\n", dev); + return -1; + } + if (ret > 0) { + fprintf(stderr, "ERROR: dev %s is mounted, use mount point\n", + dev); + return -1; + } + + /* Open the super_block at the default location + * and as read-only. + */ + root = open_ctree(dev, 0, 0); + if(!root) + return -1; + + fprintf(stdout, "%s\n", root->fs_info->super_copy.label); + + /* Now we close it since we are done. */ + close_ctree(root); + return 0; +} + +/* + * If a partition is mounted, try to get the filesystem label via its + * mounted path rather than device. Return the corresponding error + * the user specified the device path. + */ +static int get_label_mounted(const char *mount_path) +{ + char label[BTRFS_LABEL_SIZE]; + int fd; + + fd = open(mount_path, O_RDONLY | O_NOATIME); + if (fd < 0) { + fprintf(stderr, "ERROR: unable access to '%s'\n", mount_path); + return -1; + } + + memset(label, '\0', sizeof(label)); + if (ioctl(fd, BTRFS_IOC_GET_FSLABEL, label) < 0) { + fprintf(stderr, "ERROR: unable get label %s\n", strerror(errno)); + close(fd); + return -1; + } + + fprintf(stdout, "%s\n", label); + return 0; +} + +int get_label(const char *btrfs_dev) +{ + return is_existing_blk_or_reg_file(btrfs_dev) ? + get_label_unmounted(btrfs_dev) : + get_label_mounted(btrfs_dev); +} + +int set_label(const char *btrfs_dev, const char *label) +{ + if (check_label(label)) + return -1; + + return is_existing_blk_or_reg_file(btrfs_dev) ? + set_label_unmounted(btrfs_dev, label) : + set_label_mounted(btrfs_dev, label); +} + int btrfs_scan_block_devices(int run_ioctl) { diff --git a/utils.h b/utils.h index a0b782b..632b01c 100644 --- a/utils.h +++ b/utils.h @@ -46,4 +46,6 @@ int get_mountpt(char *dev, char *mntpt, size_t size); int btrfs_scan_block_devices(int run_ioctl); int is_existing_blk_or_reg_file(const char* filename); +int get_label(const char *btrfs_dev); +int set_label(const char *btrfs_dev, const char *label); #endif