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 ...
This commit is contained in:
commit
4f43d64807
39 changed files with 1114 additions and 202 deletions
|
|
@ -513,6 +513,8 @@ struct request_queue {
|
|||
unsigned int nr_zones;
|
||||
unsigned long *conv_zones_bitmap;
|
||||
unsigned long *seq_zones_wlock;
|
||||
unsigned int max_open_zones;
|
||||
unsigned int max_active_zones;
|
||||
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||
|
||||
/*
|
||||
|
|
@ -722,6 +724,28 @@ static inline bool blk_queue_zone_is_seq(struct request_queue *q,
|
|||
return true;
|
||||
return !test_bit(blk_queue_zone_no(q, sector), q->conv_zones_bitmap);
|
||||
}
|
||||
|
||||
static inline void blk_queue_max_open_zones(struct request_queue *q,
|
||||
unsigned int max_open_zones)
|
||||
{
|
||||
q->max_open_zones = max_open_zones;
|
||||
}
|
||||
|
||||
static inline unsigned int queue_max_open_zones(const struct request_queue *q)
|
||||
{
|
||||
return q->max_open_zones;
|
||||
}
|
||||
|
||||
static inline void blk_queue_max_active_zones(struct request_queue *q,
|
||||
unsigned int max_active_zones)
|
||||
{
|
||||
q->max_active_zones = max_active_zones;
|
||||
}
|
||||
|
||||
static inline unsigned int queue_max_active_zones(const struct request_queue *q)
|
||||
{
|
||||
return q->max_active_zones;
|
||||
}
|
||||
#else /* CONFIG_BLK_DEV_ZONED */
|
||||
static inline unsigned int blk_queue_nr_zones(struct request_queue *q)
|
||||
{
|
||||
|
|
@ -737,6 +761,14 @@ static inline unsigned int blk_queue_zone_no(struct request_queue *q,
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline unsigned int queue_max_open_zones(const struct request_queue *q)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline unsigned int queue_max_active_zones(const struct request_queue *q)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||
|
||||
static inline bool rq_is_sync(struct request *rq)
|
||||
|
|
@ -1519,6 +1551,24 @@ static inline sector_t bdev_zone_sectors(struct block_device *bdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned int bdev_max_open_zones(struct block_device *bdev)
|
||||
{
|
||||
struct request_queue *q = bdev_get_queue(bdev);
|
||||
|
||||
if (q)
|
||||
return queue_max_open_zones(q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned int bdev_max_active_zones(struct block_device *bdev)
|
||||
{
|
||||
struct request_queue *q = bdev_get_queue(bdev);
|
||||
|
||||
if (q)
|
||||
return queue_max_active_zones(q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int queue_dma_alignment(const struct request_queue *q)
|
||||
{
|
||||
return q ? q->dma_alignment : 511;
|
||||
|
|
|
|||
|
|
@ -132,6 +132,7 @@ enum {
|
|||
#define NVME_CAP_TIMEOUT(cap) (((cap) >> 24) & 0xff)
|
||||
#define NVME_CAP_STRIDE(cap) (((cap) >> 32) & 0xf)
|
||||
#define NVME_CAP_NSSRC(cap) (((cap) >> 36) & 0x1)
|
||||
#define NVME_CAP_CSS(cap) (((cap) >> 37) & 0xff)
|
||||
#define NVME_CAP_MPSMIN(cap) (((cap) >> 48) & 0xf)
|
||||
#define NVME_CAP_MPSMAX(cap) (((cap) >> 52) & 0xf)
|
||||
|
||||
|
|
@ -162,7 +163,6 @@ enum {
|
|||
|
||||
enum {
|
||||
NVME_CC_ENABLE = 1 << 0,
|
||||
NVME_CC_CSS_NVM = 0 << 4,
|
||||
NVME_CC_EN_SHIFT = 0,
|
||||
NVME_CC_CSS_SHIFT = 4,
|
||||
NVME_CC_MPS_SHIFT = 7,
|
||||
|
|
@ -170,6 +170,9 @@ enum {
|
|||
NVME_CC_SHN_SHIFT = 14,
|
||||
NVME_CC_IOSQES_SHIFT = 16,
|
||||
NVME_CC_IOCQES_SHIFT = 20,
|
||||
NVME_CC_CSS_NVM = 0 << NVME_CC_CSS_SHIFT,
|
||||
NVME_CC_CSS_CSI = 6 << NVME_CC_CSS_SHIFT,
|
||||
NVME_CC_CSS_MASK = 7 << NVME_CC_CSS_SHIFT,
|
||||
NVME_CC_AMS_RR = 0 << NVME_CC_AMS_SHIFT,
|
||||
NVME_CC_AMS_WRRU = 1 << NVME_CC_AMS_SHIFT,
|
||||
NVME_CC_AMS_VS = 7 << NVME_CC_AMS_SHIFT,
|
||||
|
|
@ -179,6 +182,8 @@ enum {
|
|||
NVME_CC_SHN_MASK = 3 << NVME_CC_SHN_SHIFT,
|
||||
NVME_CC_IOSQES = NVME_NVM_IOSQES << NVME_CC_IOSQES_SHIFT,
|
||||
NVME_CC_IOCQES = NVME_NVM_IOCQES << NVME_CC_IOCQES_SHIFT,
|
||||
NVME_CAP_CSS_NVM = 1 << 0,
|
||||
NVME_CAP_CSS_CSI = 1 << 6,
|
||||
NVME_CSTS_RDY = 1 << 0,
|
||||
NVME_CSTS_CFS = 1 << 1,
|
||||
NVME_CSTS_NSSRO = 1 << 4,
|
||||
|
|
@ -369,11 +374,37 @@ struct nvme_id_ns {
|
|||
__u8 vs[3712];
|
||||
};
|
||||
|
||||
struct nvme_zns_lbafe {
|
||||
__le64 zsze;
|
||||
__u8 zdes;
|
||||
__u8 rsvd9[7];
|
||||
};
|
||||
|
||||
struct nvme_id_ns_zns {
|
||||
__le16 zoc;
|
||||
__le16 ozcs;
|
||||
__le32 mar;
|
||||
__le32 mor;
|
||||
__le32 rrl;
|
||||
__le32 frl;
|
||||
__u8 rsvd20[2796];
|
||||
struct nvme_zns_lbafe lbafe[16];
|
||||
__u8 rsvd3072[768];
|
||||
__u8 vs[256];
|
||||
};
|
||||
|
||||
struct nvme_id_ctrl_zns {
|
||||
__u8 zasl;
|
||||
__u8 rsvd1[4095];
|
||||
};
|
||||
|
||||
enum {
|
||||
NVME_ID_CNS_NS = 0x00,
|
||||
NVME_ID_CNS_CTRL = 0x01,
|
||||
NVME_ID_CNS_NS_ACTIVE_LIST = 0x02,
|
||||
NVME_ID_CNS_NS_DESC_LIST = 0x03,
|
||||
NVME_ID_CNS_CS_NS = 0x05,
|
||||
NVME_ID_CNS_CS_CTRL = 0x06,
|
||||
NVME_ID_CNS_NS_PRESENT_LIST = 0x10,
|
||||
NVME_ID_CNS_NS_PRESENT = 0x11,
|
||||
NVME_ID_CNS_CTRL_NS_LIST = 0x12,
|
||||
|
|
@ -383,6 +414,11 @@ enum {
|
|||
NVME_ID_CNS_UUID_LIST = 0x17,
|
||||
};
|
||||
|
||||
enum {
|
||||
NVME_CSI_NVM = 0,
|
||||
NVME_CSI_ZNS = 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
NVME_DIR_IDENTIFY = 0x00,
|
||||
NVME_DIR_STREAMS = 0x01,
|
||||
|
|
@ -435,11 +471,13 @@ struct nvme_ns_id_desc {
|
|||
#define NVME_NIDT_EUI64_LEN 8
|
||||
#define NVME_NIDT_NGUID_LEN 16
|
||||
#define NVME_NIDT_UUID_LEN 16
|
||||
#define NVME_NIDT_CSI_LEN 1
|
||||
|
||||
enum {
|
||||
NVME_NIDT_EUI64 = 0x01,
|
||||
NVME_NIDT_NGUID = 0x02,
|
||||
NVME_NIDT_UUID = 0x03,
|
||||
NVME_NIDT_CSI = 0x04,
|
||||
};
|
||||
|
||||
struct nvme_smart_log {
|
||||
|
|
@ -519,6 +557,27 @@ struct nvme_ana_rsp_hdr {
|
|||
__le16 rsvd10[3];
|
||||
};
|
||||
|
||||
struct nvme_zone_descriptor {
|
||||
__u8 zt;
|
||||
__u8 zs;
|
||||
__u8 za;
|
||||
__u8 rsvd3[5];
|
||||
__le64 zcap;
|
||||
__le64 zslba;
|
||||
__le64 wp;
|
||||
__u8 rsvd32[32];
|
||||
};
|
||||
|
||||
enum {
|
||||
NVME_ZONE_TYPE_SEQWRITE_REQ = 0x2,
|
||||
};
|
||||
|
||||
struct nvme_zone_report {
|
||||
__le64 nr_zones;
|
||||
__u8 resv8[56];
|
||||
struct nvme_zone_descriptor entries[];
|
||||
};
|
||||
|
||||
enum {
|
||||
NVME_SMART_CRIT_SPARE = 1 << 0,
|
||||
NVME_SMART_CRIT_TEMPERATURE = 1 << 1,
|
||||
|
|
@ -613,6 +672,9 @@ enum nvme_opcode {
|
|||
nvme_cmd_resv_report = 0x0e,
|
||||
nvme_cmd_resv_acquire = 0x11,
|
||||
nvme_cmd_resv_release = 0x15,
|
||||
nvme_cmd_zone_mgmt_send = 0x79,
|
||||
nvme_cmd_zone_mgmt_recv = 0x7a,
|
||||
nvme_cmd_zone_append = 0x7d,
|
||||
};
|
||||
|
||||
#define nvme_opcode_name(opcode) { opcode, #opcode }
|
||||
|
|
@ -751,6 +813,7 @@ struct nvme_rw_command {
|
|||
enum {
|
||||
NVME_RW_LR = 1 << 15,
|
||||
NVME_RW_FUA = 1 << 14,
|
||||
NVME_RW_APPEND_PIREMAP = 1 << 9,
|
||||
NVME_RW_DSM_FREQ_UNSPEC = 0,
|
||||
NVME_RW_DSM_FREQ_TYPICAL = 1,
|
||||
NVME_RW_DSM_FREQ_RARE = 2,
|
||||
|
|
@ -816,6 +879,53 @@ struct nvme_write_zeroes_cmd {
|
|||
__le16 appmask;
|
||||
};
|
||||
|
||||
enum nvme_zone_mgmt_action {
|
||||
NVME_ZONE_CLOSE = 0x1,
|
||||
NVME_ZONE_FINISH = 0x2,
|
||||
NVME_ZONE_OPEN = 0x3,
|
||||
NVME_ZONE_RESET = 0x4,
|
||||
NVME_ZONE_OFFLINE = 0x5,
|
||||
NVME_ZONE_SET_DESC_EXT = 0x10,
|
||||
};
|
||||
|
||||
struct nvme_zone_mgmt_send_cmd {
|
||||
__u8 opcode;
|
||||
__u8 flags;
|
||||
__u16 command_id;
|
||||
__le32 nsid;
|
||||
__le32 cdw2[2];
|
||||
__le64 metadata;
|
||||
union nvme_data_ptr dptr;
|
||||
__le64 slba;
|
||||
__le32 cdw12;
|
||||
__u8 zsa;
|
||||
__u8 select_all;
|
||||
__u8 rsvd13[2];
|
||||
__le32 cdw14[2];
|
||||
};
|
||||
|
||||
struct nvme_zone_mgmt_recv_cmd {
|
||||
__u8 opcode;
|
||||
__u8 flags;
|
||||
__u16 command_id;
|
||||
__le32 nsid;
|
||||
__le64 rsvd2[2];
|
||||
union nvme_data_ptr dptr;
|
||||
__le64 slba;
|
||||
__le32 numd;
|
||||
__u8 zra;
|
||||
__u8 zrasf;
|
||||
__u8 pr;
|
||||
__u8 rsvd13;
|
||||
__le32 cdw14[2];
|
||||
};
|
||||
|
||||
enum {
|
||||
NVME_ZRA_ZONE_REPORT = 0,
|
||||
NVME_ZRASF_ZONE_REPORT_ALL = 0,
|
||||
NVME_REPORT_ZONE_PARTIAL = 1,
|
||||
};
|
||||
|
||||
/* Features */
|
||||
|
||||
enum {
|
||||
|
|
@ -972,7 +1082,9 @@ struct nvme_identify {
|
|||
__u8 cns;
|
||||
__u8 rsvd3;
|
||||
__le16 ctrlid;
|
||||
__u32 rsvd11[5];
|
||||
__u8 rsvd11[3];
|
||||
__u8 csi;
|
||||
__u32 rsvd12[4];
|
||||
};
|
||||
|
||||
#define NVME_IDENTIFY_DATA_SIZE 4096
|
||||
|
|
@ -1086,7 +1198,9 @@ struct nvme_get_log_page_command {
|
|||
};
|
||||
__le64 lpo;
|
||||
};
|
||||
__u32 rsvd14[2];
|
||||
__u8 rsvd14[3];
|
||||
__u8 csi;
|
||||
__u32 rsvd15;
|
||||
};
|
||||
|
||||
struct nvme_directive_cmd {
|
||||
|
|
@ -1283,6 +1397,8 @@ struct nvme_command {
|
|||
struct nvme_format_cmd format;
|
||||
struct nvme_dsm_cmd dsm;
|
||||
struct nvme_write_zeroes_cmd write_zeroes;
|
||||
struct nvme_zone_mgmt_send_cmd zms;
|
||||
struct nvme_zone_mgmt_recv_cmd zmr;
|
||||
struct nvme_abort_cmd abort;
|
||||
struct nvme_get_log_page_command get_log_page;
|
||||
struct nvmf_common_command fabrics;
|
||||
|
|
@ -1416,6 +1532,18 @@ enum {
|
|||
NVME_SC_DISCOVERY_RESTART = 0x190,
|
||||
NVME_SC_AUTH_REQUIRED = 0x191,
|
||||
|
||||
/*
|
||||
* I/O Command Set Specific - Zoned commands:
|
||||
*/
|
||||
NVME_SC_ZONE_BOUNDARY_ERROR = 0x1b8,
|
||||
NVME_SC_ZONE_FULL = 0x1b9,
|
||||
NVME_SC_ZONE_READ_ONLY = 0x1ba,
|
||||
NVME_SC_ZONE_OFFLINE = 0x1bb,
|
||||
NVME_SC_ZONE_INVALID_WRITE = 0x1bc,
|
||||
NVME_SC_ZONE_TOO_MANY_ACTIVE = 0x1bd,
|
||||
NVME_SC_ZONE_TOO_MANY_OPEN = 0x1be,
|
||||
NVME_SC_ZONE_INVALID_TRANSITION = 0x1bf,
|
||||
|
||||
/*
|
||||
* Media and Data Integrity Errors:
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue