Daniel Wagner def3ab
From: Daniel Wagner <dwagner@suse.de>
Daniel Wagner def3ab
Date: Tue, 19 Jul 2022 16:11:13 +0200
Daniel Wagner def3ab
Subject: blk-mq: fix kabi support concurrent queue quiesce unquiesce
Daniel Wagner def3ab
Patch-mainline: never, kABI fix
Daniel Wagner def3ab
References: bsc#1201651
Daniel Wagner def3ab
Daniel Wagner 4dedd6
blkdev: struct request_queue is always dynamically allocated hence
Daniel Wagner 4dedd6
no need to ensure the size of the data structure stays the same.
Daniel Wagner 4dedd6
Daniel Wagner 4dedd6
scsi_device: move the new member to the hole after sdev_state. The
Daniel Wagner 4dedd6
whole exists on all 64 bit plattforms because the enum is 4 bytes
Daniel Wagner 4dedd6
and quiesced_by is a pointer aligned to 8 byte boundery.
Daniel Wagner 4dedd6
Daniel Wagner 4dedd6
        /* --- cacheline 32 boundary (2048 bytes) was 16 bytes ago --- */
Daniel Wagner 4dedd6
        enum scsi_device_state     sdev_state;           /*  2064     4 */
Daniel Wagner 4dedd6
Daniel Wagner 4dedd6
        /* XXX 4 bytes hole, try to pack */
Daniel Wagner 4dedd6
Daniel Wagner 4dedd6
        struct task_struct *       quiesced_by;          /*  2072     8 */
Daniel Wagner 4dedd6
        long unsigned int          sdev_data[];          /*  2080     0 */
Daniel Wagner 4dedd6
Daniel Wagner 4dedd6
        /* size: 2080, cachelines: 33, members: 110 */
Daniel Wagner 4dedd6
        /* sum members: 2039, holes: 7, sum holes: 35 */
Daniel Wagner 4dedd6
        /* sum bitfield members: 48 bits (6 bytes) */
Daniel Wagner 4dedd6
        /* forced alignments: 2 */
Daniel Wagner 4dedd6
        /* last cacheline: 32 bytes */
Daniel Wagner 4dedd6
Lee Duncan 38a699
[lduncan: refreshed to apply]
Daniel Wagner def3ab
---
Daniel Wagner 4dedd6
 include/linux/blkdev.h     |    6 ++++--
Daniel Wagner 4dedd6
 include/scsi/scsi_device.h |    4 +++-
Daniel Wagner 4dedd6
 2 files changed, 7 insertions(+), 3 deletions(-)
Daniel Wagner def3ab
Daniel Wagner def3ab
--- a/include/linux/blkdev.h
Daniel Wagner def3ab
+++ b/include/linux/blkdev.h
Daniel Wagner def3ab
@@ -561,8 +561,6 @@ struct request_queue {
Daniel Wagner def3ab
 	 */
Daniel Wagner def3ab
 	struct mutex		mq_freeze_lock;
Daniel Wagner def3ab
 
Daniel Wagner def3ab
-	int			quiesce_depth;
Daniel Wagner def3ab
-
Daniel Wagner def3ab
 	struct blk_mq_tag_set	*tag_set;
Daniel Wagner def3ab
 	struct list_head	tag_set_list;
Daniel Wagner def3ab
 	struct bio_set		bio_split;
Daniel Wagner def3ab
@@ -580,6 +578,10 @@ struct request_queue {
Daniel Wagner def3ab
 
Daniel Wagner def3ab
 #define BLK_MAX_WRITE_HINTS	5
Daniel Wagner def3ab
 	u64			write_hints[BLK_MAX_WRITE_HINTS];
Daniel Wagner def3ab
+
Daniel Wagner def3ab
+#ifndef __GENKSYMS__
Daniel Wagner def3ab
+	int			quiesce_depth;
Daniel Wagner 4dedd6
+#endif
Daniel Wagner def3ab
 };
Daniel Wagner def3ab
 
Daniel Wagner def3ab
 /* Keep blk_queue_flag_name[] in sync with the definitions below */
Daniel Wagner 4dedd6
--- a/include/scsi/scsi_device.h
Daniel Wagner 4dedd6
+++ b/include/scsi/scsi_device.h
Lee Duncan 38a699
@@ -215,7 +215,6 @@ struct scsi_device {
Lee Duncan 14ff6c
 	unsigned no_vpd_size:1;		/* No VPD size reported in header */
Daniel Wagner 4dedd6
 #endif
Daniel Wagner 4dedd6
 
Daniel Wagner 4dedd6
-	unsigned int queue_stopped;	/* request queue is quiesced */
Daniel Wagner 4dedd6
 	bool offline_already;		/* Device offline message logged */
Daniel Wagner 4dedd6
 
Daniel Wagner 4dedd6
 	atomic_t disk_events_disable_depth; /* disable depth for disk events */
Lee Duncan 38a699
@@ -247,6 +246,9 @@ struct scsi_device {
Daniel Wagner 4dedd6
 	unsigned char		access_state;
Daniel Wagner 4dedd6
 	struct mutex		state_mutex;
Daniel Wagner 4dedd6
 	enum scsi_device_state sdev_state;
Daniel Wagner 4dedd6
+#ifndef __GENKSYMS__
Daniel Wagner 4dedd6
+	unsigned int queue_stopped;	/* request queue is quiesced */
Daniel Wagner 4dedd6
+#endif
Daniel Wagner 4dedd6
 	struct task_struct	*quiesced_by;
Daniel Wagner 4dedd6
 	unsigned long		sdev_data[];
Daniel Wagner 4dedd6
 } __attribute__((aligned(sizeof(unsigned long))));