All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] virtio-blk: fix a few problems in ZBD-related code
@ 2023-03-30 21:49 ` Dmitry Fomichev
  0 siblings, 0 replies; 15+ messages in thread
From: Dmitry Fomichev @ 2023-03-30 21:49 UTC (permalink / raw)
  To: Jens Axboe, linux-block, Michael S. Tsirkin, Damien Le Moal,
	Stefan Hajnoczi, Hannes Reinecke, Sam Li
  Cc: virtio-dev, virtualization, Dmitry Fomichev

This two-part series contains code fixes that are related to the
recently added support for zoned block devices in virtio-blk
driver.

The original ZBD patchset that was merged to the kernel -next was not
the latest and greatest version. The first patch of this series is
essentially a diff between the current code and the final revision of
the original patchset.

The second patch fixes a problem that is observed when a host-managed
zoned device is virtualized via virtio-blk and the driver kernel is
configured without ZBD support (CONFIG_BLK_DEV_ZONED not set). In this
case, the driver must not allow the device scan to succeed in order to
avoid erroneous device operation that may cause data loss. The
second patch adds this currently missing functionality.

v1 -> v2:

 - address nits from Damien
 - add Review-by tags from Stefan and Damien

Dmitry Fomichev (2):
  virtio-blk: migrate to the latest patchset version
  virtio-blk: fix ZBD probe in kernels without ZBD support

 drivers/block/virtio_blk.c      | 269 ++++++++++++++++++++------------
 include/uapi/linux/virtio_blk.h |  18 +--
 2 files changed, 182 insertions(+), 105 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/2] virtio-blk: migrate to the latest patchset version
@ 2023-03-31 14:38 kernel test robot
  0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2023-03-31 14:38 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20230330214953.1088216-2-dmitry.fomichev@wdc.com>
References: <20230330214953.1088216-2-dmitry.fomichev@wdc.com>
TO: Dmitry Fomichev <dmitry.fomichev@wdc.com>
TO: Jens Axboe <axboe@kernel.dk>
TO: linux-block@vger.kernel.org
TO: "Michael S. Tsirkin" <mst@redhat.com>
TO: Damien Le Moal <damien.lemoal@opensource.wdc.com>
TO: Stefan Hajnoczi <stefanha@gmail.com>
TO: Hannes Reinecke <hare@suse.de>
TO: Sam Li <faithilikerun@gmail.com>
CC: virtio-dev@lists.oasis-open.org
CC: virtualization@lists.linux-foundation.org
CC: Dmitry Fomichev <dmitry.fomichev@wdc.com>

Hi Dmitry,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on axboe-block/for-next]
[also build test WARNING on linus/master v6.3-rc4 next-20230331]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Dmitry-Fomichev/virtio-blk-migrate-to-the-latest-patchset-version/20230331-055052
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
patch link:    https://lore.kernel.org/r/20230330214953.1088216-2-dmitry.fomichev%40wdc.com
patch subject: [PATCH v2 1/2] virtio-blk: migrate to the latest patchset version
:::::: branch date: 17 hours ago
:::::: commit date: 17 hours ago
config: parisc-randconfig-m041-20230329 (https://download.01.org/0day-ci/archive/20230331/202303312211.z4EdyM5A-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Link: https://lore.kernel.org/r/202303312211.z4EdyM5A-lkp@intel.com/

New smatch warnings:
drivers/block/virtio_blk.c:806 virtblk_probe_zoned_device() error: uninitialized symbol 'virtio_cread_v'.

Old smatch warnings:
drivers/block/virtio_blk.c:811 virtblk_probe_zoned_device() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:816 virtblk_probe_zoned_device() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:831 virtblk_probe_zoned_device() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:849 virtblk_probe_zoned_device() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:943 virtblk_getgeo() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1018 virtblk_update_capacity() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1067 init_vq() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1342 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1430 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1438 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1468 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1474 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1481 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1484 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1488 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1493 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1512 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1527 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.
drivers/block/virtio_blk.c:1542 virtblk_probe() error: uninitialized symbol 'virtio_cread_v'.

vim +/virtio_cread_v +806 drivers/block/virtio_blk.c

95bfec41bd3d39 Dmitry Fomichev 2022-10-15  777  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  778  static int virtblk_probe_zoned_device(struct virtio_device *vdev,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  779  				       struct virtio_blk *vblk,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  780  				       struct request_queue *q)
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  781  {
3e640fa381af05 Dmitry Fomichev 2023-03-30  782  	u32 v, wg;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  783  	u8 model;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  784  	int ret;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  785  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  786  	virtio_cread(vdev, struct virtio_blk_config,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  787  		     zoned.model, &model);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  788  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  789  	switch (model) {
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  790  	case VIRTIO_BLK_Z_NONE:
3e640fa381af05 Dmitry Fomichev 2023-03-30  791  	case VIRTIO_BLK_Z_HA:
3e640fa381af05 Dmitry Fomichev 2023-03-30  792  		/* Present the host-aware device as non-zoned */
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  793  		return 0;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  794  	case VIRTIO_BLK_Z_HM:
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  795  		break;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  796  	default:
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  797  		dev_err(&vdev->dev, "unsupported zone model %d\n", model);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  798  		return -EINVAL;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  799  	}
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  800  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  801  	dev_dbg(&vdev->dev, "probing host-managed zoned device\n");
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  802  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  803  	disk_set_zoned(vblk->disk, BLK_ZONED_HM);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  804  	blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  805  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15 @806  	virtio_cread(vdev, struct virtio_blk_config,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  807  		     zoned.max_open_zones, &v);
3e640fa381af05 Dmitry Fomichev 2023-03-30  808  	disk_set_max_open_zones(vblk->disk, v);
3e640fa381af05 Dmitry Fomichev 2023-03-30  809  	dev_dbg(&vdev->dev, "max open zones = %u\n", v);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  810  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  811  	virtio_cread(vdev, struct virtio_blk_config,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  812  		     zoned.max_active_zones, &v);
3e640fa381af05 Dmitry Fomichev 2023-03-30  813  	disk_set_max_active_zones(vblk->disk, v);
3e640fa381af05 Dmitry Fomichev 2023-03-30  814  	dev_dbg(&vdev->dev, "max active zones = %u\n", v);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  815  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  816  	virtio_cread(vdev, struct virtio_blk_config,
3e640fa381af05 Dmitry Fomichev 2023-03-30  817  		     zoned.write_granularity, &wg);
3e640fa381af05 Dmitry Fomichev 2023-03-30  818  	if (!wg) {
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  819  		dev_warn(&vdev->dev, "zero write granularity reported\n");
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  820  		return -ENODEV;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  821  	}
3e640fa381af05 Dmitry Fomichev 2023-03-30  822  	blk_queue_physical_block_size(q, wg);
3e640fa381af05 Dmitry Fomichev 2023-03-30  823  	blk_queue_io_min(q, wg);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  824  
3e640fa381af05 Dmitry Fomichev 2023-03-30  825  	dev_dbg(&vdev->dev, "write granularity = %u\n", wg);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  826  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  827  	/*
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  828  	 * virtio ZBD specification doesn't require zones to be a power of
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  829  	 * two sectors in size, but the code in this driver expects that.
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  830  	 */
3e640fa381af05 Dmitry Fomichev 2023-03-30  831  	virtio_cread(vdev, struct virtio_blk_config, zoned.zone_sectors,
3e640fa381af05 Dmitry Fomichev 2023-03-30  832  		     &vblk->zone_sectors);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  833  	if (vblk->zone_sectors == 0 || !is_power_of_2(vblk->zone_sectors)) {
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  834  		dev_err(&vdev->dev,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  835  			"zoned device with non power of two zone size %u\n",
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  836  			vblk->zone_sectors);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  837  		return -ENODEV;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  838  	}
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  839  	dev_dbg(&vdev->dev, "zone sectors = %u\n", vblk->zone_sectors);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  840  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  841  	if (virtio_has_feature(vdev, VIRTIO_BLK_F_DISCARD)) {
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  842  		dev_warn(&vblk->vdev->dev,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  843  			 "ignoring negotiated F_DISCARD for zoned device\n");
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  844  		blk_queue_max_discard_sectors(q, 0);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  845  	}
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  846  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  847  	ret = blk_revalidate_disk_zones(vblk->disk, NULL);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  848  	if (!ret) {
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  849  		virtio_cread(vdev, struct virtio_blk_config,
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  850  			     zoned.max_append_sectors, &v);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  851  		if (!v) {
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  852  			dev_warn(&vdev->dev, "zero max_append_sectors reported\n");
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  853  			return -ENODEV;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  854  		}
3e640fa381af05 Dmitry Fomichev 2023-03-30  855  		if ((v << SECTOR_SHIFT) < wg) {
3e640fa381af05 Dmitry Fomichev 2023-03-30  856  			dev_err(&vdev->dev,
3e640fa381af05 Dmitry Fomichev 2023-03-30  857  				"write granularity %u exceeds max_append_sectors %u limit\n",
3e640fa381af05 Dmitry Fomichev 2023-03-30  858  				wg, v);
3e640fa381af05 Dmitry Fomichev 2023-03-30  859  			return -ENODEV;
3e640fa381af05 Dmitry Fomichev 2023-03-30  860  		}
3e640fa381af05 Dmitry Fomichev 2023-03-30  861  
3e640fa381af05 Dmitry Fomichev 2023-03-30  862  		blk_queue_max_zone_append_sectors(q, v);
3e640fa381af05 Dmitry Fomichev 2023-03-30  863  		dev_dbg(&vdev->dev, "max append sectors = %u\n", v);
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  864  	}
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  865  
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  866  	return ret;
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  867  }
95bfec41bd3d39 Dmitry Fomichev 2022-10-15  868  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2023-04-03 17:54 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-30 21:49 [PATCH v2 0/2] virtio-blk: fix a few problems in ZBD-related code Dmitry Fomichev
2023-03-30 21:49 ` [virtio-dev] " Dmitry Fomichev
2023-03-30 21:49 ` [PATCH v2 1/2] virtio-blk: migrate to the latest patchset version Dmitry Fomichev
2023-03-30 21:49   ` [virtio-dev] " Dmitry Fomichev
2023-04-03 15:15   ` Christoph Hellwig
2023-04-03 15:15     ` Christoph Hellwig
2023-04-03 17:35     ` Michael S. Tsirkin
2023-04-03 17:35       ` Michael S. Tsirkin
2023-04-03 17:35       ` [virtio-dev] " Michael S. Tsirkin
2023-04-03 17:53   ` [virtio-dev] " Michael S. Tsirkin
2023-04-03 17:53     ` Michael S. Tsirkin
2023-04-03 17:53     ` Michael S. Tsirkin
2023-03-30 21:49 ` [PATCH v2 2/2] virtio-blk: fix ZBD probe in kernels without ZBD support Dmitry Fomichev
2023-03-30 21:49   ` [virtio-dev] " Dmitry Fomichev
  -- strict thread matches above, loose matches on Subject: below --
2023-03-31 14:38 [PATCH v2 1/2] virtio-blk: migrate to the latest patchset version kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.