@@ -925,6 +925,29 @@ static int nvme_getgeo(struct block_device *bdev, struct hd_geometry *geo)
925925}
926926
927927#ifdef CONFIG_BLK_DEV_INTEGRITY
928+ static void nvme_prep_integrity (struct gendisk * disk , struct nvme_id_ns * id ,
929+ u16 bs )
930+ {
931+ struct nvme_ns * ns = disk -> private_data ;
932+ u16 old_ms = ns -> ms ;
933+ u8 pi_type = 0 ;
934+
935+ ns -> ms = le16_to_cpu (id -> lbaf [id -> flbas & NVME_NS_FLBAS_LBA_MASK ].ms );
936+ ns -> ext = ns -> ms && (id -> flbas & NVME_NS_FLBAS_META_EXT );
937+
938+ /* PI implementation requires metadata equal t10 pi tuple size */
939+ if (ns -> ms == sizeof (struct t10_pi_tuple ))
940+ pi_type = id -> dps & NVME_NS_DPS_PI_MASK ;
941+
942+ if (blk_get_integrity (disk ) &&
943+ (ns -> pi_type != pi_type || ns -> ms != old_ms ||
944+ bs != queue_logical_block_size (disk -> queue ) ||
945+ (ns -> ms && ns -> ext )))
946+ blk_integrity_unregister (disk );
947+
948+ ns -> pi_type = pi_type ;
949+ }
950+
928951static void nvme_init_integrity (struct nvme_ns * ns )
929952{
930953 struct blk_integrity integrity ;
@@ -951,6 +974,10 @@ static void nvme_init_integrity(struct nvme_ns *ns)
951974 blk_queue_max_integrity_segments (ns -> queue , 1 );
952975}
953976#else
977+ static void nvme_prep_integrity (struct gendisk * disk , struct nvme_id_ns * id ,
978+ u16 bs )
979+ {
980+ }
954981static void nvme_init_integrity (struct nvme_ns * ns )
955982{
956983}
@@ -997,37 +1024,22 @@ static int nvme_revalidate_ns(struct nvme_ns *ns, struct nvme_id_ns **id)
9971024static void __nvme_revalidate_disk (struct gendisk * disk , struct nvme_id_ns * id )
9981025{
9991026 struct nvme_ns * ns = disk -> private_data ;
1000- u8 lbaf , pi_type ;
1001- u16 old_ms ;
1002- unsigned short bs ;
1003-
1004- old_ms = ns -> ms ;
1005- lbaf = id -> flbas & NVME_NS_FLBAS_LBA_MASK ;
1006- ns -> lba_shift = id -> lbaf [lbaf ].ds ;
1007- ns -> ms = le16_to_cpu (id -> lbaf [lbaf ].ms );
1008- ns -> ext = ns -> ms && (id -> flbas & NVME_NS_FLBAS_META_EXT );
1027+ u16 bs ;
10091028
10101029 /*
10111030 * If identify namespace failed, use default 512 byte block size so
10121031 * block layer can use before failing read/write for 0 capacity.
10131032 */
1033+ ns -> lba_shift = id -> lbaf [id -> flbas & NVME_NS_FLBAS_LBA_MASK ].ds ;
10141034 if (ns -> lba_shift == 0 )
10151035 ns -> lba_shift = 9 ;
10161036 bs = 1 << ns -> lba_shift ;
1017- /* XXX: PI implementation requires metadata equal t10 pi tuple size */
1018- pi_type = ns -> ms == sizeof (struct t10_pi_tuple ) ?
1019- id -> dps & NVME_NS_DPS_PI_MASK : 0 ;
10201037
10211038 blk_mq_freeze_queue (disk -> queue );
1022- if (blk_get_integrity (disk ) && (ns -> pi_type != pi_type ||
1023- ns -> ms != old_ms ||
1024- bs != queue_logical_block_size (disk -> queue ) ||
1025- (ns -> ms && ns -> ext )))
1026- blk_integrity_unregister (disk );
10271039
1028- ns -> pi_type = pi_type ;
1040+ if (ns -> ctrl -> ops -> flags & NVME_F_METADATA_SUPPORTED )
1041+ nvme_prep_integrity (disk , id , bs );
10291042 blk_queue_logical_block_size (ns -> queue , bs );
1030-
10311043 if (ns -> ms && !blk_get_integrity (disk ) && !ns -> ext )
10321044 nvme_init_integrity (ns );
10331045 if (ns -> ms && !(ns -> ms == 8 && ns -> pi_type ) && !blk_get_integrity (disk ))
@@ -1605,7 +1617,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
16051617 }
16061618 memcpy (ctrl -> psd , id -> psd , sizeof (ctrl -> psd ));
16071619
1608- if (ctrl -> ops -> is_fabrics ) {
1620+ if (ctrl -> ops -> flags & NVME_F_FABRICS ) {
16091621 ctrl -> icdoff = le16_to_cpu (id -> icdoff );
16101622 ctrl -> ioccsz = le32_to_cpu (id -> ioccsz );
16111623 ctrl -> iorcsz = le32_to_cpu (id -> iorcsz );
@@ -2098,7 +2110,6 @@ static void nvme_ns_remove(struct nvme_ns *ns)
20982110 if (ns -> ndev )
20992111 nvme_nvm_unregister_sysfs (ns );
21002112 del_gendisk (ns -> disk );
2101- blk_mq_abort_requeue_list (ns -> queue );
21022113 blk_cleanup_queue (ns -> queue );
21032114 }
21042115
@@ -2436,8 +2447,16 @@ void nvme_kill_queues(struct nvme_ctrl *ctrl)
24362447 continue ;
24372448 revalidate_disk (ns -> disk );
24382449 blk_set_queue_dying (ns -> queue );
2439- blk_mq_abort_requeue_list (ns -> queue );
2440- blk_mq_start_stopped_hw_queues (ns -> queue , true);
2450+
2451+ /*
2452+ * Forcibly start all queues to avoid having stuck requests.
2453+ * Note that we must ensure the queues are not stopped
2454+ * when the final removal happens.
2455+ */
2456+ blk_mq_start_hw_queues (ns -> queue );
2457+
2458+ /* draining requests in requeue list */
2459+ blk_mq_kick_requeue_list (ns -> queue );
24412460 }
24422461 mutex_unlock (& ctrl -> namespaces_mutex );
24432462}
0 commit comments