Commit 58330d6a authored by Martin K. Petersen's avatar Martin K. Petersen
Browse files

Merge branch '6.5/scsi-fixes' into 6.6/scsi-staging



Pull in the fixes tree for a commit that missed 6.5. Also resolve a
trivial merge conflict in fnic.

* 6.5/scsi-fixes: (36 commits)
  scsi: storvsc: Handle additional SRB status values
  scsi: snic: Fix double free in snic_tgt_create()
  scsi: core: raid_class: Remove raid_component_add()
  scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW major version > 5
  scsi: ufs: mcq: Fix the search/wrap around logic
  scsi: qedf: Fix firmware halt over suspend and resume
  scsi: qedi: Fix firmware halt over suspend and resume
  scsi: qedi: Fix potential deadlock on &qedi_percpu->p_work_lock
  scsi: lpfc: Remove reftag check in DIF paths
  scsi: ufs: renesas: Fix private allocation
  scsi: snic: Fix possible memory leak if device_add() fails
  scsi: core: Fix possible memory leak if device_add() fails
  scsi: core: Fix legacy /proc parsing buffer overflow
  scsi: 53c700: Check that command slot is not NULL
  scsi: fnic: Replace return codes in fnic_clean_pending_aborts()
  scsi: storvsc: Fix handling of virtual Fibre Channel timeouts
  scsi: pm80xx: Fix error return code in pm8001_pci_probe()
  scsi: zfcp: Defer fc_rport blocking until after ADISC response
  scsi: storvsc: Limit max_sectors for virtual Fibre Channel devices
  scsi: sg: Fix checking return value of blk_get_queue()
  ...

Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents 15924b05 812fe642
Loading
Loading
Loading
Loading
+38 −38
Original line number Diff line number Diff line
@@ -994,7 +994,7 @@ Description: This file shows the amount of physical memory needed
What:		/sys/bus/platform/drivers/ufshcd/*/rpm_lvl
What:		/sys/bus/platform/devices/*.ufs/rpm_lvl
Date:		September 2014
Contact:	Subhash Jadavani <subhashj@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This entry could be used to set or show the UFS device
		runtime power management level. The current driver
		implementation supports 7 levels with next target states:
@@ -1021,7 +1021,7 @@ Description: This entry could be used to set or show the UFS device
What:		/sys/bus/platform/drivers/ufshcd/*/rpm_target_dev_state
What:		/sys/bus/platform/devices/*.ufs/rpm_target_dev_state
Date:		February 2018
Contact:	Subhash Jadavani <subhashj@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This entry shows the target power mode of an UFS device
		for the chosen runtime power management level.

@@ -1030,7 +1030,7 @@ Description: This entry shows the target power mode of an UFS device
What:		/sys/bus/platform/drivers/ufshcd/*/rpm_target_link_state
What:		/sys/bus/platform/devices/*.ufs/rpm_target_link_state
Date:		February 2018
Contact:	Subhash Jadavani <subhashj@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This entry shows the target state of an UFS UIC link
		for the chosen runtime power management level.

@@ -1039,7 +1039,7 @@ Description: This entry shows the target state of an UFS UIC link
What:		/sys/bus/platform/drivers/ufshcd/*/spm_lvl
What:		/sys/bus/platform/devices/*.ufs/spm_lvl
Date:		September 2014
Contact:	Subhash Jadavani <subhashj@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This entry could be used to set or show the UFS device
		system power management level. The current driver
		implementation supports 7 levels with next target states:
@@ -1066,7 +1066,7 @@ Description: This entry could be used to set or show the UFS device
What:		/sys/bus/platform/drivers/ufshcd/*/spm_target_dev_state
What:		/sys/bus/platform/devices/*.ufs/spm_target_dev_state
Date:		February 2018
Contact:	Subhash Jadavani <subhashj@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This entry shows the target power mode of an UFS device
		for the chosen system power management level.

@@ -1075,7 +1075,7 @@ Description: This entry shows the target power mode of an UFS device
What:		/sys/bus/platform/drivers/ufshcd/*/spm_target_link_state
What:		/sys/bus/platform/devices/*.ufs/spm_target_link_state
Date:		February 2018
Contact:	Subhash Jadavani <subhashj@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This entry shows the target state of an UFS UIC link
		for the chosen system power management level.

@@ -1084,7 +1084,7 @@ Description: This entry shows the target state of an UFS UIC link
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/monitor_enable
What:		/sys/bus/platform/devices/*.ufs/monitor/monitor_enable
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the status of performance monitor enablement
		and it can be used to start/stop the monitor. When the monitor
		is stopped, the performance data collected is also cleared.
@@ -1092,7 +1092,7 @@ Description: This file shows the status of performance monitor enablement
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/monitor_chunk_size
What:		/sys/bus/platform/devices/*.ufs/monitor/monitor_chunk_size
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file tells the monitor to focus on requests transferring
		data of specific chunk size (in Bytes). 0 means any chunk size.
		It can only be changed when monitor is disabled.
@@ -1100,7 +1100,7 @@ Description: This file tells the monitor to focus on requests transferring
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/read_total_sectors
What:		/sys/bus/platform/devices/*.ufs/monitor/read_total_sectors
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows how many sectors (in 512 Bytes) have been
		sent from device to host after monitor gets started.

@@ -1109,7 +1109,7 @@ Description: This file shows how many sectors (in 512 Bytes) have been
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/read_total_busy
What:		/sys/bus/platform/devices/*.ufs/monitor/read_total_busy
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows how long (in micro seconds) has been spent
		sending data from device to host after monitor gets started.

@@ -1118,7 +1118,7 @@ Description: This file shows how long (in micro seconds) has been spent
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/read_nr_requests
What:		/sys/bus/platform/devices/*.ufs/monitor/read_nr_requests
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows how many read requests have been sent after
		monitor gets started.

@@ -1127,7 +1127,7 @@ Description: This file shows how many read requests have been sent after
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_max
What:		/sys/bus/platform/devices/*.ufs/monitor/read_req_latency_max
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the maximum latency (in micro seconds) of
		read requests after monitor gets started.

@@ -1136,7 +1136,7 @@ Description: This file shows the maximum latency (in micro seconds) of
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_min
What:		/sys/bus/platform/devices/*.ufs/monitor/read_req_latency_min
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the minimum latency (in micro seconds) of
		read requests after monitor gets started.

@@ -1145,7 +1145,7 @@ Description: This file shows the minimum latency (in micro seconds) of
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_avg
What:		/sys/bus/platform/devices/*.ufs/monitor/read_req_latency_avg
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the average latency (in micro seconds) of
		read requests after monitor gets started.

@@ -1154,7 +1154,7 @@ Description: This file shows the average latency (in micro seconds) of
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_sum
What:		/sys/bus/platform/devices/*.ufs/monitor/read_req_latency_sum
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the total latency (in micro seconds) of
		read requests sent after monitor gets started.

@@ -1163,7 +1163,7 @@ Description: This file shows the total latency (in micro seconds) of
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/write_total_sectors
What:		/sys/bus/platform/devices/*.ufs/monitor/write_total_sectors
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows how many sectors (in 512 Bytes) have been sent
		from host to device after monitor gets started.

@@ -1172,7 +1172,7 @@ Description: This file shows how many sectors (in 512 Bytes) have been sent
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/write_total_busy
What:		/sys/bus/platform/devices/*.ufs/monitor/write_total_busy
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows how long (in micro seconds) has been spent
		sending data from host to device after monitor gets started.

@@ -1181,7 +1181,7 @@ Description: This file shows how long (in micro seconds) has been spent
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/write_nr_requests
What:		/sys/bus/platform/devices/*.ufs/monitor/write_nr_requests
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows how many write requests have been sent after
		monitor gets started.

@@ -1190,7 +1190,7 @@ Description: This file shows how many write requests have been sent after
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_max
What:		/sys/bus/platform/devices/*.ufs/monitor/write_req_latency_max
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the maximum latency (in micro seconds) of write
		requests after monitor gets started.

@@ -1199,7 +1199,7 @@ Description: This file shows the maximum latency (in micro seconds) of write
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_min
What:		/sys/bus/platform/devices/*.ufs/monitor/write_req_latency_min
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the minimum latency (in micro seconds) of write
		requests after monitor gets started.

@@ -1208,7 +1208,7 @@ Description: This file shows the minimum latency (in micro seconds) of write
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_avg
What:		/sys/bus/platform/devices/*.ufs/monitor/write_req_latency_avg
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the average latency (in micro seconds) of write
		requests after monitor gets started.

@@ -1217,7 +1217,7 @@ Description: This file shows the average latency (in micro seconds) of write
What:		/sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_sum
What:		/sys/bus/platform/devices/*.ufs/monitor/write_req_latency_sum
Date:		January 2021
Contact:	Can Guo <cang@codeaurora.org>
Contact:	Can Guo <quic_cang@quicinc.com>
Description:	This file shows the total latency (in micro seconds) of write
		requests after monitor gets started.

@@ -1226,7 +1226,7 @@ Description: This file shows the total latency (in micro seconds) of write
What:		/sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_presv_us_en
What:		/sys/bus/platform/devices/*.ufs/device_descriptor/wb_presv_us_en
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows if preserve user-space was configured

		The file is read only.
@@ -1234,7 +1234,7 @@ Description: This entry shows if preserve user-space was configured
What:		/sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_shared_alloc_units
What:		/sys/bus/platform/devices/*.ufs/device_descriptor/wb_shared_alloc_units
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the shared allocated units of WB buffer

		The file is read only.
@@ -1242,7 +1242,7 @@ Description: This entry shows the shared allocated units of WB buffer
What:		/sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_type
What:		/sys/bus/platform/devices/*.ufs/device_descriptor/wb_type
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the configured WB type.
		0x1 for shared buffer mode. 0x0 for dedicated buffer mode.

@@ -1251,7 +1251,7 @@ Description: This entry shows the configured WB type.
What:		/sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_buff_cap_adj
What:		/sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_buff_cap_adj
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the total user-space decrease in shared
		buffer mode.
		The value of this parameter is 3 for TLC NAND when SLC mode
@@ -1262,7 +1262,7 @@ Description: This entry shows the total user-space decrease in shared
What:		/sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_max_alloc_units
What:		/sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_max_alloc_units
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the Maximum total WriteBooster Buffer size
		which is supported by the entire device.

@@ -1271,7 +1271,7 @@ Description: This entry shows the Maximum total WriteBooster Buffer size
What:		/sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_max_wb_luns
What:		/sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_max_wb_luns
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the maximum number of luns that can support
		WriteBooster.

@@ -1280,7 +1280,7 @@ Description: This entry shows the maximum number of luns that can support
What:		/sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_sup_red_type
What:		/sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_sup_red_type
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	The supportability of user space reduction mode
		and preserve user space mode.
		00h: WriteBooster Buffer can be configured only in
@@ -1295,7 +1295,7 @@ Description: The supportability of user space reduction mode
What:		/sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_sup_wb_type
What:		/sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_sup_wb_type
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	The supportability of WriteBooster Buffer type.

		===  ==========================================================
@@ -1310,7 +1310,7 @@ Description: The supportability of WriteBooster Buffer type.
What:		/sys/bus/platform/drivers/ufshcd/*/flags/wb_enable
What:		/sys/bus/platform/devices/*.ufs/flags/wb_enable
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the status of WriteBooster.

		== ============================
@@ -1323,7 +1323,7 @@ Description: This entry shows the status of WriteBooster.
What:		/sys/bus/platform/drivers/ufshcd/*/flags/wb_flush_en
What:		/sys/bus/platform/devices/*.ufs/flags/wb_flush_en
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows if flush is enabled.

		== =================================
@@ -1336,7 +1336,7 @@ Description: This entry shows if flush is enabled.
What:		/sys/bus/platform/drivers/ufshcd/*/flags/wb_flush_during_h8
What:		/sys/bus/platform/devices/*.ufs/flags/wb_flush_during_h8
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	Flush WriteBooster Buffer during hibernate state.

		== =================================================
@@ -1351,7 +1351,7 @@ Description: Flush WriteBooster Buffer during hibernate state.
What:		/sys/bus/platform/drivers/ufshcd/*/attributes/wb_avail_buf
What:		/sys/bus/platform/devices/*.ufs/attributes/wb_avail_buf
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the amount of unused WriteBooster buffer
		available.

@@ -1360,7 +1360,7 @@ Description: This entry shows the amount of unused WriteBooster buffer
What:		/sys/bus/platform/drivers/ufshcd/*/attributes/wb_cur_buf
What:		/sys/bus/platform/devices/*.ufs/attributes/wb_cur_buf
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the amount of unused current buffer.

		The file is read only.
@@ -1368,7 +1368,7 @@ Description: This entry shows the amount of unused current buffer.
What:		/sys/bus/platform/drivers/ufshcd/*/attributes/wb_flush_status
What:		/sys/bus/platform/devices/*.ufs/attributes/wb_flush_status
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the flush operation status.


@@ -1385,7 +1385,7 @@ Description: This entry shows the flush operation status.
What:		/sys/bus/platform/drivers/ufshcd/*/attributes/wb_life_time_est
What:		/sys/bus/platform/devices/*.ufs/attributes/wb_life_time_est
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows an indication of the WriteBooster Buffer
		lifetime based on the amount of performed program/erase cycles

@@ -1399,7 +1399,7 @@ Description: This entry shows an indication of the WriteBooster Buffer

What:		/sys/class/scsi_device/*/device/unit_descriptor/wb_buf_alloc_units
Date:		June 2020
Contact:	Asutosh Das <asutoshd@codeaurora.org>
Contact:	Asutosh Das <quic_asutoshd@quicinc.com>
Description:	This entry shows the configured size of WriteBooster buffer.
		0400h corresponds to 4GB.

+50 −36
Original line number Diff line number Diff line
@@ -442,7 +442,6 @@ struct blk_revalidate_zone_args {
	unsigned long	*conv_zones_bitmap;
	unsigned long	*seq_zones_wlock;
	unsigned int	nr_zones;
	sector_t	zone_sectors;
	sector_t	sector;
};

@@ -456,40 +455,36 @@ static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx,
	struct gendisk *disk = args->disk;
	struct request_queue *q = disk->queue;
	sector_t capacity = get_capacity(disk);
	sector_t zone_sectors = q->limits.chunk_sectors;

	/* Check for bad zones and holes in the zone report */
	if (zone->start != args->sector) {
		pr_warn("%s: Zone gap at sectors %llu..%llu\n",
			disk->disk_name, args->sector, zone->start);
		return -ENODEV;
	}

	if (zone->start >= capacity || !zone->len) {
		pr_warn("%s: Invalid zone start %llu, length %llu\n",
			disk->disk_name, zone->start, zone->len);
		return -ENODEV;
	}

	/*
	 * All zones must have the same size, with the exception on an eventual
	 * smaller last zone.
	 */
	if (zone->start == 0) {
		if (zone->len == 0 || !is_power_of_2(zone->len)) {
			pr_warn("%s: Invalid zoned device with non power of two zone size (%llu)\n",
				disk->disk_name, zone->len);
			return -ENODEV;
		}

		args->zone_sectors = zone->len;
		args->nr_zones = (capacity + zone->len - 1) >> ilog2(zone->len);
	} else if (zone->start + args->zone_sectors < capacity) {
		if (zone->len != args->zone_sectors) {
	if (zone->start + zone->len < capacity) {
		if (zone->len != zone_sectors) {
			pr_warn("%s: Invalid zoned device with non constant zone size\n",
				disk->disk_name);
			return -ENODEV;
		}
	} else {
		if (zone->len > args->zone_sectors) {
	} else if (zone->len > zone_sectors) {
		pr_warn("%s: Invalid zoned device with larger last zone size\n",
			disk->disk_name);
		return -ENODEV;
	}
	}

	/* Check for holes in the zone report */
	if (zone->start != args->sector) {
		pr_warn("%s: Zone gap at sectors %llu..%llu\n",
			disk->disk_name, args->sector, zone->start);
		return -ENODEV;
	}

	/* Check zone type */
	switch (zone->type) {
@@ -526,11 +521,13 @@ static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx,
 * @disk:	Target disk
 * @update_driver_data:	Callback to update driver data on the frozen disk
 *
 * Helper function for low-level device drivers to (re) allocate and initialize
 * a disk request queue zone bitmaps. This functions should normally be called
 * within the disk ->revalidate method for blk-mq based drivers.  For BIO based
 * drivers only q->nr_zones needs to be updated so that the sysfs exposed value
 * is correct.
 * Helper function for low-level device drivers to check and (re) allocate and
 * initialize a disk request queue zone bitmaps. This functions should normally
 * be called within the disk ->revalidate method for blk-mq based drivers.
 * Before calling this function, the device driver must already have set the
 * device zone size (chunk_sector limit) and the max zone append limit.
 * For BIO based drivers, this function cannot be used. BIO based device drivers
 * only need to set disk->nr_zones so that the sysfs exposed value is correct.
 * If the @update_driver_data callback function is not NULL, the callback is
 * executed with the device request queue frozen after all zones have been
 * checked.
@@ -539,9 +536,9 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
			      void (*update_driver_data)(struct gendisk *disk))
{
	struct request_queue *q = disk->queue;
	struct blk_revalidate_zone_args args = {
		.disk		= disk,
	};
	sector_t zone_sectors = q->limits.chunk_sectors;
	sector_t capacity = get_capacity(disk);
	struct blk_revalidate_zone_args args = { };
	unsigned int noio_flag;
	int ret;

@@ -550,13 +547,31 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
	if (WARN_ON_ONCE(!queue_is_mq(q)))
		return -EIO;

	if (!get_capacity(disk))
		return -EIO;
	if (!capacity)
		return -ENODEV;

	/*
	 * Checks that the device driver indicated a valid zone size and that
	 * the max zone append limit is set.
	 */
	if (!zone_sectors || !is_power_of_2(zone_sectors)) {
		pr_warn("%s: Invalid non power of two zone size (%llu)\n",
			disk->disk_name, zone_sectors);
		return -ENODEV;
	}

	if (!q->limits.max_zone_append_sectors) {
		pr_warn("%s: Invalid 0 maximum zone append limit\n",
			disk->disk_name);
		return -ENODEV;
	}

	/*
	 * Ensure that all memory allocations in this context are done as if
	 * GFP_NOIO was specified.
	 */
	args.disk = disk;
	args.nr_zones = (capacity + zone_sectors - 1) >> ilog2(zone_sectors);
	noio_flag = memalloc_noio_save();
	ret = disk->fops->report_zones(disk, 0, UINT_MAX,
				       blk_revalidate_zone_cb, &args);
@@ -570,7 +585,7 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
	 * If zones where reported, make sure that the entire disk capacity
	 * has been checked.
	 */
	if (ret > 0 && args.sector != get_capacity(disk)) {
	if (ret > 0 && args.sector != capacity) {
		pr_warn("%s: Missing zones from sector %llu\n",
			disk->disk_name, args.sector);
		ret = -ENODEV;
@@ -583,7 +598,6 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
	 */
	blk_mq_freeze_queue(q);
	if (ret > 0) {
		blk_queue_chunk_sectors(q, args.zone_sectors);
		disk->nr_zones = args.nr_zones;
		swap(disk->seq_zones_wlock, args.seq_zones_wlock);
		swap(disk->conv_zones_bitmap, args.conv_zones_bitmap);
+5 −11
Original line number Diff line number Diff line
@@ -162,21 +162,15 @@ int null_register_zoned_dev(struct nullb *nullb)
	disk_set_zoned(nullb->disk, BLK_ZONED_HM);
	blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
	blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE);

	if (queue_is_mq(q)) {
		int ret = blk_revalidate_disk_zones(nullb->disk, NULL);

		if (ret)
			return ret;
	} else {
	blk_queue_chunk_sectors(q, dev->zone_size_sects);
	nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0);
	}

	blk_queue_max_zone_append_sectors(q, dev->zone_size_sects);
	disk_set_max_open_zones(nullb->disk, dev->zone_max_open);
	disk_set_max_active_zones(nullb->disk, dev->zone_max_active);

	if (queue_is_mq(q))
		return blk_revalidate_disk_zones(nullb->disk, NULL);

	return 0;
}

+15 −19
Original line number Diff line number Diff line
@@ -751,7 +751,6 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev,
{
	u32 v, wg;
	u8 model;
	int ret;

	virtio_cread(vdev, struct virtio_blk_config,
		     zoned.model, &model);
@@ -806,6 +805,7 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev,
			vblk->zone_sectors);
		return -ENODEV;
	}
	blk_queue_chunk_sectors(q, vblk->zone_sectors);
	dev_dbg(&vdev->dev, "zone sectors = %u\n", vblk->zone_sectors);

	if (virtio_has_feature(vdev, VIRTIO_BLK_F_DISCARD)) {
@@ -814,8 +814,6 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev,
		blk_queue_max_discard_sectors(q, 0);
	}

	ret = blk_revalidate_disk_zones(vblk->disk, NULL);
	if (!ret) {
	virtio_cread(vdev, struct virtio_blk_config,
		     zoned.max_append_sectors, &v);
	if (!v) {
@@ -828,12 +826,10 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev,
			wg, v);
		return -ENODEV;
	}

	blk_queue_max_zone_append_sectors(q, v);
	dev_dbg(&vdev->dev, "max append sectors = %u\n", v);
	}

	return ret;
	return blk_revalidate_disk_zones(vblk->disk, NULL);
}

#else
+4 −5
Original line number Diff line number Diff line
@@ -10,12 +10,11 @@
int nvme_revalidate_zones(struct nvme_ns *ns)
{
	struct request_queue *q = ns->queue;
	int ret;

	ret = blk_revalidate_disk_zones(ns->disk, NULL);
	if (!ret)
	blk_queue_chunk_sectors(q, ns->zsze);
	blk_queue_max_zone_append_sectors(q, ns->ctrl->max_zone_append);
	return ret;

	return blk_revalidate_disk_zones(ns->disk, NULL);
}

static int nvme_set_max_append(struct nvme_ctrl *ctrl)
Loading