Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0ed79a3 authored by James Bottomley's avatar James Bottomley Committed by James Bottomley
Browse files

[SCSI] sd: fix issue_flush



sd_issue_flush() is called from atomic context so we can't use the
semaphore based routines to get a reference to the scsi_disk.  Assume
something else already got the reference so we can safely use it.

Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 2ef89198
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -769,20 +769,16 @@ static void sd_end_flush(request_queue_t *q, struct request *flush_rq)
static int sd_prepare_flush(request_queue_t *q, struct request *rq)
{
	struct scsi_device *sdev = q->queuedata;
	struct scsi_disk *sdkp = scsi_disk_get_from_dev(&sdev->sdev_gendev);
	int ret = 0;
	struct scsi_disk *sdkp = dev_get_drvdata(&sdev->sdev_gendev);

	if (!sdkp || !sdkp->WCE)
		return 0;

	if (sdkp) {
		if (sdkp->WCE) {
	memset(rq->cmd, 0, sizeof(rq->cmd));
	rq->flags |= REQ_BLOCK_PC | REQ_SOFTBARRIER;
	rq->timeout = SD_TIMEOUT;
	rq->cmd[0] = SYNCHRONIZE_CACHE;
			ret = 1;
		}
		scsi_disk_put(sdkp);
	}
	return ret;
	return 1;
}

static void sd_rescan(struct device *dev)