mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH v2 039/113] commands: introduce new findmnt command
Date: Mon,  4 Mar 2024 19:59:24 +0100	[thread overview]
Message-ID: <20240304190038.3486881-40-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20240304190038.3486881-1-a.fatoum@pengutronix.de>

EFI loader support will need to map barebox VFS paths to fs_device and
back. Make development easier by providing a findmnt command to test
the mapping.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 commands/Kconfig   |  15 +++++++
 commands/Makefile  |   1 +
 commands/findmnt.c | 108 +++++++++++++++++++++++++++++++++++++++++++++
 fs/fs.c            |   4 +-
 include/driver.h   |   5 +++
 include/fs.h       |   2 +
 6 files changed, 132 insertions(+), 3 deletions(-)
 create mode 100644 commands/findmnt.c

diff --git a/commands/Kconfig b/commands/Kconfig
index 04bfc85a951d..9df3c67d930d 100644
--- a/commands/Kconfig
+++ b/commands/Kconfig
@@ -655,6 +655,21 @@ config CMD_MOUNT
 		  -o OPTIONS	set file system OPTIONS
 		  -v		verbose
 
+config CMD_FINDMNT
+	tristate
+	prompt "findmnt"
+	help
+	  Find a file system
+
+	  Usage: findmnt [ DEVICE | -T FILE ]
+
+	  findmnt will list all mounted filesystems or search
+	  for a filesystem when given the mountpoint or the
+	  source device as an argument
+
+	  Options:
+		-T		mount target file path
+
 config CMD_PARTED
 	tristate
 	depends on PARTITION
diff --git a/commands/Makefile b/commands/Makefile
index 8fdff75a72a6..19c006101dc6 100644
--- a/commands/Makefile
+++ b/commands/Makefile
@@ -36,6 +36,7 @@ obj-$(CONFIG_CMD_RM)		+= rm.o
 obj-$(CONFIG_CMD_CAT)		+= cat.o
 obj-$(CONFIG_CMD_MOUNT)		+= mount.o
 obj-$(CONFIG_CMD_UMOUNT)	+= umount.o
+obj-$(CONFIG_CMD_FINDMNT)	+= findmnt.o
 obj-$(CONFIG_CMD_REGINFO)	+= reginfo.o
 obj-$(CONFIG_CMD_CRC)		+= crc.o
 obj-$(CONFIG_CMD_CLEAR)		+= clear.o
diff --git a/commands/findmnt.c b/commands/findmnt.c
new file mode 100644
index 000000000000..da8f58835f28
--- /dev/null
+++ b/commands/findmnt.c
@@ -0,0 +1,108 @@
+// SPDX-License-Identifier: GPL-2.0-only
+// SPDX-FileCopyrightText: © 2022 Ahmad Fatoum, Pengutronix
+
+#include <common.h>
+#include <command.h>
+#include <fs.h>
+#include <errno.h>
+#include <getopt.h>
+
+static void print_header(bool *header_printed)
+{
+	if (*header_printed)
+		return;
+	printf("%-20s%-25s%-10s%-20s\n", "TARGET", "SOURCE", "FSTYPE", "OPTIONS");
+	*header_printed = true;
+}
+
+static void report_findmnt(const struct fs_device *fsdev)
+{
+	const char *backingstore;
+
+	backingstore = fsdev->backingstore ?: cdev_name(fsdev->cdev) ?: "none";
+
+	printf("%-20s%-25s%-10s%-20s\n", fsdev->path, backingstore,
+	       fsdev->driver->drv.name, fsdev->options);
+}
+
+static int do_findmnt(int argc, char *argv[])
+{
+	bool header_printed = false;
+	struct fs_device *target = NULL;
+	char *device = NULL;
+	int opt, dirfd = AT_FDCWD;
+
+	while ((opt = getopt(argc, argv, "T:")) > 0) {
+		switch(opt) {
+		case 'T':
+			target = get_fsdevice_by_path(dirfd, optarg);
+			if (!target)
+				return COMMAND_ERROR;
+			break;
+		default:
+			return COMMAND_ERROR_USAGE;
+		}
+	}
+
+	argv += optind;
+	argc -= optind;
+
+	if ((target && argc > 0) || (!target && argc > 1))
+		return COMMAND_ERROR_USAGE;
+
+	if (target) {
+		print_header(&header_printed);
+		report_findmnt(target);
+		return 0;
+	}
+
+	if (argv[0]) {
+		device = canonicalize_path(dirfd, argv[0]);
+		if (!device)
+			return COMMAND_ERROR;
+	}
+
+	for_each_fs_device(target) {
+		if (!device || streq_ptr(target->path, device) ||
+		    streq_ptr(target->backingstore, device)) {
+			print_header(&header_printed);
+			report_findmnt(target);
+		} else {
+			const char *backingstore;
+			struct cdev *cdev;
+
+			cdev = cdev_by_name(devpath_to_name(device));
+			if (!cdev)
+				continue;
+
+			backingstore = target->backingstore;
+			backingstore += str_has_prefix(backingstore, "/dev/");
+
+			if (streq_ptr(backingstore, cdev->name)) {
+				print_header(&header_printed);
+				report_findmnt(target);
+			}
+		}
+	}
+
+	free(device);
+
+	return header_printed ? 0 : COMMAND_ERROR;
+}
+
+BAREBOX_CMD_HELP_START(findmnt)
+BAREBOX_CMD_HELP_TEXT("findmnt will list all mounted filesystems or search")
+BAREBOX_CMD_HELP_TEXT("for a filesystem when given the mountpoint or the")
+BAREBOX_CMD_HELP_TEXT("source device as an argument")
+BAREBOX_CMD_HELP_TEXT("")
+BAREBOX_CMD_HELP_TEXT("Options:")
+BAREBOX_CMD_HELP_OPT ("-T",  "mount target file path")
+BAREBOX_CMD_HELP_END
+
+BAREBOX_CMD_START(findmnt)
+	.cmd		= do_findmnt,
+	BAREBOX_CMD_DESC("find a file system")
+	BAREBOX_CMD_OPTS("[ DEVICE | -T FILE ]")
+	BAREBOX_CMD_GROUP(CMD_GRP_FILE)
+	BAREBOX_CMD_HELP(cmd_findmnt_help)
+BAREBOX_CMD_END
diff --git a/fs/fs.c b/fs/fs.c
index 9b876fe1f9be..0ff7f1b6f947 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -130,8 +130,6 @@ void cdev_print(const struct cdev *cdev)
 }
 EXPORT_SYMBOL(cdev_print);
 
-static struct fs_device *get_fsdevice_by_path(int dirfd, const char *path);
-
 void stat_print(const char *filename, const struct stat *st)
 {
 	int dirfd = AT_FDCWD;
@@ -2383,7 +2381,7 @@ static int filename_lookup(int dirfd, struct filename *name, unsigned flags,
 	return err;
 }
 
-static struct fs_device *get_fsdevice_by_path(int dirfd, const char *pathname)
+struct fs_device *get_fsdevice_by_path(int dirfd, const char *pathname)
 {
 	struct fs_device *fsdev;
 	struct path path;
diff --git a/include/driver.h b/include/driver.h
index 54b30d9921e0..7ff65d63946d 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -590,6 +590,11 @@ static inline void cdev_set_of_node(struct cdev *cdev, struct device_node *np)
 		cdev->device_node = np;
 }
 
+static inline const char *cdev_name(struct cdev *cdev)
+{
+	return cdev ? cdev->name : NULL;
+}
+
 int devfs_create(struct cdev *);
 int devfs_create_link(struct cdev *, const char *name);
 int devfs_remove(struct cdev *);
diff --git a/include/fs.h b/include/fs.h
index c4af8659b0d3..020761692cad 100644
--- a/include/fs.h
+++ b/include/fs.h
@@ -152,6 +152,8 @@ void cdev_print(const struct cdev *cdev);
 
 char *canonicalize_path(int dirfd, const char *pathname);
 
+struct fs_device *get_fsdevice_by_path(int dirfd, const char *path);
+
 char *get_mounted_path(const char *path);
 
 struct cdev *get_cdev_by_mountpath(const char *path);
-- 
2.39.2




  parent reply	other threads:[~2024-03-04 19:05 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-04 18:58 [PATCH v2 000/113] efi: prepare for ARM64 EFI loader support Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 001/113] string: implement strcmp_ptr and streq_ptr helpers Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 002/113] commands: efiexit: flush console and shutdown barebox Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 003/113] treewide: add errno_set helper for returning positive error code in errno Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 004/113] vsprintf: guard against NULL in UUID %pU Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 005/113] common: add option to poweroff system on failure Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 006/113] boot: print error code when booting fails Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 007/113] common: efi: move directory to top-level Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 008/113] efi: payload: rename CONFIG_EFI_BOOTUP to CONFIG_EFI_PAYLOAD Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 009/113] efi: payload: image: return actual read_file() error Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 010/113] of: don't report failure to of_read_file twice Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 011/113] efi: payload: make missing state reporting less verbose Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 012/113] libfile: factor out read_file_into_buf helper Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 013/113] efi: payload: image: allocate image via loader if it exceeds malloc area Ahmad Fatoum
