> +static inline struct scsi_cmnd *scsi_get_reserved_cmd(struct scsi_device *sdev) > +{ > + struct request *rq; > + struct scsi_cmnd *scmd; > + > + rq = blk_mq_alloc_request(sdev->request_queue, > + REQ_OP_SCSI_OUT | REQ_NOWAIT, > + BLK_MQ_REQ_RESERVED); REQ_OP_SCSI_OUT is used for data transfers to the device, is that really what you want? REQ_NOWAIT not only seems misplaced, but also generally wrong. Maybe for some callers you don't want to wait, but that really should be passed in. Also why does this take a scsi device? Host reserved command usually would be on a per-host, not a per-LU basis. > + if (IS_ERR(rq)) > + return NULL; > + scmd = blk_mq_rq_to_pdu(rq); > + scmd->request = rq; > + return scmd; > +} > + > +static inline void scsi_put_reserved_cmd(struct scsi_cmnd *scmd) > +{ > + struct request *rq = blk_mq_rq_from_pdu(scmd); > + > + blk_mq_free_request(rq); > +} Also both helpers really should be out of line somewhere.