Re: [PATCH v1 2/7] scsi: scsi_debug: Add READ BLOCK LIMITS and modify LOAD for tapes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Kai,

kernel test robot noticed the following build warnings:

[auto build test WARNING on jejb-scsi/for-next]
[also build test WARNING on mkp-scsi/for-next linus/master v6.14-rc2 next-20250210]
[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/Kai-M-kisara/scsi-scsi_debug-First-fixes-for-tapes/20250211-031623
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link:    https://lore.kernel.org/r/20250210191232.185207-3-Kai.Makisara%40kolumbus.fi
patch subject: [PATCH v1 2/7] scsi: scsi_debug: Add READ BLOCK LIMITS and modify LOAD for tapes
config: x86_64-kexec (https://download.01.org/0day-ci/archive/20250211/202502111805.dXd61ARr-lkp@xxxxxxxxx/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250211/202502111805.dXd61ARr-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502111805.dXd61ARr-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

   In file included from drivers/scsi/scsi_debug.c:31:
   In file included from include/linux/scatterlist.h:8:
   In file included from include/linux/mm.h:2224:
   include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     504 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     505 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     511 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     512 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     524 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     525 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/scsi/scsi_debug.c:2926:3: warning: variable 'len' is uninitialized when used here [-Wuninitialized]
    2926 |                 len += resp_partition_m_pg(ap, pcontrol, target);
         |                 ^~~
   drivers/scsi/scsi_debug.c:2791:28: note: initialize the variable 'len' to silence this warning
    2791 |         u32 alloc_len, offset, len;
         |                                   ^
         |                                    = 0
   4 warnings generated.


vim +/len +2926 drivers/scsi/scsi_debug.c

  2785	
  2786	static int resp_mode_sense(struct scsi_cmnd *scp,
  2787				   struct sdebug_dev_info *devip)
  2788	{
  2789		int pcontrol, pcode, subpcode, bd_len;
  2790		unsigned char dev_spec;
  2791		u32 alloc_len, offset, len;
  2792		int target_dev_id;
  2793		int target = scp->device->id;
  2794		unsigned char *ap;
  2795		unsigned char *arr __free(kfree);
  2796		unsigned char *cmd = scp->cmnd;
  2797		bool dbd, llbaa, msense_6, is_disk, is_zbc, is_tape;
  2798	
  2799		arr = kzalloc(SDEBUG_MAX_MSENSE_SZ, GFP_ATOMIC);
  2800		if (!arr)
  2801			return -ENOMEM;
  2802		dbd = !!(cmd[1] & 0x8);		/* disable block descriptors */
  2803		pcontrol = (cmd[2] & 0xc0) >> 6;
  2804		pcode = cmd[2] & 0x3f;
  2805		subpcode = cmd[3];
  2806		msense_6 = (MODE_SENSE == cmd[0]);
  2807		llbaa = msense_6 ? false : !!(cmd[1] & 0x10);
  2808		is_disk = (sdebug_ptype == TYPE_DISK);
  2809		is_zbc = devip->zoned;
  2810		is_tape = (sdebug_ptype == TYPE_TAPE);
  2811		if ((is_disk || is_zbc || is_tape) && !dbd)
  2812			bd_len = llbaa ? 16 : 8;
  2813		else
  2814			bd_len = 0;
  2815		alloc_len = msense_6 ? cmd[4] : get_unaligned_be16(cmd + 7);
  2816		if (0x3 == pcontrol) {  /* Saving values not supported */
  2817			mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
  2818			return check_condition_result;
  2819		}
  2820		target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
  2821				(devip->target * 1000) - 3;
  2822		/* for disks+zbc set DPOFUA bit and clear write protect (WP) bit */
  2823		if (is_disk || is_zbc) {
  2824			dev_spec = 0x10;	/* =0x90 if WP=1 implies read-only */
  2825			if (sdebug_wp)
  2826				dev_spec |= 0x80;
  2827		} else
  2828			dev_spec = 0x0;
  2829		if (msense_6) {
  2830			arr[2] = dev_spec;
  2831			arr[3] = bd_len;
  2832			offset = 4;
  2833		} else {
  2834			arr[3] = dev_spec;
  2835			if (16 == bd_len)
  2836				arr[4] = 0x1;	/* set LONGLBA bit */
  2837			arr[7] = bd_len;	/* assume 255 or less */
  2838			offset = 8;
  2839		}
  2840		ap = arr + offset;
  2841		if ((bd_len > 0) && (!sdebug_capacity))
  2842			sdebug_capacity = get_sdebug_capacity();
  2843	
  2844		if (8 == bd_len) {
  2845			if (sdebug_capacity > 0xfffffffe)
  2846				put_unaligned_be32(0xffffffff, ap + 0);
  2847			else
  2848				put_unaligned_be32(sdebug_capacity, ap + 0);
  2849			if (is_tape) {
  2850				ap[0] = devip->tape_density;
  2851				put_unaligned_be16(devip->tape_blksize, ap + 6);
  2852			} else
  2853				put_unaligned_be16(sdebug_sector_size, ap + 6);
  2854			offset += bd_len;
  2855			ap = arr + offset;
  2856		} else if (16 == bd_len) {
  2857			if (is_tape) {
  2858				mk_sense_invalid_fld(scp, SDEB_IN_DATA, 1, 4);
  2859				return check_condition_result;
  2860			}
  2861			put_unaligned_be64((u64)sdebug_capacity, ap + 0);
  2862			put_unaligned_be32(sdebug_sector_size, ap + 12);
  2863			offset += bd_len;
  2864			ap = arr + offset;
  2865		}
  2866		if (cmd[2] == 0)
  2867			goto only_bd; /* Only block descriptor requested */
  2868	
  2869		/*
  2870		 * N.B. If len>0 before resp_*_pg() call, then form of that call should be:
  2871		 *        len += resp_*_pg(ap + len, pcontrol, target);
  2872		 */
  2873		switch (pcode) {
  2874		case 0x1:	/* Read-Write error recovery page, direct access */
  2875			if (subpcode > 0x0 && subpcode < 0xff)
  2876				goto bad_subpcode;
  2877			len = resp_err_recov_pg(ap, pcontrol, target);
  2878			offset += len;
  2879			break;
  2880		case 0x2:	/* Disconnect-Reconnect page, all devices */
  2881			if (subpcode > 0x0 && subpcode < 0xff)
  2882				goto bad_subpcode;
  2883			len = resp_disconnect_pg(ap, pcontrol, target);
  2884			offset += len;
  2885			break;
  2886		case 0x3:       /* Format device page, direct access */
  2887			if (subpcode > 0x0 && subpcode < 0xff)
  2888				goto bad_subpcode;
  2889			if (is_disk) {
  2890				len = resp_format_pg(ap, pcontrol, target);
  2891				offset += len;
  2892			} else {
  2893				goto bad_pcode;
  2894			}
  2895			break;
  2896		case 0x8:	/* Caching page, direct access */
  2897			if (subpcode > 0x0 && subpcode < 0xff)
  2898				goto bad_subpcode;
  2899			if (is_disk || is_zbc) {
  2900				len = resp_caching_pg(ap, pcontrol, target);
  2901				offset += len;
  2902			} else {
  2903				goto bad_pcode;
  2904			}
  2905			break;
  2906		case 0xa:	/* Control Mode page, all devices */
  2907			switch (subpcode) {
  2908			case 0:
  2909				len = resp_ctrl_m_pg(ap, pcontrol, target);
  2910				break;
  2911			case 0x05:
  2912				len = resp_grouping_m_pg(ap, pcontrol, target);
  2913				break;
  2914			case 0xff:
  2915				len = resp_ctrl_m_pg(ap, pcontrol, target);
  2916				len += resp_grouping_m_pg(ap + len, pcontrol, target);
  2917				break;
  2918			default:
  2919				goto bad_subpcode;
  2920			}
  2921			offset += len;
  2922			break;
  2923		case 0x11:	/* Partition Mode Page (tape) */
  2924			if (!is_tape)
  2925				goto bad_pcode;
> 2926			len += resp_partition_m_pg(ap, pcontrol, target);
  2927			offset += len;
  2928			break;
  2929		case 0x19:	/* if spc==1 then sas phy, control+discover */
  2930			if (subpcode > 0x2 && subpcode < 0xff)
  2931				goto bad_subpcode;
  2932			len = 0;
  2933			if ((0x0 == subpcode) || (0xff == subpcode))
  2934				len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
  2935			if ((0x1 == subpcode) || (0xff == subpcode))
  2936				len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
  2937							  target_dev_id);
  2938			if ((0x2 == subpcode) || (0xff == subpcode))
  2939				len += resp_sas_sha_m_spg(ap + len, pcontrol);
  2940			offset += len;
  2941			break;
  2942		case 0x1c:	/* Informational Exceptions Mode page, all devices */
  2943			if (subpcode > 0x0 && subpcode < 0xff)
  2944				goto bad_subpcode;
  2945			len = resp_iec_m_pg(ap, pcontrol, target);
  2946			offset += len;
  2947			break;
  2948		case 0x3f:	/* Read all Mode pages */
  2949			if (subpcode > 0x0 && subpcode < 0xff)
  2950				goto bad_subpcode;
  2951			len = resp_err_recov_pg(ap, pcontrol, target);
  2952			len += resp_disconnect_pg(ap + len, pcontrol, target);
  2953			if (is_disk) {
  2954				len += resp_format_pg(ap + len, pcontrol, target);
  2955				len += resp_caching_pg(ap + len, pcontrol, target);
  2956			} else if (is_zbc) {
  2957				len += resp_caching_pg(ap + len, pcontrol, target);
  2958			}
  2959			len += resp_ctrl_m_pg(ap + len, pcontrol, target);
  2960			if (0xff == subpcode)
  2961				len += resp_grouping_m_pg(ap + len, pcontrol, target);
  2962			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
  2963			if (0xff == subpcode) {
  2964				len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
  2965							  target_dev_id);
  2966				len += resp_sas_sha_m_spg(ap + len, pcontrol);
  2967			}
  2968			len += resp_iec_m_pg(ap + len, pcontrol, target);
  2969			offset += len;
  2970			break;
  2971		default:
  2972			goto bad_pcode;
  2973		}
  2974	only_bd:
  2975		if (msense_6)
  2976			arr[0] = offset - 1;
  2977		else
  2978			put_unaligned_be16((offset - 2), arr + 0);
  2979		return fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, offset));
  2980	
  2981	bad_pcode:
  2982		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
  2983		return check_condition_result;
  2984	
  2985	bad_subpcode:
  2986		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
  2987		return check_condition_result;
  2988	}
  2989	

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




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux