public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
* add a partscan sysfs attribute
@ 2024-04-29 17:48 Christoph Hellwig
  2024-04-29 17:49 ` [PATCH 1/2] block: add a disk_has_partscan helper Christoph Hellwig
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Christoph Hellwig @ 2024-04-29 17:48 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Lennart Poettering, linux-block

Hi all,

this series adds a patscan sysfs attribute so that userspace 
(e.g. systemd) can check if partition scanning is enabled for a given
gendisk.

Diffstat:
 Documentation/ABI/stable/sysfs-block |   10 ++++++++++
 block/genhd.c                        |   15 ++++++++++-----
 block/partitions/core.c              |    5 +----
 include/linux/blkdev.h               |   13 +++++++++++++
 4 files changed, 34 insertions(+), 9 deletions(-)

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

* [PATCH 1/2] block: add a disk_has_partscan helper
  2024-04-29 17:48 add a partscan sysfs attribute Christoph Hellwig
@ 2024-04-29 17:49 ` Christoph Hellwig
  2024-04-29 17:49 ` [PATCH 2/2] block: add a partscan sysfs attribute for disks Christoph Hellwig
  2024-04-30 14:25 ` add a partscan sysfs attribute Lennart Poettering
  2 siblings, 0 replies; 5+ messages in thread
From: Christoph Hellwig @ 2024-04-29 17:49 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Lennart Poettering, linux-block

Add a helper to check if partition scanning is enabled instead of
open coding the check in a few places.  This now always checks for
the hidden flag even if all but one of the callers are never reachable
for hidden gendisks.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 block/genhd.c           |  7 ++-----
 block/partitions/core.c |  5 +----
 include/linux/blkdev.h  | 13 +++++++++++++
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/block/genhd.c b/block/genhd.c
index eb893df56d510e..4b85963d09dbb4 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -345,9 +345,7 @@ int disk_scan_partitions(struct gendisk *disk, blk_mode_t mode)
 	struct file *file;
 	int ret = 0;
 
-	if (disk->flags & (GENHD_FL_NO_PART | GENHD_FL_HIDDEN))
-		return -EINVAL;
-	if (test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
+	if (!disk_has_partscan(disk))
 		return -EINVAL;
 	if (disk->open_partitions)
 		return -EBUSY;
@@ -503,8 +501,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
 			goto out_unregister_bdi;
 
 		/* Make sure the first partition scan will be proceed */
-		if (get_capacity(disk) && !(disk->flags & GENHD_FL_NO_PART) &&
-		    !test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
+		if (get_capacity(disk) && disk_has_partscan(disk))
 			set_bit(GD_NEED_PART_SCAN, &disk->state);
 
 		bdev_add(disk->part0, ddev->devt);
diff --git a/block/partitions/core.c b/block/partitions/core.c
index b11e88c82c8cfa..37b5f92d07fec9 100644
--- a/block/partitions/core.c
+++ b/block/partitions/core.c
@@ -573,10 +573,7 @@ static int blk_add_partitions(struct gendisk *disk)
 	struct parsed_partitions *state;
 	int ret = -EAGAIN, p;
 
-	if (disk->flags & GENHD_FL_NO_PART)
-		return 0;
-
-	if (test_bit(GD_SUPPRESS_PART_SCAN, &disk->state))
+	if (!disk_has_partscan(disk))
 		return 0;
 
 	state = check_partition(disk);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 040a22e0eda0ec..3b18a40a1fc109 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -230,6 +230,19 @@ static inline unsigned int disk_openers(struct gendisk *disk)
 	return atomic_read(&disk->part0->bd_openers);
 }
 
+/**
+ * disk_has_partscan - return %true if partition scanning is enabled on a disk
+ * @disk: disk to check
+ *
+ * Returns %true if partitions scanning is enabled for @disk, or %false if
+ * partition scanning is disabled either permanently or temporarily.
+ */
+static inline bool disk_has_partscan(struct gendisk *disk)
+{
+	return !(disk->flags & (GENHD_FL_NO_PART | GENHD_FL_HIDDEN)) &&
+		!test_bit(GD_SUPPRESS_PART_SCAN, &disk->state);
+}
+
 /*
  * The gendisk is refcounted by the part0 block_device, and the bd_device
  * therein is also used for device model presentation in sysfs.
-- 
2.39.2


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

* [PATCH 2/2] block: add a partscan sysfs attribute for disks
  2024-04-29 17:48 add a partscan sysfs attribute Christoph Hellwig
  2024-04-29 17:49 ` [PATCH 1/2] block: add a disk_has_partscan helper Christoph Hellwig
@ 2024-04-29 17:49 ` Christoph Hellwig
  2024-04-30 14:10   ` John Garry
  2024-04-30 14:25 ` add a partscan sysfs attribute Lennart Poettering
  2 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2024-04-29 17:49 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Lennart Poettering, linux-block

This attribute reports if partition scanning is enabled for a given disk.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 Documentation/ABI/stable/sysfs-block | 10 ++++++++++
 block/genhd.c                        |  8 ++++++++
 2 files changed, 18 insertions(+)

diff --git a/Documentation/ABI/stable/sysfs-block b/Documentation/ABI/stable/sysfs-block
index 1fe9a553c37b71..db58fdcdff31b0 100644
--- a/Documentation/ABI/stable/sysfs-block
+++ b/Documentation/ABI/stable/sysfs-block
@@ -101,6 +101,16 @@ Description:
 		devices that support receiving integrity metadata.
 
 
+What:		/sys/block/<disk>/partscan
+Date:		Atorl 2024
+Contact:	Christoph Hellwig <hch@lst.de>
+Description:
+		The /sys/block/<disk>/partscan files reports if partition
+		scanning is enabled for the disk.  It returns "1" if partition
+		scanning is enabled, or "0" if not.  The value type is a 32-bit
+		unsigned integer, but only "0" and "1" are valid values.
+
+
 What:		/sys/block/<disk>/<partition>/alignment_offset
 Date:		April 2009
 Contact:	Martin K. Petersen <martin.petersen@oracle.com>
diff --git a/block/genhd.c b/block/genhd.c
index 4b85963d09dbb4..dec2ee338fb44a 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -1044,6 +1044,12 @@ static ssize_t diskseq_show(struct device *dev,
 	return sprintf(buf, "%llu\n", disk->diskseq);
 }
 
+static ssize_t partscan_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	return sprintf(buf, "%u\n", disk_has_partscan(dev_to_disk(dev)));
+}
+
 static DEVICE_ATTR(range, 0444, disk_range_show, NULL);
 static DEVICE_ATTR(ext_range, 0444, disk_ext_range_show, NULL);
 static DEVICE_ATTR(removable, 0444, disk_removable_show, NULL);
@@ -1057,6 +1063,7 @@ static DEVICE_ATTR(stat, 0444, part_stat_show, NULL);
 static DEVICE_ATTR(inflight, 0444, part_inflight_show, NULL);
 static DEVICE_ATTR(badblocks, 0644, disk_badblocks_show, disk_badblocks_store);
 static DEVICE_ATTR(diskseq, 0444, diskseq_show, NULL);
+static DEVICE_ATTR(partscan, 0444, partscan_show, NULL);
 
 #ifdef CONFIG_FAIL_MAKE_REQUEST
 ssize_t part_fail_show(struct device *dev,
@@ -1103,6 +1110,7 @@ static struct attribute *disk_attrs[] = {
 	&dev_attr_events_async.attr,
 	&dev_attr_events_poll_msecs.attr,
 	&dev_attr_diskseq.attr,
+	&dev_attr_partscan.attr,
 #ifdef CONFIG_FAIL_MAKE_REQUEST
 	&dev_attr_fail.attr,
 #endif
-- 
2.39.2


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

* Re: [PATCH 2/2] block: add a partscan sysfs attribute for disks
  2024-04-29 17:49 ` [PATCH 2/2] block: add a partscan sysfs attribute for disks Christoph Hellwig
@ 2024-04-30 14:10   ` John Garry
  0 siblings, 0 replies; 5+ messages in thread
From: John Garry @ 2024-04-30 14:10 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe; +Cc: Lennart Poettering, linux-block

On 29/04/2024 18:49, Christoph Hellwig wrote:
> +Date:		Atorl 2024

I suppose that this needs to be fixed.. or become May.

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

* Re: add a partscan sysfs attribute
  2024-04-29 17:48 add a partscan sysfs attribute Christoph Hellwig
  2024-04-29 17:49 ` [PATCH 1/2] block: add a disk_has_partscan helper Christoph Hellwig
  2024-04-29 17:49 ` [PATCH 2/2] block: add a partscan sysfs attribute for disks Christoph Hellwig
@ 2024-04-30 14:25 ` Lennart Poettering
  2 siblings, 0 replies; 5+ messages in thread
From: Lennart Poettering @ 2024-04-30 14:25 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: Jens Axboe, linux-block

On Mo, 29.04.24 19:48, Christoph Hellwig (hch@lst.de) wrote:

> Hi all,
>
> this series adds a patscan sysfs attribute so that userspace
> (e.g. systemd) can check if partition scanning is enabled for a given
> gendisk.

thanks!

lgtm for our uses!

Lennart

--
Lennart Poettering, Berlin

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

end of thread, other threads:[~2024-04-30 14:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-29 17:48 add a partscan sysfs attribute Christoph Hellwig
2024-04-29 17:49 ` [PATCH 1/2] block: add a disk_has_partscan helper Christoph Hellwig
2024-04-29 17:49 ` [PATCH 2/2] block: add a partscan sysfs attribute for disks Christoph Hellwig
2024-04-30 14:10   ` John Garry
2024-04-30 14:25 ` add a partscan sysfs attribute Lennart Poettering

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox