All of lore.kernel.org
 help / color / mirror / Atom feed
From: kbuild test robot <lkp@intel.com>
To: Hannes Reinecke <hare@suse.de>,
	"Martin K. Petersen" <martin.petersen@oracle.com>
Cc: kbuild-all@lists.01.org, Christoph Hellwig <hch@lst.de>,
	James Bottomley <james.bottomley@hansenpartnership.com>,
	linux-scsi@vger.kernel.org, Hannes Reinecke <hare@suse.de>
Subject: Re: [PATCH] scsi_scan: handle REPORT LUN overflow
Date: Sun, 31 May 2020 12:50:36 +0800	[thread overview]
Message-ID: <202005311210.EteEE5We%lkp@intel.com> (raw)
In-Reply-To: <20200529133855.146357-1-hare@suse.de>

[-- Attachment #1: Type: text/plain, Size: 9351 bytes --]

Hi Hannes,

I love your patch! Perhaps something to improve:

[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on scsi/for-next hch-configfs/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_scan-handle-REPORT-LUN-overflow/20200531-083517
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: i386-randconfig-s001-20200531 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-243-gc100a7ab-dirty
        # save the attached .config to linux build tree
        make W=1 C=1 ARCH=i386 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

>> drivers/scsi/scsi_scan.c:1302:42: sparse: sparse: incorrect type in initializer (different base types) @@     expected int alloc_flags @@     got restricted gfp_t @@
>> drivers/scsi/scsi_scan.c:1302:42: sparse:     expected int alloc_flags
>> drivers/scsi/scsi_scan.c:1302:42: sparse:     got restricted gfp_t
>> drivers/scsi/scsi_scan.c:1339:36: sparse: sparse: restricted gfp_t degrades to integer
>> drivers/scsi/scsi_scan.c:1339:47: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted gfp_t [usertype] flags @@     got unsigned int @@
>> drivers/scsi/scsi_scan.c:1339:47: sparse:     expected restricted gfp_t [usertype] flags
>> drivers/scsi/scsi_scan.c:1339:47: sparse:     got unsigned int
   drivers/scsi/scsi_scan.c:1411:50: sparse: sparse: restricted gfp_t degrades to integer
   drivers/scsi/scsi_scan.c:1411:61: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted gfp_t [usertype] flags @@     got unsigned int @@
   drivers/scsi/scsi_scan.c:1411:61: sparse:     expected restricted gfp_t [usertype] flags
   drivers/scsi/scsi_scan.c:1411:61: sparse:     got unsigned int

vim +1302 drivers/scsi/scsi_scan.c

  1267	
  1268	/**
  1269	 * scsi_report_lun_scan - Scan using SCSI REPORT LUN results
  1270	 * @starget: which target
  1271	 * @bflags: Zero or a mix of BLIST_NOLUN, BLIST_REPORTLUN2, or BLIST_NOREPORTLUN
  1272	 * @rescan: nonzero if we can skip code only needed on first scan
  1273	 *
  1274	 * Description:
  1275	 *   Fast scanning for modern (SCSI-3) devices by sending a REPORT LUN command.
  1276	 *   Scan the resulting list of LUNs by calling scsi_probe_and_add_lun.
  1277	 *
  1278	 *   If BLINK_REPORTLUN2 is set, scan a target that supports more than 8
  1279	 *   LUNs even if it's older than SCSI-3.
  1280	 *   If BLIST_NOREPORTLUN is set, return 1 always.
  1281	 *   If BLIST_NOLUN is set, return 0 always.
  1282	 *   If starget->no_report_luns is set, return 1 always.
  1283	 *
  1284	 * Return:
  1285	 *     0: scan completed (or no memory, so further scanning is futile)
  1286	 *     1: could not scan with REPORT LUN
  1287	 **/
  1288	static int scsi_report_lun_scan(struct scsi_target *starget, blist_flags_t bflags,
  1289					enum scsi_scan_mode rescan)
  1290	{
  1291		unsigned char scsi_cmd[MAX_COMMAND_SIZE];
  1292		unsigned int length;
  1293		u64 lun;
  1294		unsigned int num_luns;
  1295		unsigned int retries;
  1296		int result;
  1297		struct scsi_lun *lunp, *lun_data;
  1298		struct scsi_sense_hdr sshdr;
  1299		struct scsi_device *sdev;
  1300		struct Scsi_Host *shost = dev_to_shost(&starget->dev);
  1301		int ret = 0, alloc_flags =
> 1302			shost->unchecked_isa_dma ? __GFP_DMA : 0;
  1303	
  1304		/*
  1305		 * Only support SCSI-3 and up devices if BLIST_NOREPORTLUN is not set.
  1306		 * Also allow SCSI-2 if BLIST_REPORTLUN2 is set and host adapter does
  1307		 * support more than 8 LUNs.
  1308		 * Don't attempt if the target doesn't support REPORT LUNS.
  1309		 */
  1310		if (bflags & BLIST_NOREPORTLUN)
  1311			return 1;
  1312		if (starget->scsi_level < SCSI_2 &&
  1313		    starget->scsi_level != SCSI_UNKNOWN)
  1314			return 1;
  1315		if (starget->scsi_level < SCSI_3 &&
  1316		    (!(bflags & BLIST_REPORTLUN2) || shost->max_lun <= 8))
  1317			return 1;
  1318		if (bflags & BLIST_NOLUN)
  1319			return 0;
  1320		if (starget->no_report_luns)
  1321			return 1;
  1322	
  1323		if (!(sdev = scsi_device_lookup_by_target(starget, 0))) {
  1324			sdev = scsi_alloc_sdev(starget, 0, NULL);
  1325			if (!sdev)
  1326				return 0;
  1327			if (scsi_device_get(sdev)) {
  1328				__scsi_remove_device(sdev);
  1329				return 0;
  1330			}
  1331		}
  1332	
  1333		/*
  1334		 * Allocate enough to hold the header (the same size as one scsi_lun)
  1335		 * plus the number of luns we are requesting.  511 was the default
  1336		 * value of the now removed max_report_luns parameter.
  1337		 */
  1338		length = (511 + 1) * sizeof(struct scsi_lun);
> 1339		lun_data = kmalloc(length, GFP_KERNEL | alloc_flags);
  1340		if (!lun_data) {
  1341			printk(ALLOC_FAILURE_MSG, __func__);
  1342			goto out;
  1343		}
  1344	
  1345	retry:
  1346		scsi_cmd[0] = REPORT_LUNS;
  1347	
  1348		/*
  1349		 * bytes 1 - 5: reserved, set to zero.
  1350		 */
  1351		memset(&scsi_cmd[1], 0, 5);
  1352	
  1353		/*
  1354		 * bytes 6 - 9: length of the command.
  1355		 */
  1356		put_unaligned_be32(length, &scsi_cmd[6]);
  1357	
  1358		scsi_cmd[10] = 0;	/* reserved */
  1359		scsi_cmd[11] = 0;	/* control */
  1360	
  1361		/*
  1362		 * We can get a UNIT ATTENTION, for example a power on/reset, so
  1363		 * retry a few times (like sd.c does for TEST UNIT READY).
  1364		 * Experience shows some combinations of adapter/devices get at
  1365		 * least two power on/resets.
  1366		 *
  1367		 * Illegal requests (for devices that do not support REPORT LUNS)
  1368		 * should come through as a check condition, and will not generate
  1369		 * a retry.
  1370		 */
  1371		for (retries = 0; retries < 3; retries++) {
  1372			SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
  1373					"scsi scan: Sending REPORT LUNS to (try %d)\n",
  1374					retries));
  1375	
  1376			result = scsi_execute_req(sdev, scsi_cmd, DMA_FROM_DEVICE,
  1377						  lun_data, length, &sshdr,
  1378						  SCSI_REPORT_LUNS_TIMEOUT, 3, NULL);
  1379	
  1380			SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
  1381					"scsi scan: REPORT LUNS"
  1382					" %s (try %d) result 0x%x\n",
  1383					result ?  "failed" : "successful",
  1384					retries, result));
  1385			if (result == 0)
  1386				break;
  1387			else if (scsi_sense_valid(&sshdr)) {
  1388				if (sshdr.sense_key != UNIT_ATTENTION)
  1389					break;
  1390			}
  1391		}
  1392	
  1393		if (result) {
  1394			/*
  1395			 * The device probably does not support a REPORT LUN command
  1396			 */
  1397			ret = 1;
  1398			goto out_err;
  1399		}
  1400	
  1401		/*
  1402		 * Get the length from the first four bytes of lun_data.
  1403		 */
  1404		if (get_unaligned_be32(lun_data->scsi_lun) +
  1405		    sizeof(struct scsi_lun) > length) {
  1406			unsigned int resp_length;
  1407			void *resp_data;
  1408	
  1409			resp_length = get_unaligned_be32(lun_data->scsi_lun) +
  1410				 sizeof(struct scsi_lun);
  1411			resp_data = kmalloc(resp_length, GFP_KERNEL | alloc_flags);
  1412			if (resp_data) {
  1413				kfree(lun_data);
  1414				lun_data = resp_data;
  1415				length = resp_length;
  1416				goto retry;
  1417			}
  1418			printk(ALLOC_FAILURE_MSG, __func__);
  1419		} else
  1420			length = get_unaligned_be32(lun_data->scsi_lun);
  1421	
  1422		num_luns = (length / sizeof(struct scsi_lun));
  1423	
  1424		SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
  1425			"scsi scan: REPORT LUN scan\n"));
  1426	
  1427		/*
  1428		 * Scan the luns in lun_data. The entry at offset 0 is really
  1429		 * the header, so start at 1 and go up to and including num_luns.
  1430		 */
  1431		for (lunp = &lun_data[1]; lunp <= &lun_data[num_luns]; lunp++) {
  1432			lun = scsilun_to_int(lunp);
  1433	
  1434			if (lun > sdev->host->max_lun) {
  1435				sdev_printk(KERN_WARNING, sdev,
  1436					    "lun%llu has a LUN larger than"
  1437					    " allowed by the host adapter\n", lun);
  1438			} else {
  1439				int res;
  1440	
  1441				res = scsi_probe_and_add_lun(starget,
  1442					lun, NULL, NULL, rescan, NULL);
  1443				if (res == SCSI_SCAN_NO_RESPONSE) {
  1444					/*
  1445					 * Got some results, but now none, abort.
  1446					 */
  1447					sdev_printk(KERN_ERR, sdev,
  1448						"Unexpected response"
  1449						" from lun %llu while scanning, scan"
  1450						" aborted\n", (unsigned long long)lun);
  1451					break;
  1452				}
  1453			}
  1454		}
  1455	
  1456	 out_err:
  1457		kfree(lun_data);
  1458	 out:
  1459		if (scsi_device_created(sdev))
  1460			/*
  1461			 * the sdev we used didn't appear in the report luns scan
  1462			 */
  1463			__scsi_remove_device(sdev);
  1464		scsi_device_put(sdev);
  1465		return ret;
  1466	}
  1467	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 41158 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH] scsi_scan: handle REPORT LUN overflow
Date: Sun, 31 May 2020 12:50:36 +0800	[thread overview]
Message-ID: <202005311210.EteEE5We%lkp@intel.com> (raw)
In-Reply-To: <20200529133855.146357-1-hare@suse.de>

[-- Attachment #1: Type: text/plain, Size: 9598 bytes --]

Hi Hannes,

I love your patch! Perhaps something to improve:

[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on scsi/for-next hch-configfs/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_scan-handle-REPORT-LUN-overflow/20200531-083517
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: i386-randconfig-s001-20200531 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-243-gc100a7ab-dirty
        # save the attached .config to linux build tree
        make W=1 C=1 ARCH=i386 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

>> drivers/scsi/scsi_scan.c:1302:42: sparse: sparse: incorrect type in initializer (different base types) @@     expected int alloc_flags @@     got restricted gfp_t @@
>> drivers/scsi/scsi_scan.c:1302:42: sparse:     expected int alloc_flags
>> drivers/scsi/scsi_scan.c:1302:42: sparse:     got restricted gfp_t
>> drivers/scsi/scsi_scan.c:1339:36: sparse: sparse: restricted gfp_t degrades to integer
>> drivers/scsi/scsi_scan.c:1339:47: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted gfp_t [usertype] flags @@     got unsigned int @@
>> drivers/scsi/scsi_scan.c:1339:47: sparse:     expected restricted gfp_t [usertype] flags
>> drivers/scsi/scsi_scan.c:1339:47: sparse:     got unsigned int
   drivers/scsi/scsi_scan.c:1411:50: sparse: sparse: restricted gfp_t degrades to integer
   drivers/scsi/scsi_scan.c:1411:61: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted gfp_t [usertype] flags @@     got unsigned int @@
   drivers/scsi/scsi_scan.c:1411:61: sparse:     expected restricted gfp_t [usertype] flags
   drivers/scsi/scsi_scan.c:1411:61: sparse:     got unsigned int

vim +1302 drivers/scsi/scsi_scan.c

  1267	
  1268	/**
  1269	 * scsi_report_lun_scan - Scan using SCSI REPORT LUN results
  1270	 * @starget: which target
  1271	 * @bflags: Zero or a mix of BLIST_NOLUN, BLIST_REPORTLUN2, or BLIST_NOREPORTLUN
  1272	 * @rescan: nonzero if we can skip code only needed on first scan
  1273	 *
  1274	 * Description:
  1275	 *   Fast scanning for modern (SCSI-3) devices by sending a REPORT LUN command.
  1276	 *   Scan the resulting list of LUNs by calling scsi_probe_and_add_lun.
  1277	 *
  1278	 *   If BLINK_REPORTLUN2 is set, scan a target that supports more than 8
  1279	 *   LUNs even if it's older than SCSI-3.
  1280	 *   If BLIST_NOREPORTLUN is set, return 1 always.
  1281	 *   If BLIST_NOLUN is set, return 0 always.
  1282	 *   If starget->no_report_luns is set, return 1 always.
  1283	 *
  1284	 * Return:
  1285	 *     0: scan completed (or no memory, so further scanning is futile)
  1286	 *     1: could not scan with REPORT LUN
  1287	 **/
  1288	static int scsi_report_lun_scan(struct scsi_target *starget, blist_flags_t bflags,
  1289					enum scsi_scan_mode rescan)
  1290	{
  1291		unsigned char scsi_cmd[MAX_COMMAND_SIZE];
  1292		unsigned int length;
  1293		u64 lun;
  1294		unsigned int num_luns;
  1295		unsigned int retries;
  1296		int result;
  1297		struct scsi_lun *lunp, *lun_data;
  1298		struct scsi_sense_hdr sshdr;
  1299		struct scsi_device *sdev;
  1300		struct Scsi_Host *shost = dev_to_shost(&starget->dev);
  1301		int ret = 0, alloc_flags =
> 1302			shost->unchecked_isa_dma ? __GFP_DMA : 0;
  1303	
  1304		/*
  1305		 * Only support SCSI-3 and up devices if BLIST_NOREPORTLUN is not set.
  1306		 * Also allow SCSI-2 if BLIST_REPORTLUN2 is set and host adapter does
  1307		 * support more than 8 LUNs.
  1308		 * Don't attempt if the target doesn't support REPORT LUNS.
  1309		 */
  1310		if (bflags & BLIST_NOREPORTLUN)
  1311			return 1;
  1312		if (starget->scsi_level < SCSI_2 &&
  1313		    starget->scsi_level != SCSI_UNKNOWN)
  1314			return 1;
  1315		if (starget->scsi_level < SCSI_3 &&
  1316		    (!(bflags & BLIST_REPORTLUN2) || shost->max_lun <= 8))
  1317			return 1;
  1318		if (bflags & BLIST_NOLUN)
  1319			return 0;
  1320		if (starget->no_report_luns)
  1321			return 1;
  1322	
  1323		if (!(sdev = scsi_device_lookup_by_target(starget, 0))) {
  1324			sdev = scsi_alloc_sdev(starget, 0, NULL);
  1325			if (!sdev)
  1326				return 0;
  1327			if (scsi_device_get(sdev)) {
  1328				__scsi_remove_device(sdev);
  1329				return 0;
  1330			}
  1331		}
  1332	
  1333		/*
  1334		 * Allocate enough to hold the header (the same size as one scsi_lun)
  1335		 * plus the number of luns we are requesting.  511 was the default
  1336		 * value of the now removed max_report_luns parameter.
  1337		 */
  1338		length = (511 + 1) * sizeof(struct scsi_lun);
> 1339		lun_data = kmalloc(length, GFP_KERNEL | alloc_flags);
  1340		if (!lun_data) {
  1341			printk(ALLOC_FAILURE_MSG, __func__);
  1342			goto out;
  1343		}
  1344	
  1345	retry:
  1346		scsi_cmd[0] = REPORT_LUNS;
  1347	
  1348		/*
  1349		 * bytes 1 - 5: reserved, set to zero.
  1350		 */
  1351		memset(&scsi_cmd[1], 0, 5);
  1352	
  1353		/*
  1354		 * bytes 6 - 9: length of the command.
  1355		 */
  1356		put_unaligned_be32(length, &scsi_cmd[6]);
  1357	
  1358		scsi_cmd[10] = 0;	/* reserved */
  1359		scsi_cmd[11] = 0;	/* control */
  1360	
  1361		/*
  1362		 * We can get a UNIT ATTENTION, for example a power on/reset, so
  1363		 * retry a few times (like sd.c does for TEST UNIT READY).
  1364		 * Experience shows some combinations of adapter/devices get at
  1365		 * least two power on/resets.
  1366		 *
  1367		 * Illegal requests (for devices that do not support REPORT LUNS)
  1368		 * should come through as a check condition, and will not generate
  1369		 * a retry.
  1370		 */
  1371		for (retries = 0; retries < 3; retries++) {
  1372			SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
  1373					"scsi scan: Sending REPORT LUNS to (try %d)\n",
  1374					retries));
  1375	
  1376			result = scsi_execute_req(sdev, scsi_cmd, DMA_FROM_DEVICE,
  1377						  lun_data, length, &sshdr,
  1378						  SCSI_REPORT_LUNS_TIMEOUT, 3, NULL);
  1379	
  1380			SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
  1381					"scsi scan: REPORT LUNS"
  1382					" %s (try %d) result 0x%x\n",
  1383					result ?  "failed" : "successful",
  1384					retries, result));
  1385			if (result == 0)
  1386				break;
  1387			else if (scsi_sense_valid(&sshdr)) {
  1388				if (sshdr.sense_key != UNIT_ATTENTION)
  1389					break;
  1390			}
  1391		}
  1392	
  1393		if (result) {
  1394			/*
  1395			 * The device probably does not support a REPORT LUN command
  1396			 */
  1397			ret = 1;
  1398			goto out_err;
  1399		}
  1400	
  1401		/*
  1402		 * Get the length from the first four bytes of lun_data.
  1403		 */
  1404		if (get_unaligned_be32(lun_data->scsi_lun) +
  1405		    sizeof(struct scsi_lun) > length) {
  1406			unsigned int resp_length;
  1407			void *resp_data;
  1408	
  1409			resp_length = get_unaligned_be32(lun_data->scsi_lun) +
  1410				 sizeof(struct scsi_lun);
  1411			resp_data = kmalloc(resp_length, GFP_KERNEL | alloc_flags);
  1412			if (resp_data) {
  1413				kfree(lun_data);
  1414				lun_data = resp_data;
  1415				length = resp_length;
  1416				goto retry;
  1417			}
  1418			printk(ALLOC_FAILURE_MSG, __func__);
  1419		} else
  1420			length = get_unaligned_be32(lun_data->scsi_lun);
  1421	
  1422		num_luns = (length / sizeof(struct scsi_lun));
  1423	
  1424		SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev,
  1425			"scsi scan: REPORT LUN scan\n"));
  1426	
  1427		/*
  1428		 * Scan the luns in lun_data. The entry at offset 0 is really
  1429		 * the header, so start at 1 and go up to and including num_luns.
  1430		 */
  1431		for (lunp = &lun_data[1]; lunp <= &lun_data[num_luns]; lunp++) {
  1432			lun = scsilun_to_int(lunp);
  1433	
  1434			if (lun > sdev->host->max_lun) {
  1435				sdev_printk(KERN_WARNING, sdev,
  1436					    "lun%llu has a LUN larger than"
  1437					    " allowed by the host adapter\n", lun);
  1438			} else {
  1439				int res;
  1440	
  1441				res = scsi_probe_and_add_lun(starget,
  1442					lun, NULL, NULL, rescan, NULL);
  1443				if (res == SCSI_SCAN_NO_RESPONSE) {
  1444					/*
  1445					 * Got some results, but now none, abort.
  1446					 */
  1447					sdev_printk(KERN_ERR, sdev,
  1448						"Unexpected response"
  1449						" from lun %llu while scanning, scan"
  1450						" aborted\n", (unsigned long long)lun);
  1451					break;
  1452				}
  1453			}
  1454		}
  1455	
  1456	 out_err:
  1457		kfree(lun_data);
  1458	 out:
  1459		if (scsi_device_created(sdev))
  1460			/*
  1461			 * the sdev we used didn't appear in the report luns scan
  1462			 */
  1463			__scsi_remove_device(sdev);
  1464		scsi_device_put(sdev);
  1465		return ret;
  1466	}
  1467	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 41158 bytes --]

  reply	other threads:[~2020-05-31  5:32 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-29 13:38 [PATCH] scsi_scan: handle REPORT LUN overflow Hannes Reinecke
2020-05-31  4:50 ` kbuild test robot [this message]
2020-05-31  4:50   ` kbuild test robot

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=202005311210.EteEE5We%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=james.bottomley@hansenpartnership.com \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.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.