Linux-BTRFS Archive on lore.kernel.org
 help / Atom feed
* [PATCH v14] Add cli and ioctl to forget scanned device(s)
@ 2019-01-04  5:31 Anand Jain
  2019-01-04  5:31 ` [PATCH v14] btrfs-progs: add cli to forget one or all scanned devices Anand Jain
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Anand Jain @ 2019-01-04  5:31 UTC (permalink / raw)
  To: linux-btrfs

v14:
 Splits refactoring part of btrfs_free_stale_devices() into a new patch

v13:
 Please ref individual patches.

v12:
  Fixed coding style - leave space between " : ".

v11:
 btrfs-progs: Bring the code into the else part of if(forget).
	      Use strerror to print the erorr instead of ret.

v10:
 Make btrfs-progs changes more readable.
 With an effort to keep the known bug [1] as it is..
  [1]
   The cli 'btrfs device scan --all /dev/sdb' which should have scanned
    only one device, ends up scanning all the devices and I am not trying
    to fix this bug in this patch because..
  . -d|--all is marked as deprecated, I hope -d option would go away
  . For now some script might be using this bug as a feature, and fixing
    this bug might lead to mount failure.

v9:
 Make forget as a btrfs device scan option.
 Use forget in the fstests, now you can run fstests with btrfs as rootfs
  which helps to exercise the uuid_mutex lock.

v8:
 Change log update in the kernel patch.

v7:
 Use struct btrfs_ioctl_vol_args (instead of struct
  btrfs_ioctl_vol_args_v2) as its inline with other ioctl
  btrfs-control
 The CLI usage/features remains same. However internally the ioctl flag
  is not required to delete all the unmounted devices. Instead leave
  btrfs_ioctl_vol_args::name NULL.

v6:
 Use the changed fn name btrfs_free_stale_devices().

 Change in title:
 Old v5:
 Cover-letter:
  [PATCH v5] Add cli and ioctl to ignore a scanned device
 Kernel:
  [PATCH v5] btrfs: introduce feature to ignore a btrfs device
 Progs:
  [PATCH v5] btrfs-progs: add 'btrfs device ignore' cli

v5:
  Adds feature to delete all stale devices
  Reuses btrfs_free_stale_devices() fn and so depends on the
    patch-set [1] in the ML.
  Uses struct btrfs_ioctl_vol_args_v2 instead of
    struct btrfs_ioctl_vol_args as arg
  Does the device path matching instead of btrfs_device matching
    (we won't delete the mounted device as btrfs_free_stale_devices()
    checks for it)
v4:
  No change. But as the ML thread may be confusing, so resend.
v3:
  No change. Send to correct ML.
v2:
  Accepts review from Nikolay, details are in the specific patch.
  Patch 1/2 is renamed from
    [PATCH 1/2] btrfs: refactor btrfs_free_stale_device() to get device list delete
  to
    [PATCH 1/2] btrfs: add function to device list delete

Adds cli and ioctl to forget a scanned device or forget all stale
devices in the kernel.

Anand Jain (2):
  btrfs: refactor btrfs_free_stale_devices() to get return value
  btrfs: introduce feature to forget a btrfs device

 fs/btrfs/super.c           | 3 +++
 fs/btrfs/volumes.c         | 9 +++++++++
 fs/btrfs/volumes.h         | 1 +
 include/uapi/linux/btrfs.h | 2 ++
 4 files changed, 15 insertions(+)

Anand Jain (1):
  btrfs-progs: add cli to forget one or all scanned devices

 cmds-device.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 ioctl.h       |  2 ++
 2 files changed, 56 insertions(+), 9 deletions(-)

[1]
Anand Jain (1):
  fstests: btrfs use forget if not reload

 common/btrfs    | 20 ++++++++++++++++++++
 tests/btrfs/124 |  6 +++---
 tests/btrfs/125 |  6 +++---
 tests/btrfs/154 |  6 +++---
 tests/btrfs/164 |  4 ++--
 5 files changed, 31 insertions(+), 11 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v14] btrfs-progs: add cli to forget one or all scanned devices
  2019-01-04  5:31 [PATCH v14] Add cli and ioctl to forget scanned device(s) Anand Jain
@ 2019-01-04  5:31 ` Anand Jain
  2019-01-04  5:31 ` [PATCH 1/2 v14] btrfs: refactor btrfs_free_stale_devices() to get return value Anand Jain
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Anand Jain @ 2019-01-04  5:31 UTC (permalink / raw)
  To: linux-btrfs

This patch adds cli
  btrfs device forget [dev]
to remove the given device structure in the kernel if the device
is unmounted. If no argument is given it shall remove all stale
(device which are not mounted) from the kernel.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
---
v13->v14: none.
v12->v13: none.
v11->v12: none.
v1->v12: pls ref to the cover-letter.

 cmds-device.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 ioctl.h       |  2 ++
 2 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/cmds-device.c b/cmds-device.c
index 2a05f70a76a9..280d6f555377 100644
--- a/cmds-device.c
+++ b/cmds-device.c
@@ -254,10 +254,32 @@ static int cmd_device_delete(int argc, char **argv)
 	return _cmd_device_remove(argc, argv, cmd_device_delete_usage);
 }
 
+static int btrfs_forget_devices(char *path)
+{
+	struct btrfs_ioctl_vol_args args;
+	int ret;
+	int fd;
+
+	fd = open("/dev/btrfs-control", O_RDWR);
+	if (fd < 0)
+		return -errno;
+
+	memset(&args, 0, sizeof(args));
+	if (path)
+		strncpy_null(args.name, path);
+	ret = ioctl(fd, BTRFS_IOC_FORGET_DEV, &args);
+	if (ret)
+		ret = -errno;
+	close(fd);
+	return ret;
+}
+
 static const char * const cmd_device_scan_usage[] = {
-	"btrfs device scan [(-d|--all-devices)|<device> [<device>...]]",
-	"Scan devices for a btrfs filesystem",
+	"btrfs device scan [(-d|--all-devices)|(-u|--forget)|<device> "\
+							"[<device>...]]",
+	"Scan or forget (deregister) devices for a btrfs filesystem",
 	" -d|--all-devices (deprecated)",
+	" -u|--forget [<device> ..]",
 	NULL
 };
 
@@ -267,37 +289,53 @@ static int cmd_device_scan(int argc, char **argv)
 	int devstart;
 	int all = 0;
 	int ret = 0;
+	int forget = 0;
 
 	optind = 0;
 	while (1) {
 		int c;
 		static const struct option long_options[] = {
 			{ "all-devices", no_argument, NULL, 'd'},
+			{ "forget", no_argument, NULL, 'u'},
 			{ NULL, 0, NULL, 0}
 		};
 
-		c = getopt_long(argc, argv, "d", long_options, NULL);
+		c = getopt_long(argc, argv, "du", long_options, NULL);
 		if (c < 0)
 			break;
 		switch (c) {
 		case 'd':
 			all = 1;
 			break;
+		case 'u':
+			forget = 1;
+			break;
 		default:
 			usage(cmd_device_scan_usage);
 		}
 	}
 	devstart = optind;
 
+	if (all && forget)
+		usage(cmd_device_scan_usage);
+
 	if (all && check_argc_max(argc - optind, 1))
 		usage(cmd_device_scan_usage);
 
 	if (all || argc - optind == 0) {
-		printf("Scanning for Btrfs filesystems\n");
-		ret = btrfs_scan_devices();
-		error_on(ret, "error %d while scanning", ret);
-		ret = btrfs_register_all_devices();
-		error_on(ret, "there are %d errors while registering devices", ret);
+		if (forget) {
+			ret = btrfs_forget_devices(NULL);
+			error_on(ret, "'%s', forget failed",
+				 strerror(-ret));
+		} else {
+			printf("Scanning for Btrfs filesystems\n");
+			ret = btrfs_scan_devices();
+			error_on(ret, "error %d while scanning", ret);
+			ret = btrfs_register_all_devices();
+			error_on(ret,
+				"there are %d errors while registering devices",
+				ret);
+		}
 		goto out;
 	}
 
@@ -315,11 +353,19 @@ static int cmd_device_scan(int argc, char **argv)
 			ret = 1;
 			goto out;
 		}
-		printf("Scanning for Btrfs filesystems in '%s'\n", path);
-		if (btrfs_register_one_device(path) != 0) {
-			ret = 1;
-			free(path);
-			goto out;
+		if (forget) {
+			ret = btrfs_forget_devices(path);
+			if (ret)
+				error("Can't forget '%s': %s",
+							path, strerror(-ret));
+		} else {
+			printf("Scanning for Btrfs filesystems in '%s'\n",
+									path);
+			if (btrfs_register_one_device(path) != 0) {
+				ret = 1;
+				free(path);
+				goto out;
+			}
 		}
 		free(path);
 	}
diff --git a/ioctl.h b/ioctl.h
index 709e996f401c..e27d80e09392 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_FORGET_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
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/2 v14] btrfs: refactor btrfs_free_stale_devices() to get return value
  2019-01-04  5:31 [PATCH v14] Add cli and ioctl to forget scanned device(s) Anand Jain
  2019-01-04  5:31 ` [PATCH v14] btrfs-progs: add cli to forget one or all scanned devices Anand Jain
@ 2019-01-04  5:31 ` Anand Jain
  2019-01-18 17:47   ` David Sterba
  2019-01-04  5:31 ` [PATCH 2/2 v14] btrfs: introduce feature to forget a btrfs device Anand Jain
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Anand Jain @ 2019-01-04  5:31 UTC (permalink / raw)
  To: linux-btrfs

Preparatory patch to add forget cli.

Re-factors btrfs_free_stale_devices() to obtain return status. As
this function can fail if it can't find the given path (returns -ENOENT)
or trying to delete a mounted device (returns -EBUSY).

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
v14: born.
 A split from the patch 2/2.
 Use -ENOENT.
 Document return value in the function btrfs_free_stale_devices() header.
 Adds a code comment.
 Ensures it still returns 0 if it was able to delete a device but followed
  by a path matched to a mounted device (a very remote corner case).
      if (path && ret != 0)
             ret = -EBUSY;

 fs/btrfs/volumes.c | 48 +++++++++++++++++++++++++++++++++++-------------
 1 file changed, 35 insertions(+), 13 deletions(-)

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 2576b1a379c9..d8ac63e3666d 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -734,6 +734,19 @@ static void pending_bios_fn(struct btrfs_work *work)
 	run_scheduled_bios(device);
 }
 
+static bool device_path_matched(const char *path, struct btrfs_device *device)
+{
+	int found;
+
+	rcu_read_lock();
+	found = strcmp(rcu_str_deref(device->name), path);
+	rcu_read_unlock();
+
+	if (!found)
+		return true;
+	return false;
+}
+
 /*
  *  Search and remove all stale (devices which are not mounted) devices.
  *  When both inputs are NULL, it will search and release all stale devices.
@@ -741,45 +754,52 @@ static void pending_bios_fn(struct btrfs_work *work)
  *		matching this path only.
  *  skip_dev:	Optional. Will skip this device when searching for the stale
  *		devices.
+ *  Return:	0 for success or if path is NULL.
+ * 		-EBUSY if path is a mounted device.
+ * 		-ENOENT if path does not match with any device in the list.
  */
-static void btrfs_free_stale_devices(const char *path,
+static int btrfs_free_stale_devices(const char *path,
 				     struct btrfs_device *skip_device)
 {
 	struct btrfs_fs_devices *fs_devices, *tmp_fs_devices;
 	struct btrfs_device *device, *tmp_device;
+	int ret;
+
+	if (path)
+		ret = -ENOENT;
+	else
+		ret = 0;
 
 	list_for_each_entry_safe(fs_devices, tmp_fs_devices, &fs_uuids, fs_list) {
+
 		mutex_lock(&fs_devices->device_list_mutex);
-		if (fs_devices->opened) {
-			mutex_unlock(&fs_devices->device_list_mutex);
-			continue;
-		}
 
 		list_for_each_entry_safe(device, tmp_device,
 					 &fs_devices->devices, dev_list) {
-			int not_found = 0;
 
 			if (skip_device && skip_device == device)
 				continue;
 			if (path && !device->name)
 				continue;
-
-			rcu_read_lock();
-			if (path)
-				not_found = strcmp(rcu_str_deref(device->name),
-						   path);
-			rcu_read_unlock();
-			if (not_found)
+			if (path && !device_path_matched(path, device))
 				continue;
+			if (fs_devices->opened) {
+				/* if already deleted a device return 0 */
+				if (path && ret != 0)
+					ret = -EBUSY;
+				break;
+			}
 
 			/* delete the stale device */
 			fs_devices->num_devices--;
 			list_del(&device->dev_list);
 			btrfs_free_device(device);
 
+			ret = 0;
 			if (fs_devices->num_devices == 0)
 				break;
 		}
+
 		mutex_unlock(&fs_devices->device_list_mutex);
 		if (fs_devices->num_devices == 0) {
 			btrfs_sysfs_remove_fsid(fs_devices);
@@ -787,6 +807,8 @@ static void btrfs_free_stale_devices(const char *path,
 			free_fs_devices(fs_devices);
 		}
 	}
+
+	return ret;
 }
 
 static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices,
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 2/2 v14] btrfs: introduce feature to forget a btrfs device
  2019-01-04  5:31 [PATCH v14] Add cli and ioctl to forget scanned device(s) Anand Jain
  2019-01-04  5:31 ` [PATCH v14] btrfs-progs: add cli to forget one or all scanned devices Anand Jain
  2019-01-04  5:31 ` [PATCH 1/2 v14] btrfs: refactor btrfs_free_stale_devices() to get return value Anand Jain
@ 2019-01-04  5:31 ` Anand Jain
  2019-01-04 15:13 ` [PATCH v14] Add cli and ioctl to forget scanned device(s) David Sterba
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Anand Jain @ 2019-01-04  5:31 UTC (permalink / raw)
  To: linux-btrfs

Support for a new command 'btrfs dev forget [dev]' is proposed here
to undo the effects of 'btrfs dev scan [dev]'. For this purpose
this patch proposes to use ioctl #5 as it was empty.
	IOW(BTRFS_IOCTL_MAGIC, 5, ..)
This patch adds new ioctl BTRFS_IOC_FORGET_DEV which can be sent from
the /dev/btrfs-control to forget one or all devices, (devices which are
not mounted) from the btrfs kernel.

The argument it takes is struct btrfs_ioctl_vol_args, and ::name can be
set to specify the device path. And all unmounted devices can be removed
from the kernel if no device path is provided.

Again, the devices are removed only if the relevant fsid aren't mounted.

This new cli can provide..
 . Release of unwanted btrfs_fs_devices and btrfs_devices memory if the
   device is not going to be mounted.
 . Ability to mount the device in degraded mode when one of the other
   device is corrupted like in split brain raid1.
 . Running test cases which requires btrfs.ko-reload if the rootfs
   is btrfs.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
v13->v14:
 Now the changes related to refactor of btrfs_free_stale_devices() is
 moved to a new patch.
v12->v13:  
  btrfs.ko returns error on failing to find the given device.
  For no argument (btrfs device scan --forget) if there is
  no device to forget then it shall just return success.
v11->v12: fix coding style add spacing before after ":".
v1->v11: Pls ref to the cover-letter. (sorry about that).

 fs/btrfs/super.c           |  3 +++
 fs/btrfs/volumes.c         | 11 +++++++++++
 fs/btrfs/volumes.h         |  1 +
 include/uapi/linux/btrfs.h |  2 ++
 4 files changed, 17 insertions(+)

diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 33cc9aba9c94..a4e8beec0fc5 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -2247,6 +2247,9 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd,
 		ret = PTR_ERR_OR_ZERO(device);
 		mutex_unlock(&uuid_mutex);
 		break;
+	case BTRFS_IOC_FORGET_DEV:
+		ret = btrfs_forget_devices(vol->name);
+		break;
 	case BTRFS_IOC_DEVICES_READY:
 		mutex_lock(&uuid_mutex);
 		device = btrfs_scan_one_device(vol->name, FMODE_READ,
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index d8ac63e3666d..cec329f64ac0 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -1473,6 +1473,17 @@ static int btrfs_read_disk_super(struct block_device *bdev, u64 bytenr,
 	return 0;
 }
 
+int btrfs_forget_devices(const char *path)
+{
+	int ret;
+
+	mutex_lock(&uuid_mutex);
+	ret = btrfs_free_stale_devices(strlen(path) ? path : NULL, NULL);
+	mutex_unlock(&uuid_mutex);
+
+	return ret;
+}
+
 /*
  * Look for a btrfs signature on a device. This may be called out of the mount path
  * and we are not allowed to call set_blocksize during the scan. The superblock
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
index ed806649a473..1e73257e55fb 100644
--- a/fs/btrfs/volumes.h
+++ b/fs/btrfs/volumes.h
@@ -416,6 +416,7 @@ int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
 		       fmode_t flags, void *holder);
 struct btrfs_device *btrfs_scan_one_device(const char *path,
 					   fmode_t flags, void *holder);
+int btrfs_forget_devices(const char *path);
 int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
 void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, int step);
 void btrfs_assign_next_active_device(struct btrfs_device *device,
diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h
index e0763bc4158e..c195896d478f 100644
--- a/include/uapi/linux/btrfs.h
+++ b/include/uapi/linux/btrfs.h
@@ -837,6 +837,8 @@ enum btrfs_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_FORGET_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
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v14] Add cli and ioctl to forget scanned device(s)
  2019-01-04  5:31 [PATCH v14] Add cli and ioctl to forget scanned device(s) Anand Jain
                   ` (2 preceding siblings ...)
  2019-01-04  5:31 ` [PATCH 2/2 v14] btrfs: introduce feature to forget a btrfs device Anand Jain
@ 2019-01-04 15:13 ` David Sterba
  2019-01-07 17:28 ` David Sterba
  2019-02-06 15:33 ` David Sterba
  5 siblings, 0 replies; 11+ messages in thread
From: David Sterba @ 2019-01-04 15:13 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs

On Fri, Jan 04, 2019 at 01:31:51PM +0800, Anand Jain wrote:
> v14:
>  Splits refactoring part of btrfs_free_stale_devices() into a new patch
> 
> Anand Jain (2):
>   btrfs: refactor btrfs_free_stale_devices() to get return value
>   btrfs: introduce feature to forget a btrfs device

Added as topic branch to for-next, thanks.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v14] Add cli and ioctl to forget scanned device(s)
  2019-01-04  5:31 [PATCH v14] Add cli and ioctl to forget scanned device(s) Anand Jain
                   ` (3 preceding siblings ...)
  2019-01-04 15:13 ` [PATCH v14] Add cli and ioctl to forget scanned device(s) David Sterba
@ 2019-01-07 17:28 ` David Sterba
  2019-01-08  5:16   ` Anand Jain
  2019-02-06 15:33 ` David Sterba
  5 siblings, 1 reply; 11+ messages in thread
From: David Sterba @ 2019-01-07 17:28 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs

On Fri, Jan 04, 2019 at 01:31:51PM +0800, Anand Jain wrote:
> Adds cli and ioctl to forget a scanned device or forget all stale
> devices in the kernel.

I've read my comments to previous postings and I suggested to add more
ways how to specify the device, eg. by uuid or fsid:devid. Have you
considered that?

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v14] Add cli and ioctl to forget scanned device(s)
  2019-01-07 17:28 ` David Sterba
@ 2019-01-08  5:16   ` Anand Jain
  2019-02-06 15:28     ` David Sterba
  0 siblings, 1 reply; 11+ messages in thread
From: Anand Jain @ 2019-01-08  5:16 UTC (permalink / raw)
  To: dsterba, linux-btrfs



On 01/08/2019 01:28 AM, David Sterba wrote:
> On Fri, Jan 04, 2019 at 01:31:51PM +0800, Anand Jain wrote:
>> Adds cli and ioctl to forget a scanned device or forget all stale
>> devices in the kernel.
> 
> I've read my comments to previous postings and I suggested to add more
> ways how to specify the device, eg. by uuid or fsid:devid. Have you
> considered that?

  Right I responded [1],

   [1]
   https://www.spinics.net/lists/linux-btrfs/msg81059.html

  basically.. I like uuid|fsid:devid idea but,
  - we also need to add the ability to list out uuid|fsid:devid which
  are already scanned, such as [2] (in ml since 2015).

   [2]
   https://patchwork.kernel.org/patch/7362881/

  Further, its better to be consistent with other cli too..
  As of now, 'btrfs device delete' supports only <path|devid> we need
  to add uuid.
  IMO it can be a candidate for separate series?
  I checked volume.c it needs refactor and consolidation of function
  which are involved in finding the device.

  This patch-set helps xfstests to test with btrfs as root fs.[3].

   [3]
   https://patchwork.kernel.org/patch/10733641/

Thanks, Anand

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2 v14] btrfs: refactor btrfs_free_stale_devices() to get return value
  2019-01-04  5:31 ` [PATCH 1/2 v14] btrfs: refactor btrfs_free_stale_devices() to get return value Anand Jain
@ 2019-01-18 17:47   ` David Sterba
  0 siblings, 0 replies; 11+ messages in thread
From: David Sterba @ 2019-01-18 17:47 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs

On Fri, Jan 04, 2019 at 01:31:53PM +0800, Anand Jain wrote:
> Preparatory patch to add forget cli.
> 
> Re-factors btrfs_free_stale_devices() to obtain return status. As
> this function can fail if it can't find the given path (returns -ENOENT)
> or trying to delete a mounted device (returns -EBUSY).
> 
> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> ---

Reviewed-by: David Sterba <dsterba@suse.com>

I've added this patch to the other device-related cleanups sent recently.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v14] Add cli and ioctl to forget scanned device(s)
  2019-01-08  5:16   ` Anand Jain
@ 2019-02-06 15:28     ` David Sterba
  0 siblings, 0 replies; 11+ messages in thread
From: David Sterba @ 2019-02-06 15:28 UTC (permalink / raw)
  To: Anand Jain; +Cc: dsterba, linux-btrfs

On Tue, Jan 08, 2019 at 01:16:14PM +0800, Anand Jain wrote:
> 
> 
> On 01/08/2019 01:28 AM, David Sterba wrote:
> > On Fri, Jan 04, 2019 at 01:31:51PM +0800, Anand Jain wrote:
> >> Adds cli and ioctl to forget a scanned device or forget all stale
> >> devices in the kernel.
> > 
> > I've read my comments to previous postings and I suggested to add more
> > ways how to specify the device, eg. by uuid or fsid:devid. Have you
> > considered that?
> 
>   Right I responded [1],
> 
>    [1]
>    https://www.spinics.net/lists/linux-btrfs/msg81059.html
> 
>   basically.. I like uuid|fsid:devid idea but,
>   - we also need to add the ability to list out uuid|fsid:devid which
>   are already scanned, such as [2] (in ml since 2015).
> 
>    [2]
>    https://patchwork.kernel.org/patch/7362881/

That would be nice to have but is a bigger task than this ioctl.

>   Further, its better to be consistent with other cli too..
>   As of now, 'btrfs device delete' supports only <path|devid> we need
>   to add uuid.

Yeah, the changes to support the enhanced syntax would need to be done
for all commands.

The /dev/path should be sufficient for now.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v14] Add cli and ioctl to forget scanned device(s)
  2019-01-04  5:31 [PATCH v14] Add cli and ioctl to forget scanned device(s) Anand Jain
                   ` (4 preceding siblings ...)
  2019-01-07 17:28 ` David Sterba
@ 2019-02-06 15:33 ` David Sterba
  2019-02-06 22:13   ` Anand Jain
  5 siblings, 1 reply; 11+ messages in thread
From: David Sterba @ 2019-02-06 15:33 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs

On Fri, Jan 04, 2019 at 01:31:51PM +0800, Anand Jain wrote:
> Adds cli and ioctl to forget a scanned device or forget all stale
> devices in the kernel.
> 
> Anand Jain (2):
>   btrfs: refactor btrfs_free_stale_devices() to get return value
>   btrfs: introduce feature to forget a btrfs device

The 2nd patch has been added to misc-next too, I've updated the
changelog a bit. The usecase here is quite small so I don't think we've
missed something crucial on the kernel side. The userspace part can
provide some convenience shortcuts like --forget-all or specifying by
filesystem id where the translation would happen internally, but the
ioctl would cover that. Thanks.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v14] Add cli and ioctl to forget scanned device(s)
  2019-02-06 15:33 ` David Sterba
@ 2019-02-06 22:13   ` Anand Jain
  0 siblings, 0 replies; 11+ messages in thread
From: Anand Jain @ 2019-02-06 22:13 UTC (permalink / raw)
  To: dsterba, linux-btrfs



On 2/6/19 11:33 PM, David Sterba wrote:
> On Fri, Jan 04, 2019 at 01:31:51PM +0800, Anand Jain wrote:
>> Adds cli and ioctl to forget a scanned device or forget all stale
>> devices in the kernel.
>>
>> Anand Jain (2):
>>    btrfs: refactor btrfs_free_stale_devices() to get return value
>>    btrfs: introduce feature to forget a btrfs device
> 
> The 2nd patch has been added to misc-next too, I've updated the
> changelog a bit.

Thanks.

> The usecase here is quite small so I don't think we've
> missed something crucial on the kernel side. 


> The userspace part can
> provide some convenience shortcuts like --forget-all 

The --forget is already equivalent to --forget-all. For example..

# btrfs dev scan /dev/sdb
Scanning for Btrfs filesystems in '/dev/sdb'
# btrfs dev scan --forget /dev/sdb
# btrfs dev scan
Scanning for Btrfs filesystems
# btrfs dev scan --forget
# echo $?
0
# btrfs dev scan --forget /dev/sdb
ERROR: Can't forget '/dev/sdb': No such file or directory
# echo $?
1
#

 > or specifying by
 > filesystem id where the translation would happen internally, but the
 > ioctl would cover that. Thanks.

Looks like that seeks the complete enhancement to scan cli.

IMO we could add..

  #btrfs dev scan --show

  For which looks like we need to enhance existing ioctl
  BTRFS_IOC_FS_INFO and BTRFS_IOC_DEV_INFO so that it works
  through btrfs-control.
  Which means 'btrfs fi show' can also show the scanned devices from
  the kernel, probably we should just add flags to the output to indicate
  if the fsid-device is mounted.

  OR a wrapper around the sysfs fs-dev tree implementation will suffice
  as well.

further, (fsid translation happens internally)

  #btrfs dev scan <fsid>
  #btrfs dev scan --forget <fsid>

In general, agree use case is limited.

Thanks, Anand

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, back to index

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-04  5:31 [PATCH v14] Add cli and ioctl to forget scanned device(s) Anand Jain
2019-01-04  5:31 ` [PATCH v14] btrfs-progs: add cli to forget one or all scanned devices Anand Jain
2019-01-04  5:31 ` [PATCH 1/2 v14] btrfs: refactor btrfs_free_stale_devices() to get return value Anand Jain
2019-01-18 17:47   ` David Sterba
2019-01-04  5:31 ` [PATCH 2/2 v14] btrfs: introduce feature to forget a btrfs device Anand Jain
2019-01-04 15:13 ` [PATCH v14] Add cli and ioctl to forget scanned device(s) David Sterba
2019-01-07 17:28 ` David Sterba
2019-01-08  5:16   ` Anand Jain
2019-02-06 15:28     ` David Sterba
2019-02-06 15:33 ` David Sterba
2019-02-06 22:13   ` Anand Jain

Linux-BTRFS Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-btrfs/0 linux-btrfs/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-btrfs linux-btrfs/ https://lore.kernel.org/linux-btrfs \
		linux-btrfs@vger.kernel.org linux-btrfs@archiver.kernel.org
	public-inbox-index linux-btrfs


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-btrfs


AGPL code for this site: git clone https://public-inbox.org/ public-inbox