Message ID | 20200917231841.4029747-5-kbusch@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | zoned block device specific errors | expand |
On 2020/09/18 8:18, Keith Busch wrote: > From: Damien Le Moal <damien.lemoal@wdc.com> > > ZBC or ZAC disks that have a limit on the number of open zones may fail > a zone open command or a write to a zone that is not already implicitly > or explicitly open if the total number of open zones is already at the > maximum allowed. > > For these operations, instead of returning the generic BLK_STS_IOERR, > return BLK_STS_ZONE_OPEN_RESOURCE which is returned as -ETOOMANYREFS to > the I/O issuer, allowing the device user to act appropriately on these > relatively benign zone resource errors. > > Cc: Christoph Hellwig <hch@lst.de> > Cc: Johannes Thumshirn <Johannes.Thumshirn@wdc.com> > Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Shouldn't you add your signed-off-by here ? > --- > drivers/scsi/scsi_lib.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c > index 7affaaf8b98e..c129ac6666da 100644 > --- a/drivers/scsi/scsi_lib.c > +++ b/drivers/scsi/scsi_lib.c > @@ -758,6 +758,15 @@ static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result) > /* See SSC3rXX or current. */ > action = ACTION_FAIL; > break; > + case DATA_PROTECT: > + action = ACTION_FAIL; > + if ((sshdr.asc == 0x0C && sshdr.ascq == 0x12) || > + (sshdr.asc == 0x55 && > + (sshdr.ascq == 0x0E || sshdr.ascq == 0x0F))) { > + /* Insufficient zone resources */ > + blk_stat = BLK_STS_ZONE_OPEN_RESOURCE; > + } > + break; > default: > action = ACTION_FAIL; > break; >
Keith, > ZBC or ZAC disks that have a limit on the number of open zones may > fail a zone open command or a write to a zone that is not already > implicitly or explicitly open if the total number of open zones is > already at the maximum allowed. > > For these operations, instead of returning the generic BLK_STS_IOERR, > return BLK_STS_ZONE_OPEN_RESOURCE which is returned as -ETOOMANYREFS > to the I/O issuer, allowing the device user to act appropriately on > these relatively benign zone resource errors. > > Cc: Christoph Hellwig <hch@lst.de> > Cc: Johannes Thumshirn <Johannes.Thumshirn@wdc.com> > Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Looks fine but needs your SoB as Damien pointed out. Acked-by: Martin K. Petersen <martin.petersen@oracle.com>
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 7affaaf8b98e..c129ac6666da 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -758,6 +758,15 @@ static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result) /* See SSC3rXX or current. */ action = ACTION_FAIL; break; + case DATA_PROTECT: + action = ACTION_FAIL; + if ((sshdr.asc == 0x0C && sshdr.ascq == 0x12) || + (sshdr.asc == 0x55 && + (sshdr.ascq == 0x0E || sshdr.ascq == 0x0F))) { + /* Insufficient zone resources */ + blk_stat = BLK_STS_ZONE_OPEN_RESOURCE; + } + break; default: action = ACTION_FAIL; break;