All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Ming Lei <ming.lei@redhat.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org
Subject: Re: [PATCH] ublk_drv: fix request queue leak
Date: Mon, 18 Jul 2022 06:21:08 +0800	[thread overview]
Message-ID: <202207180650.FHQQqTxN-lkp@intel.com> (raw)
In-Reply-To: <20220714103201.131648-1-ming.lei@redhat.com>

Hi Ming,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on axboe-block/for-next]
[cannot apply to linus/master v5.19-rc7 next-20220715]
[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/Ming-Lei/ublk_drv-fix-request-queue-leak/20220714-183546
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20220718/202207180650.FHQQqTxN-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 07022e6cf9b5b3baa642be53d0b3c3f1c403dbfd)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/98d681f8eed174b29ee9e72ed6a7d04e1a77835b
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Ming-Lei/ublk_drv-fix-request-queue-leak/20220714-183546
        git checkout 98d681f8eed174b29ee9e72ed6a7d04e1a77835b
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/block/ drivers/media/i2c/ drivers/net/pcs/ drivers/pinctrl/nuvoton/ kernel/trace/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   drivers/block/ublk_drv.c:890:6: warning: variable 'io' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (tag >= ubq->q_depth)
               ^~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:940:2: note: uninitialized use occurs here
           io->flags &= ~UBLK_IO_FLAG_ACTIVE;
           ^~
   drivers/block/ublk_drv.c:890:2: note: remove the 'if' if its condition is always false
           if (tag >= ubq->q_depth)
           ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:887:6: warning: variable 'io' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (ubq->ubq_daemon && ubq->ubq_daemon != current)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:940:2: note: uninitialized use occurs here
           io->flags &= ~UBLK_IO_FLAG_ACTIVE;
           ^~
   drivers/block/ublk_drv.c:887:2: note: remove the 'if' if its condition is always false
           if (ubq->ubq_daemon && ubq->ubq_daemon != current)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:884:6: warning: variable 'io' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (!ubq || ub_cmd->q_id != ubq->q_id)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:940:2: note: uninitialized use occurs here
           io->flags &= ~UBLK_IO_FLAG_ACTIVE;
           ^~
   drivers/block/ublk_drv.c:884:2: note: remove the 'if' if its condition is always false
           if (!ubq || ub_cmd->q_id != ubq->q_id)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:884:6: warning: variable 'io' is used uninitialized whenever '||' condition is true [-Wsometimes-uninitialized]
           if (!ubq || ub_cmd->q_id != ubq->q_id)
               ^~~~
   drivers/block/ublk_drv.c:940:2: note: uninitialized use occurs here
           io->flags &= ~UBLK_IO_FLAG_ACTIVE;
           ^~
   drivers/block/ublk_drv.c:884:6: note: remove the '||' if its condition is always false
           if (!ubq || ub_cmd->q_id != ubq->q_id)
               ^~~~~~~
   drivers/block/ublk_drv.c:880:6: warning: variable 'io' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (ub_cmd->q_id >= ub->dev_info.nr_hw_queues)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:940:2: note: uninitialized use occurs here
           io->flags &= ~UBLK_IO_FLAG_ACTIVE;
           ^~
   drivers/block/ublk_drv.c:880:2: note: remove the 'if' if its condition is always false
           if (ub_cmd->q_id >= ub->dev_info.nr_hw_queues)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:877:6: warning: variable 'io' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (!(issue_flags & IO_URING_F_SQE128))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:940:2: note: uninitialized use occurs here
           io->flags &= ~UBLK_IO_FLAG_ACTIVE;
           ^~
   drivers/block/ublk_drv.c:877:2: note: remove the 'if' if its condition is always false
           if (!(issue_flags & IO_URING_F_SQE128))
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:868:20: note: initialize the variable 'io' to silence this warning
           struct ublk_io *io;
                             ^
                              = NULL
>> drivers/block/ublk_drv.c:1081:2: error: call to undeclared function 'blk_cleanup_queue'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
           blk_cleanup_queue(ub->ub_queue);
           ^
>> drivers/block/ublk_drv.c:1177:23: error: call to undeclared function '__alloc_disk_node'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
           disk = ub->ub_disk = __alloc_disk_node(ub->ub_queue, NUMA_NO_NODE,
                                ^
   drivers/block/ublk_drv.c:1177:23: note: did you mean '__alloc_pages_node'?
   include/linux/gfp.h:582:1: note: '__alloc_pages_node' declared here
   __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order)
   ^
>> drivers/block/ublk_drv.c:1177:21: warning: incompatible integer to pointer conversion assigning to 'struct gendisk *' from 'int' [-Wint-conversion]
           disk = ub->ub_disk = __alloc_disk_node(ub->ub_queue, NUMA_NO_NODE,
                              ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/ublk_drv.c:1215:2: error: call to undeclared function 'blk_cleanup_queue'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
           blk_cleanup_queue(ub->ub_queue);
           ^
   7 warnings and 3 errors generated.


vim +/blk_cleanup_queue +1081 drivers/block/ublk_drv.c

  1076	
  1077	static void ublk_cdev_rel(struct device *dev)
  1078	{
  1079		struct ublk_device *ub = container_of(dev, struct ublk_device, cdev_dev);
  1080	
> 1081		blk_cleanup_queue(ub->ub_queue);
  1082	
  1083		put_disk(ub->ub_disk);
  1084	
  1085		blk_mq_free_tag_set(&ub->tag_set);
  1086	
  1087		ublk_deinit_queues(ub);
  1088	
  1089		__ublk_destroy_dev(ub);
  1090	}
  1091	
  1092	static int ublk_add_chdev(struct ublk_device *ub)
  1093	{
  1094		struct device *dev = &ub->cdev_dev;
  1095		int minor = ub->ub_number;
  1096		int ret;
  1097	
  1098		dev->parent = ublk_misc.this_device;
  1099		dev->devt = MKDEV(MAJOR(ublk_chr_devt), minor);
  1100		dev->class = ublk_chr_class;
  1101		dev->release = ublk_cdev_rel;
  1102		device_initialize(dev);
  1103	
  1104		ret = dev_set_name(dev, "ublkc%d", minor);
  1105		if (ret)
  1106			goto fail;
  1107	
  1108		cdev_init(&ub->cdev, &ublk_ch_fops);
  1109		ret = cdev_device_add(&ub->cdev, dev);
  1110		if (ret)
  1111			goto fail;
  1112		return 0;
  1113	 fail:
  1114		put_device(dev);
  1115		return ret;
  1116	}
  1117	
  1118	static void ublk_stop_work_fn(struct work_struct *work)
  1119	{
  1120		struct ublk_device *ub =
  1121			container_of(work, struct ublk_device, stop_work);
  1122	
  1123		ublk_stop_dev(ub);
  1124	}
  1125	
  1126	static void ublk_update_capacity(struct ublk_device *ub)
  1127	{
  1128		unsigned int max_rq_bytes;
  1129	
  1130		/* make max request buffer size aligned with PAGE_SIZE */
  1131		max_rq_bytes = round_down(ub->dev_info.rq_max_blocks <<
  1132				ub->bs_shift, PAGE_SIZE);
  1133		ub->dev_info.rq_max_blocks = max_rq_bytes >> ub->bs_shift;
  1134	
  1135		set_capacity(ub->ub_disk, ub->dev_info.dev_blocks << (ub->bs_shift - 9));
  1136	}
  1137	
  1138	/* add disk & cdev, cleanup everything in case of failure */
  1139	static int ublk_add_dev(struct ublk_device *ub)
  1140	{
  1141		struct gendisk *disk;
  1142		int err = -ENOMEM;
  1143		int bsize;
  1144	
  1145		/* We are not ready to support zero copy */
  1146		ub->dev_info.flags[0] &= ~UBLK_F_SUPPORT_ZERO_COPY;
  1147	
  1148		bsize = ub->dev_info.block_size;
  1149		ub->bs_shift = ilog2(bsize);
  1150	
  1151		ub->dev_info.nr_hw_queues = min_t(unsigned int,
  1152				ub->dev_info.nr_hw_queues, nr_cpu_ids);
  1153	
  1154		INIT_WORK(&ub->stop_work, ublk_stop_work_fn);
  1155		INIT_DELAYED_WORK(&ub->monitor_work, ublk_daemon_monitor_work);
  1156	
  1157		if (ublk_init_queues(ub))
  1158			goto out_destroy_dev;
  1159	
  1160		ub->tag_set.ops = &ublk_mq_ops;
  1161		ub->tag_set.nr_hw_queues = ub->dev_info.nr_hw_queues;
  1162		ub->tag_set.queue_depth = ub->dev_info.queue_depth;
  1163		ub->tag_set.numa_node = NUMA_NO_NODE;
  1164		ub->tag_set.cmd_size = sizeof(struct ublk_rq_data);
  1165		ub->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
  1166		ub->tag_set.driver_data = ub;
  1167	
  1168		err = blk_mq_alloc_tag_set(&ub->tag_set);
  1169		if (err)
  1170			goto out_deinit_queues;
  1171	
  1172		ub->ub_queue = blk_mq_init_queue(&ub->tag_set);
  1173		if (IS_ERR(ub->ub_queue))
  1174			goto out_cleanup_tags;
  1175		ub->ub_queue->queuedata = ub;
  1176	
> 1177		disk = ub->ub_disk = __alloc_disk_node(ub->ub_queue, NUMA_NO_NODE,
  1178				&ublk_bio_compl_lkclass);
  1179		if (IS_ERR(disk)) {
  1180			err = PTR_ERR(disk);
  1181			goto out_free_request_queue;
  1182		}
  1183	
  1184		blk_queue_logical_block_size(ub->ub_queue, bsize);
  1185		blk_queue_physical_block_size(ub->ub_queue, bsize);
  1186		blk_queue_io_min(ub->ub_queue, bsize);
  1187	
  1188		blk_queue_max_hw_sectors(ub->ub_queue, ub->dev_info.rq_max_blocks <<
  1189				(ub->bs_shift - 9));
  1190	
  1191		ub->ub_queue->limits.discard_granularity = PAGE_SIZE;
  1192	
  1193		blk_queue_max_discard_sectors(ub->ub_queue, UINT_MAX >> 9);
  1194		blk_queue_max_write_zeroes_sectors(ub->ub_queue, UINT_MAX >> 9);
  1195	
  1196		ublk_update_capacity(ub);
  1197	
  1198		disk->fops		= &ub_fops;
  1199		disk->private_data	= ub;
  1200		disk->queue		= ub->ub_queue;
  1201		sprintf(disk->disk_name, "ublkb%d", ub->ub_number);
  1202	
  1203		mutex_init(&ub->mutex);
  1204	
  1205		/* add char dev so that ublksrv daemon can be setup */
  1206		err = ublk_add_chdev(ub);
  1207		if (err)
  1208			return err;
  1209	
  1210		/* don't expose disk now until we got start command from cdev */
  1211	
  1212		return 0;
  1213	
  1214	out_free_request_queue:
  1215		blk_cleanup_queue(ub->ub_queue);
  1216	out_cleanup_tags:
  1217		blk_mq_free_tag_set(&ub->tag_set);
  1218	out_deinit_queues:
  1219		ublk_deinit_queues(ub);
  1220	out_destroy_dev:
  1221		__ublk_destroy_dev(ub);
  1222		return err;
  1223	}
  1224	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

      parent reply	other threads:[~2022-07-17 22:21 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-14 10:32 [PATCH] ublk_drv: fix request queue leak Ming Lei
2022-07-14 13:00 ` Jens Axboe
2022-07-14 13:10   ` Ming Lei
2022-07-14 13:14     ` Jens Axboe
2022-07-14 13:24       ` Christoph Hellwig
2022-07-14 13:13 ` Christoph Hellwig
2022-07-14 13:20   ` Ming Lei
2022-07-14 13:23     ` Christoph Hellwig
2022-07-14 13:26       ` Ming Lei
2022-07-14 13:37         ` Ming Lei
2022-07-14 13:55           ` Christoph Hellwig
2022-07-14 14:02             ` Ming Lei
2022-07-17 22:21 ` kernel test robot [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202207180650.FHQQqTxN-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    --cc=llvm@lists.linux.dev \
    --cc=ming.lei@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.