All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v5 1/2] btrfs-progs: add cli to deregister a device
Date: Thu,  7 Dec 2017 22:52:54 +0800	[thread overview]
Message-ID: <20171207145255.27686-1-anand.jain@oracle.com> (raw)
In-Reply-To: <20171207143623.26710-1-anand.jain@oracle.com>

This patch adds
  btrfs device deregister <dev>
so that an already registered device (through scan) can be deregistered.

This change is compatible with older kernel without the ioctl
BTRFS_IOC_PURGE_DEV it shall report 'Inappropriate ioctl for device'.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
v1-4: No change.
v5: make provision to add no option to delete all fsids

 cmds-device.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ioctl.h       |  2 ++
 2 files changed, 57 insertions(+)

diff --git a/cmds-device.c b/cmds-device.c
index f4cdb39f64ac..8244ff9802be 100644
--- a/cmds-device.c
+++ b/cmds-device.c
@@ -329,6 +329,60 @@ out:
 	return !!ret;
 }
 
+static const char * const cmd_device_deregister_usage[] = {
+	"btrfs device deregister [<device>]",
+	"Deregister device in btrfs kernel module.",
+	NULL
+};
+
+static int btrfs_deregister_one_device(char *path)
+{
+	struct btrfs_ioctl_vol_args args;
+	int fd;
+	int ret;
+
+	fd = open("/dev/btrfs-control", O_RDWR);
+	if (fd < 0)
+		return -errno;
+
+	memset(&args, 0, sizeof(args));
+	strncpy_null(args.name, path);
+	ret = ioctl(fd, BTRFS_IOC_DEREGISTER_DEV, &args);
+	if (ret)
+		ret = -errno;
+	close(fd);
+	return ret;
+}
+
+static int cmd_device_deregister(int argc, char **argv)
+{
+	char *path;
+	int ret = 0;
+
+	if (check_argc_exact(argc - optind, 1))
+		usage(cmd_device_deregister_usage);
+
+	if (is_block_device(argv[1]) != 1) {
+		error("Not a block device: %s", argv[1]);
+		return -ENOENT;
+	}
+
+	path = canonicalize_path(argv[1]);
+	if (!path) {
+		error("Could not canonicalize path '%s': %s",
+					argv[1], strerror(errno));
+		return -ENOENT;
+	}
+
+	ret  = btrfs_deregister_one_device(path);
+	if (ret)
+		error("Can't deregister '%s': %s", path, strerror(-ret));
+
+	free(path);
+
+	return ret;
+}
+
 static const char * const cmd_device_ready_usage[] = {
 	"btrfs device ready <device>",
 	"Check device to see if it has all of its devices in cache for mounting",
@@ -604,6 +658,7 @@ const struct cmd_group device_cmd_group = {
 			CMD_ALIAS },
 		{ "remove", cmd_device_remove, cmd_device_remove_usage, NULL, 0 },
 		{ "scan", cmd_device_scan, cmd_device_scan_usage, NULL, 0 },
+		{ "deregister", cmd_device_deregister, cmd_device_deregister_usage, NULL, 0 },
 		{ "ready", cmd_device_ready, cmd_device_ready_usage, NULL, 0 },
 		{ "stats", cmd_device_stats, cmd_device_stats_usage, NULL, 0 },
 		{ "usage", cmd_device_usage,
diff --git a/ioctl.h b/ioctl.h
index 709e996f401c..3cdb88eb5bb2 100644
--- a/ioctl.h
+++ b/ioctl.h
@@ -721,6 +721,8 @@ static inline char *btrfs_err_str(enum btrfs_err_code err_code)
 				   struct btrfs_ioctl_vol_args)
 #define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
 				   struct btrfs_ioctl_vol_args)
+#define BTRFS_IOC_DEREGISTER_DEV _IOW(BTRFS_IOCTL_MAGIC, 5, \
+				   struct btrfs_ioctl_vol_args)
 /* trans start and trans end are dangerous, and only for
  * use by applications that know how to avoid the
  * resulting deadlocks
-- 
2.7.0


  parent reply	other threads:[~2017-12-07 14:52 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-07 14:36 [PATCH v5 0/3] Add cli and ioctl to deregister devices Anand Jain
2017-12-07 14:36 ` [PATCH v5 1/3] btrfs: add function to device list delete Anand Jain
2017-12-07 14:36 ` [PATCH v5 2/3] btrfs: introduce feature to deregister a btrfs device Anand Jain
2017-12-07 14:36 ` [PATCH v5 3/3] btrfs: add feature to deregister all unmounted devices Anand Jain
2017-12-07 14:52 ` [PATCH v5 0/3] Add cli and ioctl to deregister devices Austin S. Hemmelgarn
2017-12-08  0:51   ` Anand Jain
2017-12-08  2:17     ` Duncan
2017-12-08 13:09       ` Austin S. Hemmelgarn
2017-12-12  7:37         ` Anand Jain
2017-12-07 14:52 ` Anand Jain [this message]
2017-12-07 14:52   ` [PATCH v5 2/2] btrfs-progs: add feature to deregister all devices Anand Jain

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=20171207145255.27686-1-anand.jain@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=linux-btrfs@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.