History

Merge branch 'for-5.9/drivers' into for-5.9/block-merge

* for-5.9/drivers: (38 commits) block: add max_active_zones to blk-sysfs block: add max_open_zones to blk-sysfs s390/dasd: Use struct_size() helper s390/dasd: fix inability to use DASD with DIAG driver md-cluster: fix wild pointer of unlock_all_bitmaps() md/raid5-cache: clear MD_SB_CHANGE_PENDING before flushing stripes md: fix deadlock causing by sysfs_notify md: improve io stats accounting md: raid0/linear: fix dereference before null check on pointer mddev rsxx: switch from 'pci_free_consistent()' to 'dma_free_coherent()' nvme: remove ns->disk checks nvme-pci: use standard block status symbolic names nvme-pci: use the consistent return type of nvme_pci_iod_alloc_size() nvme-pci: add a blank line after declarations nvme-pci: fix some comments issues nvme-pci: remove redundant segment validation nvme: document quirked Intel models nvme: expose reconnect_delay and ctrl_loss_tmo via sysfs nvme: support for zoned namespaces nvme: support for multiple Command Sets Supported and Effects log pages ...

Jens Axboe committed 6 years ago

Commit 4f43d642 parents 9caaa66 659bf8239 files · +1115 −203Browse files

Showing the changes to include/linux (2 of 39 files). Show all

Unified · Split

2 files
  1. include/linux/blkdev.h +50 −0
  2. include/linux/nvme.h +131 −3
include/linux/blkdev.h+50−0
@@ -513,6 +513,8 @@ struct request_queue { · 512 unmodified lines
513513 unsigned int nr_zones;
514514 unsigned long *conv_zones_bitmap;
515515 unsigned long *seq_zones_wlock;
516+ unsigned int max_open_zones;
517+ unsigned int max_active_zones;
516518 #endif /* CONFIG_BLK_DEV_ZONED */
517519
518520 /*
@@ -722,6 +724,28 @@ static inline bool blk_queue_zone_is_seq(struct request_queue *q, · 203 unmodified lines
722724 return true;
723725 return !test_bit(blk_queue_zone_no(q, sector), q->conv_zones_bitmap);
724726 }
727+
728+static inline void blk_queue_max_open_zones(struct request_queue *q,
729+ unsigned int max_open_zones)
730+{
731+ q->max_open_zones = max_open_zones;
732+}
733+
734+static inline unsigned int queue_max_open_zones(const struct request_queue *q)
735+{
736+ return q->max_open_zones;
737+}
738+
739+static inline void blk_queue_max_active_zones(struct request_queue *q,
740+ unsigned int max_active_zones)
741+{
742+ q->max_active_zones = max_active_zones;
743+}
744+
745+static inline unsigned int queue_max_active_zones(const struct request_queue *q)
746+{
747+ return q->max_active_zones;
748+}
725749 #else /* CONFIG_BLK_DEV_ZONED */
726750 static inline unsigned int blk_queue_nr_zones(struct request_queue *q)
727751 {
@@ -737,6 +761,14 @@ static inline unsigned int blk_queue_zone_no(struct request_queue *q, · 9 unmodified lines
737761 {
738762 return 0;
739763 }
764+static inline unsigned int queue_max_open_zones(const struct request_queue *q)
765+{
766+ return 0;
767+}
768+static inline unsigned int queue_max_active_zones(const struct request_queue *q)
769+{
770+ return 0;
771+}
740772 #endif /* CONFIG_BLK_DEV_ZONED */
741773
742774 static inline bool rq_is_sync(struct request *rq)
@@ -1519,6 +1551,24 @@ static inline sector_t bdev_zone_sectors(struct block_device *bdev) · 776 unmodified lines
15191551 return 0;
15201552 }
15211553
1554+static inline unsigned int bdev_max_open_zones(struct block_device *bdev)
1555+{
1556+ struct request_queue *q = bdev_get_queue(bdev);
1557+
1558+ if (q)
1559+ return queue_max_open_zones(q);
1560+ return 0;
1561+}
1562+
1563+static inline unsigned int bdev_max_active_zones(struct block_device *bdev)
1564+{
1565+ struct request_queue *q = bdev_get_queue(bdev);
1566+
1567+ if (q)
1568+ return queue_max_active_zones(q);
1569+ return 0;
1570+}
1571+
15221572 static inline int queue_dma_alignment(const struct request_queue *q)
15231573 {
15241574 return q ? q->dma_alignment : 511;
include/linux/nvme.h+131−3
@@ -132,6 +132,7 @@ enum { · 131 unmodified lines
132132 #define NVME_CAP_TIMEOUT(cap) (((cap) >> 24) & 0xff)
133133 #define NVME_CAP_STRIDE(cap) (((cap) >> 32) & 0xf)
134134 #define NVME_CAP_NSSRC(cap) (((cap) >> 36) & 0x1)
135+#define NVME_CAP_CSS(cap) (((cap) >> 37) & 0xff)
135136 #define NVME_CAP_MPSMIN(cap) (((cap) >> 48) & 0xf)
136137 #define NVME_CAP_MPSMAX(cap) (((cap) >> 52) & 0xf)
137138
@@ -162,7 +163,6 @@ enum { · 24 unmodified lines
162163
163164 enum {
164165 NVME_CC_ENABLE = 1 << 0,
165− NVME_CC_CSS_NVM = 0 << 4,
166166 NVME_CC_EN_SHIFT = 0,
167167 NVME_CC_CSS_SHIFT = 4,
168168 NVME_CC_MPS_SHIFT = 7,
@@ -170,6 +170,9 @@ enum { · 1 unmodified line
170170 NVME_CC_SHN_SHIFT = 14,
171171 NVME_CC_IOSQES_SHIFT = 16,
172172 NVME_CC_IOCQES_SHIFT = 20,
173+ NVME_CC_CSS_NVM = 0 << NVME_CC_CSS_SHIFT,
174+ NVME_CC_CSS_CSI = 6 << NVME_CC_CSS_SHIFT,
175+ NVME_CC_CSS_MASK = 7 << NVME_CC_CSS_SHIFT,
173176 NVME_CC_AMS_RR = 0 << NVME_CC_AMS_SHIFT,
174177 NVME_CC_AMS_WRRU = 1 << NVME_CC_AMS_SHIFT,
175178 NVME_CC_AMS_VS = 7 << NVME_CC_AMS_SHIFT,
@@ -179,6 +182,8 @@ enum { · 3 unmodified lines
179182 NVME_CC_SHN_MASK = 3 << NVME_CC_SHN_SHIFT,
180183 NVME_CC_IOSQES = NVME_NVM_IOSQES << NVME_CC_IOSQES_SHIFT,
181184 NVME_CC_IOCQES = NVME_NVM_IOCQES << NVME_CC_IOCQES_SHIFT,
185+ NVME_CAP_CSS_NVM = 1 << 0,
186+ NVME_CAP_CSS_CSI = 1 << 6,
182187 NVME_CSTS_RDY = 1 << 0,
183188 NVME_CSTS_CFS = 1 << 1,
184189 NVME_CSTS_NSSRO = 1 << 4,
@@ -369,11 +374,37 @@ struct nvme_id_ns { · 184 unmodified lines
369374 __u8 vs[3712];
370375 };
371376
377+struct nvme_zns_lbafe {
378+ __le64 zsze;
379+ __u8 zdes;
380+ __u8 rsvd9[7];
381+};
382+
383+struct nvme_id_ns_zns {
384+ __le16 zoc;
385+ __le16 ozcs;
386+ __le32 mar;
387+ __le32 mor;
388+ __le32 rrl;
389+ __le32 frl;
390+ __u8 rsvd20[2796];
391+ struct nvme_zns_lbafe lbafe[16];
392+ __u8 rsvd3072[768];
393+ __u8 vs[256];
394+};
395+
396+struct nvme_id_ctrl_zns {
397+ __u8 zasl;
398+ __u8 rsvd1[4095];
399+};
400+
372401 enum {
373402 NVME_ID_CNS_NS = 0x00,
374403 NVME_ID_CNS_CTRL = 0x01,
375404 NVME_ID_CNS_NS_ACTIVE_LIST = 0x02,
376405 NVME_ID_CNS_NS_DESC_LIST = 0x03,
406+ NVME_ID_CNS_CS_NS = 0x05,
407+ NVME_ID_CNS_CS_CTRL = 0x06,
377408 NVME_ID_CNS_NS_PRESENT_LIST = 0x10,
378409 NVME_ID_CNS_NS_PRESENT = 0x11,
379410 NVME_ID_CNS_CTRL_NS_LIST = 0x12,
@@ -383,6 +414,11 @@ enum { · 3 unmodified lines
383414 NVME_ID_CNS_UUID_LIST = 0x17,
384415 };
385416
417+enum {
418+ NVME_CSI_NVM = 0,
419+ NVME_CSI_ZNS = 2,
420+};
421+
386422 enum {
387423 NVME_DIR_IDENTIFY = 0x00,
388424 NVME_DIR_STREAMS = 0x01,
@@ -435,11 +471,13 @@ struct nvme_ns_id_desc { · 46 unmodified lines
435471 #define NVME_NIDT_EUI64_LEN 8
436472 #define NVME_NIDT_NGUID_LEN 16
437473 #define NVME_NIDT_UUID_LEN 16
474+#define NVME_NIDT_CSI_LEN 1
438475
439476 enum {
440477 NVME_NIDT_EUI64 = 0x01,
441478 NVME_NIDT_NGUID = 0x02,
442479 NVME_NIDT_UUID = 0x03,
480+ NVME_NIDT_CSI = 0x04,
443481 };
444482
445483 struct nvme_smart_log {
@@ -519,6 +557,27 @@ struct nvme_ana_rsp_hdr { · 73 unmodified lines
519557 __le16 rsvd10[3];
520558 };
521559
560+struct nvme_zone_descriptor {
561+ __u8 zt;
562+ __u8 zs;
563+ __u8 za;
564+ __u8 rsvd3[5];
565+ __le64 zcap;
566+ __le64 zslba;
567+ __le64 wp;
568+ __u8 rsvd32[32];
569+};
570+
571+enum {
572+ NVME_ZONE_TYPE_SEQWRITE_REQ = 0x2,
573+};
574+
575+struct nvme_zone_report {
576+ __le64 nr_zones;
577+ __u8 resv8[56];
578+ struct nvme_zone_descriptor entries[];
579+};
580+
522581 enum {
523582 NVME_SMART_CRIT_SPARE = 1 << 0,
524583 NVME_SMART_CRIT_TEMPERATURE = 1 << 1,
@@ -613,6 +672,9 @@ enum nvme_opcode { · 88 unmodified lines
613672 nvme_cmd_resv_report = 0x0e,
614673 nvme_cmd_resv_acquire = 0x11,
615674 nvme_cmd_resv_release = 0x15,
675+ nvme_cmd_zone_mgmt_send = 0x79,
676+ nvme_cmd_zone_mgmt_recv = 0x7a,
677+ nvme_cmd_zone_append = 0x7d,
616678 };
617679
618680 #define nvme_opcode_name(opcode) { opcode, #opcode }
@@ -751,6 +813,7 @@ struct nvme_rw_command { · 132 unmodified lines
751813 enum {
752814 NVME_RW_LR = 1 << 15,
753815 NVME_RW_FUA = 1 << 14,
816+ NVME_RW_APPEND_PIREMAP = 1 << 9,
754817 NVME_RW_DSM_FREQ_UNSPEC = 0,
755818 NVME_RW_DSM_FREQ_TYPICAL = 1,
756819 NVME_RW_DSM_FREQ_RARE = 2,
@@ -816,6 +879,53 @@ struct nvme_write_zeroes_cmd { · 59 unmodified lines
816879 __le16 appmask;
817880 };
818881
882+enum nvme_zone_mgmt_action {
883+ NVME_ZONE_CLOSE = 0x1,
884+ NVME_ZONE_FINISH = 0x2,
885+ NVME_ZONE_OPEN = 0x3,
886+ NVME_ZONE_RESET = 0x4,
887+ NVME_ZONE_OFFLINE = 0x5,
888+ NVME_ZONE_SET_DESC_EXT = 0x10,
889+};
890+
891+struct nvme_zone_mgmt_send_cmd {
892+ __u8 opcode;
893+ __u8 flags;
894+ __u16 command_id;
895+ __le32 nsid;
896+ __le32 cdw2[2];
897+ __le64 metadata;
898+ union nvme_data_ptr dptr;
899+ __le64 slba;
900+ __le32 cdw12;
901+ __u8 zsa;
902+ __u8 select_all;
903+ __u8 rsvd13[2];
904+ __le32 cdw14[2];
905+};
906+
907+struct nvme_zone_mgmt_recv_cmd {
908+ __u8 opcode;
909+ __u8 flags;
910+ __u16 command_id;
911+ __le32 nsid;
912+ __le64 rsvd2[2];
913+ union nvme_data_ptr dptr;
914+ __le64 slba;
915+ __le32 numd;
916+ __u8 zra;
917+ __u8 zrasf;
918+ __u8 pr;
919+ __u8 rsvd13;
920+ __le32 cdw14[2];
921+};
922+
923+enum {
924+ NVME_ZRA_ZONE_REPORT = 0,
925+ NVME_ZRASF_ZONE_REPORT_ALL = 0,
926+ NVME_REPORT_ZONE_PARTIAL = 1,
927+};
928+
819929 /* Features */
820930
821931 enum {
@@ -972,7 +1082,9 @@ struct nvme_identify { · 150 unmodified lines
9721082 __u8 cns;
9731083 __u8 rsvd3;
9741084 __le16 ctrlid;
975− __u32 rsvd11[5];
1085+ __u8 rsvd11[3];
1086+ __u8 csi;
1087+ __u32 rsvd12[4];
9761088 };
9771089
9781090 #define NVME_IDENTIFY_DATA_SIZE 4096
@@ -1086,7 +1198,9 @@ struct nvme_get_log_page_command { · 107 unmodified lines
10861198 };
10871199 __le64 lpo;
10881200 };
1089− __u32 rsvd14[2];
1201+ __u8 rsvd14[3];
1202+ __u8 csi;
1203+ __u32 rsvd15;
10901204 };
10911205
10921206 struct nvme_directive_cmd {
@@ -1283,6 +1397,8 @@ struct nvme_command { · 190 unmodified lines
12831397 struct nvme_format_cmd format;
12841398 struct nvme_dsm_cmd dsm;
12851399 struct nvme_write_zeroes_cmd write_zeroes;
1400+ struct nvme_zone_mgmt_send_cmd zms;
1401+ struct nvme_zone_mgmt_recv_cmd zmr;
12861402 struct nvme_abort_cmd abort;
12871403 struct nvme_get_log_page_command get_log_page;
12881404 struct nvmf_common_command fabrics;
@@ -1416,6 +1532,18 @@ enum { · 127 unmodified lines
14161532 NVME_SC_DISCOVERY_RESTART = 0x190,
14171533 NVME_SC_AUTH_REQUIRED = 0x191,
14181534
1535+ /*
1536+ * I/O Command Set Specific - Zoned commands:
1537+ */
1538+ NVME_SC_ZONE_BOUNDARY_ERROR = 0x1b8,
1539+ NVME_SC_ZONE_FULL = 0x1b9,
1540+ NVME_SC_ZONE_READ_ONLY = 0x1ba,
1541+ NVME_SC_ZONE_OFFLINE = 0x1bb,
1542+ NVME_SC_ZONE_INVALID_WRITE = 0x1bc,
1543+ NVME_SC_ZONE_TOO_MANY_ACTIVE = 0x1bd,
1544+ NVME_SC_ZONE_TOO_MANY_OPEN = 0x1be,
1545+ NVME_SC_ZONE_INVALID_TRANSITION = 0x1bf,
1546+
14191547 /*
14201548 * Media and Data Integrity Errors:
14211549 */