Message ID | 20220531175009.850-3-tyler.erickson@seagate.com |
---|---|
State | Superseded |
Headers | show |
Series | ata,sd: Fix reading concurrent positioning ranges | expand |
On 6/1/22 02:50, Tyler Erickson wrote: > Fixing the interpretation of the length of the B9h VPD page > (concurrent positioning ranges). Adding 4 is necessary as > the first 4 bytes of the page is the header with page number > and length information. Adding 3 was likely a misinterpretation > of the SBC-5 specification which sets all offsets starting at zero. > > This fixes the error in dmesg: > [ 9.014456] sd 1:0:0:0: [sda] Invalid Concurrent Positioning Ranges VPD page > > Signed-off-by: Tyler Erickson <tyler.erickson@seagate.com> > Reviewed-by: Muhammad Ahmad <muhammad.ahmad@seagate.com> > Tested-by: Michael English <michael.english@seagate.com> This needs a fixes tag and cc stable. Your patch format is also starnge. It is missing the "---" separator after the tags. This is not going to apply. Did you generate this with git format-patch ? > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > index dc6e55761fd1..14867e8cd687 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -3067,7 +3067,7 @@ static void sd_read_cpr(struct scsi_disk *sdkp) > goto out; > > /* We must have at least a 64B header and one 32B range descriptor */ > - vpd_len = get_unaligned_be16(&buffer[2]) + 3; > + vpd_len = get_unaligned_be16(&buffer[2]) + 4; > if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) { > sd_printk(KERN_ERR, sdkp, > "Invalid Concurrent Positioning Ranges VPD page\n");
Thanks for the feedback. I did use git format-patch. I will double check my work and see if I can figure out what caused the formatting issues and resubmit with the changes you have mentioned. Tyler Erickson Seagate Technology Seagate Internal -----Original Message----- From: Damien Le Moal <damien.lemoal@opensource.wdc.com> Sent: Tuesday, May 31, 2022 3:30 PM To: Tyler Erickson <tyler.erickson@seagate.com>; jejb@linux.ibm.com; martin.petersen@oracle.com Cc: linux-scsi@vger.kernel.org; linux-ide@vger.kernel.org; Muhammad Ahmad <muhammad.ahmad@seagate.com>; Michael English <michael.english@seagate.com> Subject: Re: [PATCH 2/2] [PATCH v1 2/2] sd: Fixing interpretation of VPD B9h length This message has originated from an External Source. Please use proper judgment and caution when opening attachments, clicking links, or responding to this email. On 6/1/22 02:50, Tyler Erickson wrote: > Fixing the interpretation of the length of the B9h VPD page > (concurrent positioning ranges). Adding 4 is necessary as the first 4 > bytes of the page is the header with page number and length > information. Adding 3 was likely a misinterpretation of the SBC-5 > specification which sets all offsets starting at zero. > > This fixes the error in dmesg: > [ 9.014456] sd 1:0:0:0: [sda] Invalid Concurrent Positioning Ranges > VPD page > > Signed-off-by: Tyler Erickson <tyler.erickson@seagate.com> > Reviewed-by: Muhammad Ahmad <muhammad.ahmad@seagate.com> > Tested-by: Michael English <michael.english@seagate.com> This needs a fixes tag and cc stable. Your patch format is also starnge. It is missing the "---" separator after the tags. This is not going to apply. Did you generate this with git format-patch ? > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index > dc6e55761fd1..14867e8cd687 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -3067,7 +3067,7 @@ static void sd_read_cpr(struct scsi_disk *sdkp) > goto out; > > /* We must have at least a 64B header and one 32B range descriptor */ > - vpd_len = get_unaligned_be16(&buffer[2]) + 3; > + vpd_len = get_unaligned_be16(&buffer[2]) + 4; > if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) { > sd_printk(KERN_ERR, sdkp, > "Invalid Concurrent Positioning Ranges VPD > page\n"); -- Damien Le Moal Western Digital Research
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index dc6e55761fd1..14867e8cd687 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -3067,7 +3067,7 @@ static void sd_read_cpr(struct scsi_disk *sdkp) goto out; /* We must have at least a 64B header and one 32B range descriptor */ - vpd_len = get_unaligned_be16(&buffer[2]) + 3; + vpd_len = get_unaligned_be16(&buffer[2]) + 4; if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) { sd_printk(KERN_ERR, sdkp, "Invalid Concurrent Positioning Ranges VPD page\n");