From patchwork Wed Mar 30 16:53:11 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Schmidt X-Patchwork-Id: 674771 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p2UGrMnm024879 for ; Wed, 30 Mar 2011 16:53:23 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932577Ab1C3QxR (ORCPT ); Wed, 30 Mar 2011 12:53:17 -0400 Received: from mort.rzone.de ([81.169.144.234]:22698 "EHLO mort.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756086Ab1C3QxP (ORCPT ); Wed, 30 Mar 2011 12:53:15 -0400 Received: from gargravarr.store (gargravarr.store [192.168.42.236]) by mort.rzone.de (Postfix) with ESMTP id 838D06C0; Wed, 30 Mar 2011 18:53:13 +0200 (MEST) Received: by gargravarr.store (Postfix, from userid 32566) id 7BED244B95; Wed, 30 Mar 2011 18:53:13 +0200 (CEST) From: Jan Schmidt To: chris.mason@oracle.com, linux-btrfs@vger.kernel.org Subject: [PATCH v2 3/5] added check_mounted_where Date: Wed, 30 Mar 2011 18:53:11 +0200 Message-Id: <487f14a23fc63dce0aec24c7830d709357da4498.1301503683.git.list.btrfs@jan-o-sch.net> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: References: In-Reply-To: References: Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 30 Mar 2011 16:53:23 +0000 (UTC) diff --git a/utils.c b/utils.c index fd894f3..bea36ce 100644 --- a/utils.c +++ b/utils.c @@ -749,13 +749,8 @@ int blk_file_in_dev_list(struct btrfs_fs_devices* fs_devices, const char* file) */ int check_mounted(const char* file) { - int ret; int fd; - u64 total_devs = 1; - int is_btrfs; - struct btrfs_fs_devices* fs_devices_mnt = NULL; - FILE *f; - struct mntent *mnt; + int ret; fd = open(file, O_RDONLY); if (fd < 0) { @@ -763,11 +758,26 @@ int check_mounted(const char* file) return -errno; } + ret = check_mounted_where(fd, file, NULL, 0, NULL); + close(fd); + + return ret; +} + +int check_mounted_where(int fd, const char* file, char *where, int size, + struct btrfs_fs_devices **fs_dev_ret) +{ + int ret; + u64 total_devs = 1; + int is_btrfs; + struct btrfs_fs_devices* fs_devices_mnt = NULL; + FILE *f; + struct mntent *mnt; + /* scan the initial device */ ret = btrfs_scan_one_device(fd, file, &fs_devices_mnt, &total_devs, BTRFS_SUPER_INFO_OFFSET); is_btrfs = (ret >= 0); - close(fd); /* scan other devices */ if (is_btrfs && total_devs > 1) { @@ -803,6 +813,11 @@ int check_mounted(const char* file) } /* Did we find an entry in mnt table? */ + if (mnt && size && where) + strncpy(where, mnt->mnt_dir, size); + if (fs_dev_ret) + *fs_dev_ret = fs_devices_mnt; + ret = (mnt != NULL); out_mntloop_err: diff --git a/utils.h b/utils.h index 9dce5b0..d2c9626 100644 --- a/utils.h +++ b/utils.h @@ -37,6 +37,8 @@ int btrfs_scan_for_fsid(struct btrfs_fs_devices *fs_devices, u64 total_devs, void btrfs_register_one_device(char *fname); int btrfs_scan_one_dir(char *dirname, int run_ioctl); int check_mounted(const char *devicename); +int check_mounted_where(int fd, const char* file, char *where, int size, + struct btrfs_fs_devices **fs_devices_mnt); int btrfs_device_already_in_root(struct btrfs_root *root, int fd, int super_offset); char *pretty_sizes(u64 size);