block: Convert RQF_PREEMPT into REQ_PREEMPT
This patch does not change any functionality but makes the REQ_PREEMPT flag available to blk_get_request(). A later patch will add code to blk_get_request() that checks the REQ_PREEMPT flag. Note: the IDE sense_rq request is allocated statically so there is no blk_get_request() call that corresponds to this request. Change-Id: I380e869515f106e882c03b5305dc8e675eefd915 Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Cc: Ming Lei <ming.lei@redhat.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Hannes Reinecke <hare@suse.com> Cc: Johannes Thumshirn <jthumshirn@suse.de> Patch-mainline: linux-block@vger.kernel.org @ 03/10/2017, 22:04 Signed-off-by: Pradeep P V K <ppvk@codeaurora.org>
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
parent
84c8ddec5b
commit
3e48d1e840
@@ -266,6 +266,7 @@ static const char *const cmd_flag_name[] = {
|
||||
CMD_FLAG_NAME(BACKGROUND),
|
||||
CMD_FLAG_NAME(NOUNMAP),
|
||||
CMD_FLAG_NAME(NOWAIT),
|
||||
CMD_FLAG_NAME(PREEMPT),
|
||||
};
|
||||
#undef CMD_FLAG_NAME
|
||||
|
||||
@@ -279,7 +280,6 @@ static const char *const rqf_name[] = {
|
||||
RQF_NAME(MIXED_MERGE),
|
||||
RQF_NAME(MQ_INFLIGHT),
|
||||
RQF_NAME(DONTPREP),
|
||||
RQF_NAME(PREEMPT),
|
||||
RQF_NAME(COPY_USER),
|
||||
RQF_NAME(FAILED),
|
||||
RQF_NAME(QUIET),
|
||||
|
||||
@@ -211,9 +211,8 @@ void ide_prep_sense(ide_drive_t *drive, struct request *rq)
|
||||
}
|
||||
|
||||
sense_rq->rq_disk = rq->rq_disk;
|
||||
sense_rq->cmd_flags = REQ_OP_DRV_IN;
|
||||
sense_rq->cmd_flags = REQ_OP_DRV_IN | REQ_PREEMPT;
|
||||
ide_req(sense_rq)->type = ATA_PRIV_SENSE;
|
||||
sense_rq->rq_flags |= RQF_PREEMPT;
|
||||
|
||||
req->cmd[0] = GPCMD_REQUEST_SENSE;
|
||||
req->cmd[4] = cmd_len;
|
||||
|
||||
@@ -539,7 +539,7 @@ repeat:
|
||||
*/
|
||||
if ((drive->dev_flags & IDE_DFLAG_BLOCKED) &&
|
||||
ata_pm_request(rq) == 0 &&
|
||||
(rq->rq_flags & RQF_PREEMPT) == 0) {
|
||||
(rq->cmd_flags & REQ_PREEMPT) == 0) {
|
||||
/* there should be no pending command at this point */
|
||||
ide_unlock_port(hwif);
|
||||
goto plug_device;
|
||||
|
||||
@@ -90,9 +90,9 @@ int generic_ide_resume(struct device *dev)
|
||||
}
|
||||
|
||||
memset(&rqpm, 0, sizeof(rqpm));
|
||||
rq = blk_get_request(drive->queue, REQ_OP_DRV_IN, __GFP_RECLAIM);
|
||||
rq = blk_get_request(drive->queue, REQ_OP_DRV_IN | REQ_PREEMPT,
|
||||
__GFP_RECLAIM);
|
||||
ide_req(rq)->type = ATA_PRIV_PM_RESUME;
|
||||
rq->rq_flags |= RQF_PREEMPT;
|
||||
rq->special = &rqpm;
|
||||
rqpm.pm_step = IDE_PM_START_RESUME;
|
||||
rqpm.pm_state = PM_EVENT_ON;
|
||||
|
||||
@@ -253,8 +253,9 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
|
||||
int ret = DRIVER_ERROR << 24;
|
||||
|
||||
req = blk_get_request(sdev->request_queue,
|
||||
data_direction == DMA_TO_DEVICE ?
|
||||
REQ_OP_SCSI_OUT : REQ_OP_SCSI_IN, __GFP_RECLAIM);
|
||||
(data_direction == DMA_TO_DEVICE ?
|
||||
REQ_OP_SCSI_OUT : REQ_OP_SCSI_IN) | REQ_PREEMPT,
|
||||
__GFP_RECLAIM);
|
||||
if (IS_ERR(req))
|
||||
return ret;
|
||||
rq = scsi_req(req);
|
||||
@@ -272,7 +273,7 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
|
||||
req->timeout = sdev->timeout_override;
|
||||
|
||||
req->cmd_flags |= flags;
|
||||
req->rq_flags |= rq_flags | RQF_QUIET | RQF_PREEMPT;
|
||||
req->rq_flags |= rq_flags | RQF_QUIET;
|
||||
|
||||
/*
|
||||
* head injection *required* here otherwise quiesce won't work
|
||||
@@ -1344,7 +1345,7 @@ scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
|
||||
/*
|
||||
* If the devices is blocked we defer normal commands.
|
||||
*/
|
||||
if (!(req->rq_flags & RQF_PREEMPT))
|
||||
if (!(req->cmd_flags & REQ_PREEMPT))
|
||||
ret = BLKPREP_DEFER;
|
||||
break;
|
||||
default:
|
||||
@@ -1353,7 +1354,7 @@ scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
|
||||
* special commands. In particular any user initiated
|
||||
* command is not allowed.
|
||||
*/
|
||||
if (!(req->rq_flags & RQF_PREEMPT))
|
||||
if (!(req->cmd_flags & REQ_PREEMPT))
|
||||
ret = BLKPREP_KILL;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -248,6 +248,11 @@ enum req_flag_bits {
|
||||
|
||||
__REQ_URGENT, /* urgent request */
|
||||
__REQ_NOWAIT, /* Don't wait if request will block */
|
||||
/*
|
||||
* set for "ide_preempt" requests and also for requests for which the
|
||||
* SCSI "quiesce" state must be ignored.
|
||||
*/
|
||||
__REQ_PREEMPT,
|
||||
__REQ_NR_BITS, /* stops here */
|
||||
};
|
||||
|
||||
@@ -268,6 +273,7 @@ enum req_flag_bits {
|
||||
|
||||
#define REQ_NOUNMAP (1ULL << __REQ_NOUNMAP)
|
||||
#define REQ_NOWAIT (1ULL << __REQ_NOWAIT)
|
||||
#define REQ_PREEMPT (1ULL << __REQ_PREEMPT)
|
||||
|
||||
#define REQ_FAILFAST_MASK \
|
||||
(REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
|
||||
|
||||
@@ -98,9 +98,6 @@ typedef __u32 __bitwise req_flags_t;
|
||||
#define RQF_MQ_INFLIGHT ((__force req_flags_t)(1 << 6))
|
||||
/* don't call prep for this one */
|
||||
#define RQF_DONTPREP ((__force req_flags_t)(1 << 7))
|
||||
/* set for "ide_preempt" requests and also for requests for which the SCSI
|
||||
"quiesce" state must be ignored. */
|
||||
#define RQF_PREEMPT ((__force req_flags_t)(1 << 8))
|
||||
/* contains copies of user pages */
|
||||
#define RQF_COPY_USER ((__force req_flags_t)(1 << 9))
|
||||
/* vaguely specified driver internal error. Ignored by the block layer */
|
||||
|
||||
Reference in New Issue
Block a user