[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] pvSCSI: Clean up code
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1215088802 -3600 # Node ID c4134d1a3e3f8df10c7204595db9750311c5e68c # Parent 920abc7b20acaebabf844910e4b461378fae3007 pvSCSI: Clean up code Signed-off-by: Tomonari Horikoshi <t.horikoshi@xxxxxxxxxxxxxx> Signed-off-by: Jun Kamada <kama@xxxxxxxxxxxxxx> --- drivers/xen/scsiback/common.h | 4 -- drivers/xen/scsiback/interface.c | 2 - drivers/xen/scsiback/scsiback.c | 66 ++++++++++----------------------------- 3 files changed, 20 insertions(+), 52 deletions(-) diff -r 920abc7b20ac -r c4134d1a3e3f drivers/xen/scsiback/common.h --- a/drivers/xen/scsiback/common.h Thu Jul 03 13:36:53 2008 +0100 +++ b/drivers/xen/scsiback/common.h Thu Jul 03 13:40:02 2008 +0100 @@ -112,8 +112,6 @@ typedef struct { uint16_t rqid; - vscsiif_request_t *ring_req; - uint8_t nr_segments; uint8_t cmnd[VSCSIIF_MAX_COMMAND_SIZE]; uint8_t cmd_len; @@ -123,7 +121,7 @@ typedef struct { uint32_t request_bufflen; struct scatterlist *sgl; - grant_ref_t gref[VSCSIIF_SENSE_BUFFERSIZE]; + grant_ref_t gref[VSCSIIF_SG_TABLESIZE]; int32_t rslt; uint8_t sense_buffer[VSCSIIF_SENSE_BUFFERSIZE]; diff -r 920abc7b20ac -r c4134d1a3e3f drivers/xen/scsiback/interface.c --- a/drivers/xen/scsiback/interface.c Thu Jul 03 13:36:53 2008 +0100 +++ b/drivers/xen/scsiback/interface.c Thu Jul 03 13:40:02 2008 +0100 @@ -80,7 +80,7 @@ static int map_frontend_page( struct vsc info->shmem_ref = ring_ref; info->shmem_handle = op.handle; - return 0; + return (GNTST_okay); } static void unmap_frontend_page(struct vscsibk_info *info) diff -r 920abc7b20ac -r c4134d1a3e3f drivers/xen/scsiback/scsiback.c --- a/drivers/xen/scsiback/scsiback.c Thu Jul 03 13:36:53 2008 +0100 +++ b/drivers/xen/scsiback/scsiback.c Thu Jul 03 13:40:02 2008 +0100 @@ -46,8 +46,6 @@ #include "common.h" -#define NO_ASYNC 1 /*!aync*/ - struct list_head pending_free; DEFINE_SPINLOCK(pending_free_lock); DECLARE_WAIT_QUEUE_HEAD(pending_free_wq); @@ -207,20 +205,12 @@ static void scsiback_print_status(char * } -#ifdef NO_ASYNC /*!async*/ static void scsiback_cmd_done(struct request *req, int errors) { pending_req_t *pending_req = req->end_io_data; unsigned char *sense_buffer; sense_buffer = req->sense; -#else -static void scsiback_cmd_done(void *data, char *sense_buffer, - int errors, int resid) -{ - pending_req_t *pending_req = data; - struct scsi_device *sdev = pending_req->sdev; -#endif if (errors != 0) { if (log_print_stat) @@ -233,9 +223,7 @@ static void scsiback_cmd_done(void *data scsiback_do_resp_with_sense(sense_buffer, errors, pending_req); scsiback_put(pending_req->info); -#ifdef NO_ASYNC /*!async*/ __blk_put_request(req->q, req); -#endif } @@ -309,8 +297,6 @@ fail_flush: scsiback_fast_flush_area(pending_req); return -ENOMEM; } - -#ifdef NO_ASYNC /*!async*/ /* quoted scsi_lib.c/scsi_merge_bio */ static int scsiback_merge_bio(struct request *rq, struct bio *bio) @@ -422,7 +408,6 @@ free_bios: return err; } -#endif void scsiback_cmd_exec(pending_req_t *pending_req) { @@ -430,14 +415,8 @@ void scsiback_cmd_exec(pending_req_t *pe int data_dir = (int)pending_req->sc_data_direction; unsigned int nr_segments = (unsigned int)pending_req->nr_segments; unsigned int timeout; - -#ifdef NO_ASYNC /*!async*/ struct request *rq; int write; -#else - int err = 0; - unsigned int data_len = pending_req->request_bufflen; -#endif DPRINTK("%s\n",__FUNCTION__); @@ -447,7 +426,6 @@ void scsiback_cmd_exec(pending_req_t *pe else timeout = VSCSIIF_TIMEOUT; -#ifdef NO_ASYNC /*!async*/ write = (data_dir == DMA_TO_DEVICE); rq = blk_get_request(pending_req->sdev->request_queue, write, GFP_KERNEL); @@ -474,18 +452,6 @@ void scsiback_cmd_exec(pending_req_t *pe scsiback_get(pending_req->info); blk_execute_rq_nowait(rq->q, NULL, rq, 1, scsiback_cmd_done); -#else /*async*/ - - scsiback_get(pending_req->info); - err = scsi_execute_async(pending_req->sdev, &(pending_req->cmnd[0]), - cmd_len, data_dir, pending_req->sgl, data_len, nr_segments, timeout, 0, - pending_req, scsiback_cmd_done, GFP_KERNEL); - - if (err) { - scsiback_do_resp_with_sense(NULL, (DRIVER_ERROR << 24), pending_req); - } - -#endif /*async*/ return ; } @@ -531,6 +497,7 @@ static int prepare_pending_reqs(struct v vir.tgt = ring_req->id; vir.lun = ring_req->lun; + rmb(); sdev = scsiback_do_translation(info, &vir); if (!sdev) { pending_req->sdev = NULL; @@ -541,34 +508,37 @@ static int prepare_pending_reqs(struct v pending_req->sdev = sdev; /* request range check from frontend */ - if ((ring_req->sc_data_direction != DMA_BIDIRECTIONAL) && - (ring_req->sc_data_direction != DMA_TO_DEVICE) && - (ring_req->sc_data_direction != DMA_FROM_DEVICE) && - (ring_req->sc_data_direction != DMA_NONE)) { + pending_req->sc_data_direction = ring_req->sc_data_direction; + rmb(); + if ((pending_req->sc_data_direction != DMA_BIDIRECTIONAL) && + (pending_req->sc_data_direction != DMA_TO_DEVICE) && + (pending_req->sc_data_direction != DMA_FROM_DEVICE) && + (pending_req->sc_data_direction != DMA_NONE)) { DPRINTK("scsiback: invalid parameter data_dir = %d\n", - ring_req->sc_data_direction); + pending_req->sc_data_direction); err = -EINVAL; goto invald_value; } - if (ring_req->nr_segments > VSCSIIF_SG_TABLESIZE) { + pending_req->nr_segments = ring_req->nr_segments; + rmb(); + if (pending_req->nr_segments > VSCSIIF_SG_TABLESIZE) { DPRINTK("scsiback: invalid parameter nr_seg = %d\n", - ring_req->nr_segments); + pending_req->nr_segments); err = -EINVAL; goto invald_value; } - pending_req->nr_segments = ring_req->nr_segments; - - if (ring_req->cmd_len > VSCSIIF_MAX_COMMAND_SIZE) { + + pending_req->cmd_len = ring_req->cmd_len; + rmb(); + if (pending_req->cmd_len > VSCSIIF_MAX_COMMAND_SIZE) { DPRINTK("scsiback: invalid parameter cmd_len = %d\n", - ring_req->cmd_len); + pending_req->cmd_len); err = -EINVAL; goto invald_value; } - memcpy(pending_req->cmnd, ring_req->cmnd, ring_req->cmd_len); - pending_req->cmd_len = ring_req->cmd_len; + memcpy(pending_req->cmnd, ring_req->cmnd, pending_req->cmd_len); - pending_req->sc_data_direction = ring_req->sc_data_direction; pending_req->timeout_per_command = ring_req->timeout_per_command; if(scsiback_gnttab_data_map(ring_req, pending_req)) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |