diff options
Diffstat (limited to 'drivers/scsi/scsi_debug.c')
| -rw-r--r-- | drivers/scsi/scsi_debug.c | 22 | 
1 files changed, 20 insertions, 2 deletions
| diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 1f423f723d06..b8a76b89f85a 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -2826,6 +2826,24 @@ static void zbc_open_zone(struct sdebug_dev_info *devip,  	}  } +static inline void zbc_set_zone_full(struct sdebug_dev_info *devip, +				     struct sdeb_zone_state *zsp) +{ +	switch (zsp->z_cond) { +	case ZC2_IMPLICIT_OPEN: +		devip->nr_imp_open--; +		break; +	case ZC3_EXPLICIT_OPEN: +		devip->nr_exp_open--; +		break; +	default: +		WARN_ONCE(true, "Invalid zone %llu condition %x\n", +			  zsp->z_start, zsp->z_cond); +		break; +	} +	zsp->z_cond = ZC5_FULL; +} +  static void zbc_inc_wp(struct sdebug_dev_info *devip,  		       unsigned long long lba, unsigned int num)  { @@ -2838,7 +2856,7 @@ static void zbc_inc_wp(struct sdebug_dev_info *devip,  	if (zsp->z_type == ZBC_ZTYPE_SWR) {  		zsp->z_wp += num;  		if (zsp->z_wp >= zend) -			zsp->z_cond = ZC5_FULL; +			zbc_set_zone_full(devip, zsp);  		return;  	} @@ -2857,7 +2875,7 @@ static void zbc_inc_wp(struct sdebug_dev_info *devip,  			n = num;  		}  		if (zsp->z_wp >= zend) -			zsp->z_cond = ZC5_FULL; +			zbc_set_zone_full(devip, zsp);  		num -= n;  		lba += n; | 
