Hi Hannes, [auto build test WARNING on mkp-scsi/for-next] [also build test WARNING on scsi/for-next v5.7-rc7 next-20200529] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Hannes-Reinecke/scsi-use-xarray-for-devices-and-targets/20200527-231824 base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next config: x86_64-randconfig-m001-20200529 (attached as .config) compiler: gcc-9 (Debian 9.3.0-13) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kbuild test robot <lkp@xxxxxxxxx> Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> smatch warnings: drivers/scsi/scsi_scan.c:482 scsi_alloc_target() warn: inconsistent returns '*shost->host_lock'. drivers/scsi/scsi_scan.c:482 scsi_alloc_target() warn: inconsistent returns 'flags'. # https://github.com/0day-ci/linux/commit/45b149b239ea9a86968ddbd8ecda1e6c44937b68 git remote add linux-review https://github.com/0day-ci/linux git remote update linux-review git checkout 45b149b239ea9a86968ddbd8ecda1e6c44937b68 vim +482 drivers/scsi/scsi_scan.c ^1da177e4c3f41 Linus Torvalds 2005-04-16 392 static struct scsi_target *scsi_alloc_target(struct device *parent, ^1da177e4c3f41 Linus Torvalds 2005-04-16 393 int channel, uint id) ^1da177e4c3f41 Linus Torvalds 2005-04-16 394 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 395 struct Scsi_Host *shost = dev_to_shost(parent); ^1da177e4c3f41 Linus Torvalds 2005-04-16 396 struct device *dev = NULL; ^1da177e4c3f41 Linus Torvalds 2005-04-16 397 unsigned long flags; ^1da177e4c3f41 Linus Torvalds 2005-04-16 398 const int size = sizeof(struct scsi_target) ^1da177e4c3f41 Linus Torvalds 2005-04-16 399 + shost->transportt->target_size; 5c44cd2afad3f7 James.Smart@xxxxxxxxxx 2005-06-10 400 struct scsi_target *starget; ^1da177e4c3f41 Linus Torvalds 2005-04-16 401 struct scsi_target *found_target; e63ed0d7a98014 James Bottomley 2014-01-21 402 int error, ref_got; 45b149b239ea9a Hannes Reinecke 2020-05-27 403 unsigned long tid; ^1da177e4c3f41 Linus Torvalds 2005-04-16 404 24669f75a3231f Jes Sorensen 2006-01-16 405 starget = kzalloc(size, GFP_KERNEL); ^1da177e4c3f41 Linus Torvalds 2005-04-16 406 if (!starget) { cadbd4a5e36dde Harvey Harrison 2008-07-03 407 printk(KERN_ERR "%s: allocation failure\n", __func__); ^1da177e4c3f41 Linus Torvalds 2005-04-16 408 return NULL; ^1da177e4c3f41 Linus Torvalds 2005-04-16 409 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 410 dev = &starget->dev; ^1da177e4c3f41 Linus Torvalds 2005-04-16 411 device_initialize(dev); e63ed0d7a98014 James Bottomley 2014-01-21 412 kref_init(&starget->reap_ref); ^1da177e4c3f41 Linus Torvalds 2005-04-16 413 dev->parent = get_device(parent); 71610f55fa4db6 Kay Sievers 2008-12-03 414 dev_set_name(dev, "target%d:%d:%d", shost->host_no, channel, id); b0ed43360fdca2 Hannes Reinecke 2008-03-18 415 dev->bus = &scsi_bus_type; b0ed43360fdca2 Hannes Reinecke 2008-03-18 416 dev->type = &scsi_target_type; ^1da177e4c3f41 Linus Torvalds 2005-04-16 417 starget->id = id; ^1da177e4c3f41 Linus Torvalds 2005-04-16 418 starget->channel = channel; f0c0a376d0fcd4 Mike Christie 2008-08-17 419 starget->can_queue = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 420 INIT_LIST_HEAD(&starget->devices); 643eb2d932c97a James Bottomley 2008-03-22 421 starget->state = STARGET_CREATED; 7c9d6f16f50d3a Alan Stern 2007-01-08 422 starget->scsi_level = SCSI_2; c53a284f8be237 Edward Goggin 2009-04-09 423 starget->max_target_blocked = SCSI_DEFAULT_TARGET_BLOCKED; 45b149b239ea9a Hannes Reinecke 2020-05-27 424 tid = scsi_target_index(starget); ffedb4522571ac James Bottomley 2006-02-23 425 retry: ^1da177e4c3f41 Linus Torvalds 2005-04-16 426 spin_lock_irqsave(shost->host_lock, flags); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^1da177e4c3f41 Linus Torvalds 2005-04-16 427 45b149b239ea9a Hannes Reinecke 2020-05-27 428 found_target = xa_load(&shost->__targets, tid); ^1da177e4c3f41 Linus Torvalds 2005-04-16 429 if (found_target) ^1da177e4c3f41 Linus Torvalds 2005-04-16 430 goto found; 45b149b239ea9a Hannes Reinecke 2020-05-27 431 if (xa_insert(&shost->__targets, tid, starget, GFP_KERNEL)) { 45b149b239ea9a Hannes Reinecke 2020-05-27 432 dev_printk(KERN_ERR, dev, "target index busy\n"); 45b149b239ea9a Hannes Reinecke 2020-05-27 433 kfree(starget); 45b149b239ea9a Hannes Reinecke 2020-05-27 434 return NULL; ^^^^^^^^^^^ Need to drop the lock. 45b149b239ea9a Hannes Reinecke 2020-05-27 435 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 436 spin_unlock_irqrestore(shost->host_lock, flags); ^1da177e4c3f41 Linus Torvalds 2005-04-16 437 /* allocate and add */ a283bd37d00e92 James Bottomley 2005-05-24 438 transport_setup_device(dev); a283bd37d00e92 James Bottomley 2005-05-24 439 if (shost->hostt->target_alloc) { 32f95792500794 Brian King 2006-02-22 440 error = shost->hostt->target_alloc(starget); a283bd37d00e92 James Bottomley 2005-05-24 441 a283bd37d00e92 James Bottomley 2005-05-24 442 if(error) { a283bd37d00e92 James Bottomley 2005-05-24 443 dev_printk(KERN_ERR, dev, "target allocation failed, error %d\n", error); a283bd37d00e92 James Bottomley 2005-05-24 444 /* don't want scsi_target_reap to do the final a283bd37d00e92 James Bottomley 2005-05-24 445 * put because it will be under the host lock */ 643eb2d932c97a James Bottomley 2008-03-22 446 scsi_target_destroy(starget); a283bd37d00e92 James Bottomley 2005-05-24 447 return NULL; a283bd37d00e92 James Bottomley 2005-05-24 448 } a283bd37d00e92 James Bottomley 2005-05-24 449 } 884d25cc4fda20 James Bottomley 2006-09-05 450 get_device(dev); a283bd37d00e92 James Bottomley 2005-05-24 451 ^1da177e4c3f41 Linus Torvalds 2005-04-16 452 return starget; ^1da177e4c3f41 Linus Torvalds 2005-04-16 453 ^1da177e4c3f41 Linus Torvalds 2005-04-16 454 found: e63ed0d7a98014 James Bottomley 2014-01-21 455 /* e63ed0d7a98014 James Bottomley 2014-01-21 456 * release routine already fired if kref is zero, so if we can still e63ed0d7a98014 James Bottomley 2014-01-21 457 * take the reference, the target must be alive. If we can't, it must e63ed0d7a98014 James Bottomley 2014-01-21 458 * be dying and we need to wait for a new target e63ed0d7a98014 James Bottomley 2014-01-21 459 */ e63ed0d7a98014 James Bottomley 2014-01-21 460 ref_got = kref_get_unless_zero(&found_target->reap_ref); e63ed0d7a98014 James Bottomley 2014-01-21 461 ^1da177e4c3f41 Linus Torvalds 2005-04-16 462 spin_unlock_irqrestore(shost->host_lock, flags); e63ed0d7a98014 James Bottomley 2014-01-21 463 if (ref_got) { 12fb8c1574d7d0 Alan Stern 2010-03-18 464 put_device(dev); ^1da177e4c3f41 Linus Torvalds 2005-04-16 465 return found_target; ^1da177e4c3f41 Linus Torvalds 2005-04-16 466 } e63ed0d7a98014 James Bottomley 2014-01-21 467 /* e63ed0d7a98014 James Bottomley 2014-01-21 468 * Unfortunately, we found a dying target; need to wait until it's e63ed0d7a98014 James Bottomley 2014-01-21 469 * dead before we can get a new one. There is an anomaly here. We e63ed0d7a98014 James Bottomley 2014-01-21 470 * *should* call scsi_target_reap() to balance the kref_get() of the e63ed0d7a98014 James Bottomley 2014-01-21 471 * reap_ref above. However, since the target being released, it's e63ed0d7a98014 James Bottomley 2014-01-21 472 * already invisible and the reap_ref is irrelevant. If we call e63ed0d7a98014 James Bottomley 2014-01-21 473 * scsi_target_reap() we might spuriously do another device_del() on e63ed0d7a98014 James Bottomley 2014-01-21 474 * an already invisible target. e63ed0d7a98014 James Bottomley 2014-01-21 475 */ ffedb4522571ac James Bottomley 2006-02-23 476 put_device(&found_target->dev); e63ed0d7a98014 James Bottomley 2014-01-21 477 /* e63ed0d7a98014 James Bottomley 2014-01-21 478 * length of time is irrelevant here, we just want to yield the CPU e63ed0d7a98014 James Bottomley 2014-01-21 479 * for a tick to avoid busy waiting for the target to die. e63ed0d7a98014 James Bottomley 2014-01-21 480 */ e63ed0d7a98014 James Bottomley 2014-01-21 481 msleep(1); ffedb4522571ac James Bottomley 2006-02-23 @482 goto retry; ffedb4522571ac James Bottomley 2006-02-23 483 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip