]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - include/linux/genhd.h
ACPI: fix acpi_find_child_device() invocation in acpi_preset_companion()
[mirror_ubuntu-bionic-kernel.git] / include / linux / genhd.h
index 44790523057f0380b1254458a20ca658f17a3305..cbdf003e759e0ee3106a9cf0f05b0cf326883be7 100644 (file)
@@ -128,7 +128,7 @@ struct hd_struct {
        struct disk_stats dkstats;
 #endif
        struct percpu_ref ref;
-       struct rcu_head rcu_head;
+       struct rcu_work rcu_work;
 };
 
 #define GENHD_FL_REMOVABLE                     1
@@ -141,6 +141,7 @@ struct hd_struct {
 #define GENHD_FL_NATIVE_CAPACITY               128
 #define GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE    256
 #define GENHD_FL_NO_PART_SCAN                  512
+#define GENHD_FL_HIDDEN                                1024
 
 enum {
        DISK_EVENT_MEDIA_CHANGE                 = 1 << 0, /* media changed */
@@ -207,6 +208,7 @@ struct gendisk {
 #endif /* CONFIG_BLK_DEV_INTEGRITY */
        int node_id;
        struct badblocks *bb;
+       struct lockdep_map lockdep_map;
 };
 
 static inline struct gendisk *part_to_disk(struct hd_struct *part)
@@ -235,7 +237,7 @@ static inline bool disk_part_scan_enabled(struct gendisk *disk)
 
 static inline dev_t disk_devt(struct gendisk *disk)
 {
-       return disk_to_dev(disk)->devt;
+       return MKDEV(disk->major, disk->first_minor);
 }
 
 static inline dev_t part_devt(struct hd_struct *part)
@@ -243,6 +245,7 @@ static inline dev_t part_devt(struct hd_struct *part)
        return part_to_dev(part)->devt;
 }
 
+extern struct hd_struct *__disk_get_part(struct gendisk *disk, int partno);
 extern struct hd_struct *disk_get_part(struct gendisk *disk, int partno);
 
 static inline void disk_put_part(struct hd_struct *part)
@@ -364,7 +367,9 @@ static inline void free_part_stats(struct hd_struct *part)
        part_stat_add(cpu, gendiskp, field, -subnd)
 
 void part_in_flight(struct request_queue *q, struct hd_struct *part,
-                       unsigned int inflight[2]);
+                   unsigned int inflight[2]);
+void part_in_flight_rw(struct request_queue *q, struct hd_struct *part,
+                      unsigned int inflight[2]);
 void part_dec_in_flight(struct request_queue *q, struct hd_struct *part,
                        int rw);
 void part_inc_in_flight(struct request_queue *q, struct hd_struct *part,
@@ -576,6 +581,7 @@ struct unixware_disklabel {
 
 extern int blk_alloc_devt(struct hd_struct *part, dev_t *devt);
 extern void blk_free_devt(dev_t devt);
+extern void blk_invalidate_devt(dev_t devt);
 extern dev_t blk_lookup_devt(const char *name, int partno);
 extern char *disk_name (struct gendisk *hd, int partno, char *buf);
 
@@ -591,8 +597,7 @@ extern void __delete_partition(struct percpu_ref *);
 extern void delete_partition(struct gendisk *, int);
 extern void printk_all_partitions(void);
 
-extern struct gendisk *alloc_disk_node(int minors, int node_id);
-extern struct gendisk *alloc_disk(int minors);
+extern struct gendisk *__alloc_disk_node(int minors, int node_id);
 extern struct kobject *get_disk(struct gendisk *disk);
 extern void put_disk(struct gendisk *disk);
 extern void blk_register_region(dev_t devt, unsigned long range,
@@ -616,6 +621,24 @@ extern ssize_t part_fail_store(struct device *dev,
                               const char *buf, size_t count);
 #endif /* CONFIG_FAIL_MAKE_REQUEST */
 
+#define alloc_disk_node(minors, node_id)                               \
+({                                                                     \
+       static struct lock_class_key __key;                             \
+       const char *__name;                                             \
+       struct gendisk *__disk;                                         \
+                                                                       \
+       __name = "(gendisk_completion)"#minors"("#node_id")";           \
+                                                                       \
+       __disk = __alloc_disk_node(minors, node_id);                    \
+                                                                       \
+       if (__disk)                                                     \
+               lockdep_init_map(&__disk->lockdep_map, __name, &__key, 0); \
+                                                                       \
+       __disk;                                                         \
+})
+
+#define alloc_disk(minors) alloc_disk_node(minors, NUMA_NO_NODE)
+
 static inline int hd_ref_init(struct hd_struct *part)
 {
        if (percpu_ref_init(&part->ref, __delete_partition, 0,