Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=355dfa1bc8026d185678fed4e409719a595b2d39
Commit:     355dfa1bc8026d185678fed4e409719a595b2d39
Parent:     a6123f142924a5e21f6d48e6e3c67d9060726caa
Author:     James Bottomley <[EMAIL PROTECTED]>
AuthorDate: Tue May 22 14:43:14 2007 -0500
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Thu May 24 09:10:02 2007 -0500

    [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: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/scsi_error.c |   26 +++-----------------------
 1 files changed, 3 insertions(+), 23 deletions(-)

diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index e8350c5..9adb64a 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -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;
@@ -720,18 +712,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
         */
        scmd->request_buffer = old_buffer;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to