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

Commit 355dfa1b authored by James Bottomley's avatar James Bottomley Committed by James Bottomley
Browse files

[SCSI] scsi_error: send the sense buffer down without copying



Now that the block submission path correctly bounces, we can simply
use the command sense_buffer to send to retrieve sense information and
junk the unnecessary page allocation.

Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent a6123f14
Loading
Loading
Loading
Loading
+3 −23
Original line number Diff line number Diff line
@@ -18,12 +18,12 @@
#include <linux/sched.h>
#include <linux/timer.h>
#include <linux/string.h>
#include <linux/slab.h>
#include <linux/kernel.h>
#include <linux/kthread.h>
#include <linux/interrupt.h>
#include <linux/blkdev.h>
#include <linux/delay.h>
#include <linux/scatterlist.h>

#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
@@ -640,16 +640,8 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
	memcpy(scmd->cmnd, cmnd, cmnd_size);

	if (copy_sense) {
		gfp_t gfp_mask = GFP_ATOMIC;

		if (shost->hostt->unchecked_isa_dma)
			gfp_mask |= __GFP_DMA;

		sgl.page = alloc_page(gfp_mask);
		if (!sgl.page)
			return FAILED;
		sgl.offset = 0;
		sgl.length = 252;
		sg_init_one(&sgl, scmd->sense_buffer,
			    sizeof(scmd->sense_buffer));

		scmd->sc_data_direction = DMA_FROM_DEVICE;
		scmd->request_bufflen = sgl.length;
@@ -719,18 +711,6 @@ static int scsi_send_eh_cmnd(struct scsi_cmnd *scmd, unsigned char *cmnd,
	}


	/*
	 * Last chance to have valid sense data.
	 */
	if (copy_sense) {
		if (!SCSI_SENSE_VALID(scmd)) {
			memcpy(scmd->sense_buffer, page_address(sgl.page),
			       sizeof(scmd->sense_buffer));
		}
		__free_page(sgl.page);
	}


	/*
	 * Restore original data
	 */