2024-03-04 18:58 ` [PATCH v2 014/113] efi: payload: image: use assigned barebox loader type on x86 Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 015/113] efi: payload: iomem: adjust types to avoid casting Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 016/113] commands: kallsyms: add command-line interface Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 017/113] block: define BLOCKSIZE globally in block.h Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 018/113] cdev: implement setter/getter for cdev device node Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 019/113] block: virtio: assign virtio-mmio device tree node to cdevs Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 020/113] commands: stat: print DT node for cdevs if available Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 021/113] partitions: have parsers record bootable bits Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 022/113] commands: stat: display bootable partition table bit info Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 023/113] block: record block device type Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 024/113] include: add definitions for UAPI discoverable partitions spec Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 025/113] efi: payload: restrict 8250 UART at I/O port 0x3f8 registration to x86 Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 026/113] fs: fix unreaddir, so readdir returns unread dirent first Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 027/113] fs: turn creat into static inline helper Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 028/113] fs: drop unused LOOKUP_ flags Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 029/113] fs: opendir: reference mount point until closedir is called Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 030/113] fs: factor out opendir iteration Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 031/113] fs: implement fdopendir and rewinddir Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 032/113] fs: remove unused member from struct nameidata Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 033/113] fs: always check path_init for errors Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 034/113] fs: set current working dir directly when mounting root Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 035/113] fs: implement openat and friends Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 036/113] fs: implement O_PATH Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 037/113] fs: support different root directories Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 038/113] fs: implement O_CHROOT Ahmad Fatoum
2024-03-04 18:59 ` Ahmad Fatoum [this message]
2024-03-04 18:59 ` [PATCH v2 040/113] fs: initialize struct nameidata::last Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 041/113] fs: support opening / Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 042/113] test: self: add dirfd tests Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 043/113] commands: stat: add option for statat Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 044/113] efi: payload: lower command line options print from error to info Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 045/113] efi: payload: init: warn if /boot FS is unknown Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 046/113] commands: time: switch to using getopt for -n Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 047/113] commands: time: reduce strjoin runtime, drop trailing space Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 048/113] commands: time: refactor into new strjoin Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 049/113] test: self: add strjoin tests Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 050/113] filetype: have cdev_detect_type take a cdev Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 051/113] ARM: mmu-early: gracefully handle already enabled MMU Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 052/113] efi: don't hide structs, enums or unions behind _t Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 053/113] efi: make headers self-contained Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 054/113] efi: unify whitespace for GUIDs Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 055/113] efi: efi-guid: add more GUIDs Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 056/113] ARM64: cpu: setupc: rewrite to be fully PIC Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 057/113] ARM64: runtime-offset: make get_runtime_offset " Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 058/113] pbl: introduce CONFIG_PBL_FULLY_PIC Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 059/113] efi: payload: fix ARM build Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 060/113] efi: payload: init: restrict barebox mem to first 1G only on x86 Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 061/113] efi: add efi_is_loader/efi_is_payload helpers Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 062/113] efi: payload: suppress EFI payload initcalls when not EFI-loaded Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 063/113] ARM: make board data definitions accessible to other architectures Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 064/113] boarddata: add barebox_boarddata_is_machine helper Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 065/113] common: add PE/COFF loader Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 066/113] efi: use efi_handle_t where appropriate Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 067/113] efi: block: move definitions into header file Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 068/113] efi: define efi_handle_t as opaque pointer Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 069/113] efi: constify guid_t in API Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 070/113] efi: rename efi_simple_input_interface to efi_simple_text_input_protocol Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 071/113] efi: add EFI_WARN constants Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 072/113] efi-stdio: fix wait_for_event argument Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 073/113] efi-stdio: wait for extended input key event when using extended input Ahmad Fatoum
2024-03-04 18:59 ` [PATCH v2 074/113] efi: flesh out EFI definitions in header Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 075/113] efi: add efi_driver_binding_protocol Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 076/113] efi: improve usability of EFI_PAGE_* macros Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 077/113] fs: efi: move definitions into header Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 078/113] efi: fs: flesh out file system definitions Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 079/113] efi: stdio: fix efi_register_keystroke_notify prototype Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 080/113] video: mark EFI_GOP driver x86-only for now Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 081/113] filetype: add new file types for EFI-enabled Linux images Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 082/113] efi: payload: register handler for EFI-stubbed ARM64 kernel Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 083/113] efi: payload: factor C efi_main into dedicated file Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 084/113] efi: payload: early-mem: simplify error message reporting Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 085/113] efi: payload: early-mem: use EFI_PAGE_SIZE instead of PAGE_SIZE Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 086/113] ARM64: add optional EFI stub Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 087/113] efi: devicepath: improve const safety Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 088/113] efi: refactor device_path_to_partuuid for code reuse Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 089/113] efi: devicepath: implement device_path_to_str_buf variant Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 090/113] lib: vsprintf: align documentation with current feature set Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 091/113] vsprintf: add %pD for printing EFI device path Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 092/113] lib: string: import Linux strreplace helper Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 093/113] efi: payload: dynamically determine bootloader file name Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 094/113] efi: payload: iomem: register later Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 095/113] efi: payload: protect against buggy EFI implementations Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 096/113] efi: payload: don't require efi_loaded_image->parent_handle for bootsource detection Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 097/113] commands: add cpuinfo -s option for stacktrace Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 098/113] efi: devicepath: align MemoryMapped name with spec Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 099/113] efi: devicepath: pretty print BBS BEV DeviceType Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 100/113] efi: devicepath: format GUIDs as little endian Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 101/113] efi: devicepath: move END device node definitions into header Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 102/113] efi: devicepath: drop underscores in hex constants Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 103/113] efi: devicepath: namespace definitions Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 104/113] efi: devicepath: use flexible array members for trailing strings Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 105/113] efi: devicepath: drop unused macro Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 106/113] efi: devicepath: let compiler worry about unaligned unpacking Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 107/113] efi: devicepath: correct formatting of BBS Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 108/113] commands: provide efi_handle_dump in both payload and loader Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 109/113] lib: uuid: implement uuid/guid_parse Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 110/113] commands: efi_handle_dump: prepare for supporting EFI loader Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 111/113] commands: efi_handle_dump: print loaded image devpath Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 112/113] commands: efi_handle_dump: use guid_parse instead of open-coding Ahmad Fatoum
2024-03-04 19:00 ` [PATCH v2 113/113] commands: efi_handle_dump: don't ignore failure to parse GUID Ahmad Fatoum
2024-03-05 15:28 ` [PATCH v2 000/113] efi: prepare for ARM64 EFI loader support Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240304190038.3486881-40-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox