OSDN Git Service

block: move GENHD_FL_NATIVE_CAPACITY to disk->state
authorChristoph Hellwig <hch@lst.de>
Mon, 22 Nov 2021 13:06:12 +0000 (14:06 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 29 Nov 2021 13:35:21 +0000 (06:35 -0700)
The flag to indicate an unlocked native capacity is dynamic state,
not a driver capability flag, so move it to disk->state.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20211122130625.1136848-2-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/partitions/core.c
include/linux/genhd.h

index 334b72e..520292f 100644 (file)
@@ -527,18 +527,15 @@ out_unlock:
 
 static bool disk_unlock_native_capacity(struct gendisk *disk)
 {
-       const struct block_device_operations *bdops = disk->fops;
-
-       if (bdops->unlock_native_capacity &&
-           !(disk->flags & GENHD_FL_NATIVE_CAPACITY)) {
-               printk(KERN_CONT "enabling native capacity\n");
-               bdops->unlock_native_capacity(disk);
-               disk->flags |= GENHD_FL_NATIVE_CAPACITY;
-               return true;
-       } else {
+       if (!disk->fops->unlock_native_capacity ||
+           test_and_set_bit(GD_NATIVE_CAPACITY, &disk->state)) {
                printk(KERN_CONT "truncated\n");
                return false;
        }
+
+       printk(KERN_CONT "enabling native capacity\n");
+       disk->fops->unlock_native_capacity(disk);
+       return true;
 }
 
 void blk_drop_partitions(struct gendisk *disk)
index 74c4102..e490a71 100644 (file)
@@ -60,12 +60,6 @@ struct partition_meta_info {
  * (``BLOCK_EXT_MAJOR``).
  * This affects the maximum number of partitions.
  *
- * ``GENHD_FL_NATIVE_CAPACITY`` (0x0080): based on information in the
- * partition table, the device's capacity has been extended to its
- * native capacity; i.e. the device has hidden capacity used by one
- * of the partitions (this is a flag used so that native capacity is
- * only ever unlocked once).
- *
  * ``GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE`` (0x0100): event polling is
  * blocked whenever a writer holds an exclusive lock.
  *
@@ -86,7 +80,6 @@ struct partition_meta_info {
 #define GENHD_FL_CD                            0x0008
 #define GENHD_FL_SUPPRESS_PARTITION_INFO       0x0020
 #define GENHD_FL_EXT_DEVT                      0x0040
-#define GENHD_FL_NATIVE_CAPACITY               0x0080
 #define GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE    0x0100
 #define GENHD_FL_NO_PART_SCAN                  0x0200
 #define GENHD_FL_HIDDEN                                0x0400
@@ -140,6 +133,7 @@ struct gendisk {
 #define GD_NEED_PART_SCAN              0
 #define GD_READ_ONLY                   1
 #define GD_DEAD                                2
+#define GD_NATIVE_CAPACITY             3
 
        struct mutex open_mutex;        /* open/close mutex */
        unsigned open_partitions;       /* number of open partitions */