return ret;
 }
 
+static blk_status_t sd_zbc_cmnd_checks(struct scsi_cmnd *cmd)
+{
+       struct request *rq = cmd->request;
+       struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
+       sector_t sector = blk_rq_pos(rq);
+
+       if (!sd_is_zoned(sdkp))
+               /* Not a zoned device */
+               return BLK_STS_IOERR;
+
+       if (sdkp->device->changed)
+               return BLK_STS_IOERR;
+
+       if (sector & (sd_zbc_zone_sectors(sdkp) - 1))
+               /* Unaligned request */
+               return BLK_STS_IOERR;
+
+       return BLK_STS_OK;
+}
+
 /**
  * sd_zbc_setup_zone_mgmt_cmnd - Prepare a zone ZBC_OUT command. The operations
  *                     can be RESET WRITE POINTER, OPEN, CLOSE or FINISH.
                                         unsigned char op, bool all)
 {
        struct request *rq = cmd->request;
-       struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
        sector_t sector = blk_rq_pos(rq);
+       struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
        sector_t block = sectors_to_logical(sdkp->device, sector);
+       blk_status_t ret;
 
-       if (!sd_is_zoned(sdkp))
-               /* Not a zoned device */
-               return BLK_STS_IOERR;
-
-       if (sdkp->device->changed)
-               return BLK_STS_IOERR;
-
-       if (sector & (sd_zbc_zone_sectors(sdkp) - 1))
-               /* Unaligned request */
-               return BLK_STS_IOERR;
+       ret = sd_zbc_cmnd_checks(cmd);
+       if (ret != BLK_STS_OK)
+               return ret;
 
        cmd->cmd_len = 16;
        memset(cmd->cmnd, 0, cmd->cmd_len);