* [PATCH 0/8] sg cleanup patches after the block conversion
@ 2008-09-02 13:50 FUJITA Tomonori
2008-09-02 13:50 ` [PATCH 1/8] sg: rename sg_cmd_done sg_rq_end_io FUJITA Tomonori
2008-09-09 13:35 ` [PATCH 0/8] sg cleanup patches after the block conversion FUJITA Tomonori
0 siblings, 2 replies; 11+ messages in thread
From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw)
To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori
Here's some cleanup patches, removing functions that became
unnecessary after the block conversion, functions used temporally
during the conversion, etc.
This is against the for-2.6.28 brach in the block tree:
commit 55befd9dce8c75748e02f7c733f5f5ba76be6ec7
Author: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Date: Tue Sep 2 16:20:20 2008 +0900
sg: set dxferp to NULL for READ with the older SG interface
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH 1/8] sg: rename sg_cmd_done sg_rq_end_io 2008-09-02 13:50 [PATCH 0/8] sg cleanup patches after the block conversion FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 2/8] sg: remove SG_ALLOW_DIO_CODE define FUJITA Tomonori 2008-09-09 13:35 ` [PATCH 0/8] sg cleanup patches after the block conversion FUJITA Tomonori 1 sibling, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori old sg_rq_end_io() was used to wrap sg_cmd_done during converting sg to use the block layer (in order to cover the difference scsi_execute_async and blk_execute_rq_nowait). Now we don't need it so let's remove it. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 23 ++++++++++++----------- 1 files changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 50c07bc..d18f90d 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -177,7 +177,7 @@ typedef struct sg_device { /* holds the state of each scsi generic device */ static int sg_fasync(int fd, struct file *filp, int mode); /* tasklet or soft irq callback */ -static void sg_cmd_done(void *data, char *sense, int result, int resid); +static void sg_rq_end_io(struct request *rq, int uptodate); static int sg_start_req(Sg_request *srp, unsigned char *cmd); static void sg_finish_rem_req(Sg_request * srp); static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size); @@ -227,11 +227,6 @@ static int sg_allow_access(struct file *filp, unsigned char *cmd) cmd, filp->f_mode & FMODE_WRITE); } -static void sg_rq_end_io(struct request *rq, int uptodate) -{ - sg_cmd_done(rq->end_io_data, rq->sense, rq->errors, rq->data_len); -} - static int sg_open(struct inode *inode, struct file *filp) { @@ -1257,16 +1252,19 @@ sg_mmap(struct file *filp, struct vm_area_struct *vma) return 0; } -/* This function is a "bottom half" handler that is called by the - * mid level when a command is completed (or has failed). */ -static void -sg_cmd_done(void *data, char *sense, int result, int resid) +/* + * This function is a "bottom half" handler that is called by the mid + * level when a command is completed (or has failed). + */ +static void sg_rq_end_io(struct request *rq, int uptodate) { - Sg_request *srp = data; + struct sg_request *srp = rq->end_io_data; Sg_device *sdp = NULL; Sg_fd *sfp; unsigned long iflags; unsigned int ms; + char *sense; + int result, resid; if (NULL == srp) { printk(KERN_ERR "sg_cmd_done: NULL request\n"); @@ -1280,6 +1278,9 @@ sg_cmd_done(void *data, char *sense, int result, int resid) return; } + sense = rq->sense; + result = rq->errors; + resid = rq->data_len; SCSI_LOG_TIMEOUT(4, printk("sg_cmd_done: %s, pack_id=%d, res=0x%x\n", sdp->disk->disk_name, srp->header.pack_id, result)); -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/8] sg: remove SG_ALLOW_DIO_CODE define 2008-09-02 13:50 ` [PATCH 1/8] sg: rename sg_cmd_done sg_rq_end_io FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 3/8] sg: remove b_malloc_len in sg_scatter_hold struct FUJITA Tomonori 0 siblings, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori sg had lots of the own functions for the direct IO but now sg uses the block layer functions for it. There are only five lines for the direct IO. SG_ALLOW_DIO_CODE define was used to compile out the direct IO code but we don't need the define. If someone wants to remove the direct IO code, he can do easily without the define. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index d18f90d..2c30331 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -68,7 +68,6 @@ static void sg_proc_cleanup(void); #endif #define SG_ALLOW_DIO_DEF 0 -#define SG_ALLOW_DIO_CODE /* compile out by commenting this define */ #define SG_MAX_DEVS 32768 @@ -1674,13 +1673,12 @@ static int sg_start_req(Sg_request *srp, unsigned char *cmd) if ((dxfer_len <= 0) || (dxfer_dir == SG_DXFER_NONE)) return 0; -#ifdef SG_ALLOW_DIO_CODE if (sg_allow_dio && (hp->flags & SG_FLAG_DIRECT_IO) && (dxfer_dir != SG_DXFER_UNKNOWN) && (0 == hp->iovec_count) && (!sfp->parentdp->device->host->unchecked_isa_dma) && blk_rq_aligned(q, hp->dxferp, dxfer_len)) return sg_build_direct(srp, sfp, dxfer_len); -#endif + if ((!sg_res_in_use(sfp)) && (dxfer_len <= rsv_schp->bufflen)) sg_link_reserve(sfp, srp, dxfer_len); else -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/8] sg: remove b_malloc_len in sg_scatter_hold struct 2008-09-02 13:50 ` [PATCH 2/8] sg: remove SG_ALLOW_DIO_CODE define FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 4/8] sg: remove __sg_start_req FUJITA Tomonori 0 siblings, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori It's not used for anything useful after the block layer conversion. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 2c30331..ccce31a 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -116,7 +116,6 @@ typedef struct sg_scatter_hold { /* holding area for scsi scatter gather info */ unsigned short k_use_sg; /* Count of kernel scatter-gather pieces */ unsigned sglist_len; /* size of malloc'd scatter-gather list ++ */ unsigned bufflen; /* Size of (aggregate) data buffer */ - unsigned b_malloc_len; /* actual len malloc'ed in buffer */ struct page **pages; int page_order; char dio_in_use; /* 0->indirect IO (or mmap), 1->dio */ @@ -1986,7 +1985,6 @@ sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size) req_schp->pages = rsv_schp->pages; req_schp->bufflen = size; - req_schp->b_malloc_len = rsv_schp->b_malloc_len; req_schp->page_order = rsv_schp->page_order; break; } else -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/8] sg: remove __sg_start_req 2008-09-02 13:50 ` [PATCH 3/8] sg: remove b_malloc_len in sg_scatter_hold struct FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 5/8] sg: incorporate sg_build_direct into sg_start_req FUJITA Tomonori 0 siblings, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori __sg_start_req() was used temporarily to call blk_get_request() during converting sg to use the block layer. Now sg always calls blk_get_request() so we can move blk_get_request() to sg_start_req(). We don't need __sg_start_req anymore. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 38 +++++++++++++------------------------- 1 files changed, 13 insertions(+), 25 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index ccce31a..9a56c0d 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -1626,14 +1626,23 @@ exit_sg(void) idr_destroy(&sg_index_idr); } -static int __sg_start_req(struct sg_request *srp, struct sg_io_hdr *hp, - unsigned char *cmd) +static int sg_start_req(Sg_request *srp, unsigned char *cmd) { - struct sg_fd *sfp = srp->parentfp; - struct request_queue *q = sfp->parentdp->device->request_queue; + int res = 0; struct request *rq; + Sg_fd *sfp = srp->parentfp; + sg_io_hdr_t *hp = &srp->header; + int dxfer_len = (int) hp->dxfer_len; + int dxfer_dir = hp->dxfer_direction; + Sg_scatter_hold *req_schp = &srp->data; + Sg_scatter_hold *rsv_schp = &sfp->reserve; + struct request_queue *q = sfp->parentdp->device->request_queue; + struct rq_map_data map_data; int rw = hp->dxfer_direction == SG_DXFER_TO_DEV ? WRITE : READ; + SCSI_LOG_TIMEOUT(4, printk(KERN_INFO "sg_start_req: dxfer_len=%d\n", + dxfer_len)); + rq = blk_get_request(q, rw, GFP_ATOMIC); if (!rq) return -ENOMEM; @@ -1648,27 +1657,6 @@ static int __sg_start_req(struct sg_request *srp, struct sg_io_hdr *hp, rq->sense = srp->sense_b; rq->retries = SG_DEFAULT_RETRIES; - return 0; -} - -static int sg_start_req(Sg_request *srp, unsigned char *cmd) -{ - int res; - Sg_fd *sfp = srp->parentfp; - sg_io_hdr_t *hp = &srp->header; - int dxfer_len = (int) hp->dxfer_len; - int dxfer_dir = hp->dxfer_direction; - Sg_scatter_hold *req_schp = &srp->data; - Sg_scatter_hold *rsv_schp = &sfp->reserve; - struct request_queue *q = sfp->parentdp->device->request_queue; - struct rq_map_data map_data; - - SCSI_LOG_TIMEOUT(4, printk("sg_start_req: dxfer_len=%d\n", dxfer_len)); - - res = __sg_start_req(srp, hp, cmd); - if (res) - return res; - if ((dxfer_len <= 0) || (dxfer_dir == SG_DXFER_NONE)) return 0; -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/8] sg: incorporate sg_build_direct into sg_start_req 2008-09-02 13:50 ` [PATCH 4/8] sg: remove __sg_start_req FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 6/8] sg: remove sg_write_xfer FUJITA Tomonori 0 siblings, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori Calling blk_rq_map_user() at a single place is better than at different two places. It makes the code more understandable. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 82 ++++++++++++++++++++++------------------------------- 1 files changed, 34 insertions(+), 48 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 9a56c0d..c0b6866 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -202,7 +202,6 @@ static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id); static Sg_request *sg_add_request(Sg_fd * sfp); static int sg_remove_request(Sg_fd * sfp, Sg_request * srp); static int sg_res_in_use(Sg_fd * sfp); -static int sg_build_direct(Sg_request * srp, Sg_fd * sfp, int dxfer_len); static Sg_device *sg_get_dev(int dev); #ifdef CONFIG_SCSI_PROC_FS static int sg_last_dev(void); @@ -1628,16 +1627,17 @@ exit_sg(void) static int sg_start_req(Sg_request *srp, unsigned char *cmd) { - int res = 0; + int res; struct request *rq; Sg_fd *sfp = srp->parentfp; sg_io_hdr_t *hp = &srp->header; int dxfer_len = (int) hp->dxfer_len; int dxfer_dir = hp->dxfer_direction; + unsigned int iov_count = hp->iovec_count; Sg_scatter_hold *req_schp = &srp->data; Sg_scatter_hold *rsv_schp = &sfp->reserve; struct request_queue *q = sfp->parentdp->device->request_queue; - struct rq_map_data map_data; + struct rq_map_data *md, map_data; int rw = hp->dxfer_direction == SG_DXFER_TO_DEV ? WRITE : READ; SCSI_LOG_TIMEOUT(4, printk(KERN_INFO "sg_start_req: dxfer_len=%d\n", @@ -1660,38 +1660,43 @@ static int sg_start_req(Sg_request *srp, unsigned char *cmd) if ((dxfer_len <= 0) || (dxfer_dir == SG_DXFER_NONE)) return 0; - if (sg_allow_dio && (hp->flags & SG_FLAG_DIRECT_IO) && - (dxfer_dir != SG_DXFER_UNKNOWN) && (0 == hp->iovec_count) && - (!sfp->parentdp->device->host->unchecked_isa_dma) && + if (sg_allow_dio && hp->flags & SG_FLAG_DIRECT_IO && + dxfer_dir != SG_DXFER_UNKNOWN && !iov_count && + !sfp->parentdp->device->host->unchecked_isa_dma && blk_rq_aligned(q, hp->dxferp, dxfer_len)) - return sg_build_direct(srp, sfp, dxfer_len); + md = NULL; + else + md = &map_data; + + if (md) { + if (!sg_res_in_use(sfp) && dxfer_len <= rsv_schp->bufflen) + sg_link_reserve(sfp, srp, dxfer_len); + else { + res = sg_build_indirect(req_schp, sfp, dxfer_len); + if (res) + return res; + } - if ((!sg_res_in_use(sfp)) && (dxfer_len <= rsv_schp->bufflen)) - sg_link_reserve(sfp, srp, dxfer_len); + md->pages = req_schp->pages; + md->page_order = req_schp->page_order; + md->nr_entries = req_schp->k_use_sg; + } + + if (iov_count) + res = blk_rq_map_user_iov(q, rq, md, hp->dxferp, iov_count, + hp->dxfer_len, GFP_ATOMIC); else - res = sg_build_indirect(req_schp, sfp, dxfer_len); + res = blk_rq_map_user(q, rq, md, hp->dxferp, + hp->dxfer_len, GFP_ATOMIC); if (!res) { - struct request *rq = srp->rq; - Sg_scatter_hold *schp = &srp->data; - int iovec_count = (int) hp->iovec_count; - - map_data.pages = schp->pages; - map_data.page_order = schp->page_order; - map_data.nr_entries = schp->k_use_sg; - - if (iovec_count) - res = blk_rq_map_user_iov(q, rq, &map_data, hp->dxferp, - iovec_count, - hp->dxfer_len, GFP_ATOMIC); - else - res = blk_rq_map_user(q, rq, &map_data, hp->dxferp, - hp->dxfer_len, GFP_ATOMIC); + srp->bio = rq->bio; - if (!res) - srp->bio = rq->bio; + if (!md) { + req_schp->dio_in_use = 1; + hp->info |= SG_INFO_DIRECT_IO; + } } - return res; } @@ -1730,25 +1735,6 @@ sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize) return tablesize; /* number of scat_gath elements allocated */ } -/* Returns: -ve -> error, 0 -> done, 1 -> try indirect */ -static int -sg_build_direct(Sg_request * srp, Sg_fd * sfp, int dxfer_len) -{ - sg_io_hdr_t *hp = &srp->header; - Sg_scatter_hold *schp = &srp->data; - int res; - struct request *rq = srp->rq; - struct request_queue *q = sfp->parentdp->device->request_queue; - - res = blk_rq_map_user(q, rq, NULL, hp->dxferp, dxfer_len, GFP_ATOMIC); - if (res) - return res; - srp->bio = rq->bio; - schp->dio_in_use = 1; - hp->info |= SG_INFO_DIRECT_IO; - return 0; -} - static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size) { -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/8] sg: remove sg_write_xfer 2008-09-02 13:50 ` [PATCH 5/8] sg: incorporate sg_build_direct into sg_start_req FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 7/8] sg: remove sg_read_xfer FUJITA Tomonori 0 siblings, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori sg_write_xfer was used to copy data from user space for WRITE commands. blk_rq_map_user_iov and blk_rq_map_user do the job so sg_write_xfer does nothing useful. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 32 -------------------------------- 1 files changed, 0 insertions(+), 32 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index c0b6866..07bd683 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -188,7 +188,6 @@ static ssize_t sg_new_write(Sg_fd *sfp, struct file *file, int read_only, Sg_request **o_srp); static int sg_common_write(Sg_fd * sfp, Sg_request * srp, unsigned char *cmnd, int timeout, int blocking); -static int sg_write_xfer(Sg_request * srp); static int sg_read_xfer(Sg_request * srp); static int sg_read_oxfer(Sg_request * srp, char __user *outp, int num_read_xfer); static void sg_remove_scat(Sg_scatter_hold * schp); @@ -736,11 +735,6 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp, sg_finish_rem_req(srp); return k; /* probably out of space --> ENOMEM */ } - if ((k = sg_write_xfer(srp))) { - SCSI_LOG_TIMEOUT(1, printk("sg_common_write: write_xfer, bad address\n")); - sg_finish_rem_req(srp); - return k; - } if (sdp->detached) { sg_finish_rem_req(srp); return -ENODEV; @@ -1816,32 +1810,6 @@ out: return -ENOMEM; } -static int -sg_write_xfer(Sg_request * srp) -{ - sg_io_hdr_t *hp = &srp->header; - Sg_scatter_hold *schp = &srp->data; - int num_xfer = 0; - int dxfer_dir = hp->dxfer_direction; - int new_interface = ('\0' == hp->interface_id) ? 0 : 1; - - if ((SG_DXFER_UNKNOWN == dxfer_dir) || (SG_DXFER_TO_DEV == dxfer_dir) || - (SG_DXFER_TO_FROM_DEV == dxfer_dir)) { - num_xfer = (int) (new_interface ? hp->dxfer_len : hp->flags); - if (schp->bufflen < num_xfer) - num_xfer = schp->bufflen; - } - if ((num_xfer <= 0) || (schp->dio_in_use) || - (new_interface - && ((SG_FLAG_NO_DXFER | SG_FLAG_MMAP_IO) & hp->flags))) - return 0; - - SCSI_LOG_TIMEOUT(4, printk("sg_write_xfer: num_xfer=%d, k_use_sg=%d\n", - num_xfer, schp->k_use_sg)); - - return 0; -} - static void sg_remove_scat(Sg_scatter_hold * schp) { -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 7/8] sg: remove sg_read_xfer 2008-09-02 13:50 ` [PATCH 6/8] sg: remove sg_write_xfer FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 8/8] sg: remove unnecessary blk_rq_unmap_user FUJITA Tomonori 0 siblings, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori sg_read_xfer was used to copy data to user space for READ commands. blk_rq_unmap_user does the job so sg_read_xfer does nothing useful. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 33 +++++---------------------------- 1 files changed, 5 insertions(+), 28 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 07bd683..df8bf67 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -188,7 +188,6 @@ static ssize_t sg_new_write(Sg_fd *sfp, struct file *file, int read_only, Sg_request **o_srp); static int sg_common_write(Sg_fd * sfp, Sg_request * srp, unsigned char *cmnd, int timeout, int blocking); -static int sg_read_xfer(Sg_request * srp); static int sg_read_oxfer(Sg_request * srp, char __user *outp, int num_read_xfer); static void sg_remove_scat(Sg_scatter_hold * schp); static void sg_build_reserve(Sg_fd * sfp, int req_size); @@ -523,8 +522,11 @@ sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp) err = -EFAULT; goto err_out; } - err = sg_read_xfer(srp); - err_out: + if (srp->bio) { + err = blk_rq_unmap_user(srp->bio); + srp->bio = NULL; + } +err_out: sg_finish_rem_req(srp); return (0 == err) ? count : err; } @@ -1832,31 +1834,6 @@ sg_remove_scat(Sg_scatter_hold * schp) } static int -sg_read_xfer(Sg_request * srp) -{ - sg_io_hdr_t *hp = &srp->header; - Sg_scatter_hold *schp = &srp->data; - int num_xfer = 0; - int dxfer_dir = hp->dxfer_direction; - int new_interface = ('\0' == hp->interface_id) ? 0 : 1; - - if ((SG_DXFER_UNKNOWN == dxfer_dir) || (SG_DXFER_FROM_DEV == dxfer_dir) - || (SG_DXFER_TO_FROM_DEV == dxfer_dir)) { - num_xfer = hp->dxfer_len; - if (schp->bufflen < num_xfer) - num_xfer = schp->bufflen; - } - if ((num_xfer <= 0) || (schp->dio_in_use) || - (new_interface - && ((SG_FLAG_NO_DXFER | SG_FLAG_MMAP_IO) & hp->flags))) - return 0; - - SCSI_LOG_TIMEOUT(4, printk("sg_read_xfer: num_xfer=%d, iovec_count=%d, k_use_sg=%d\n", - num_xfer, (int)hp->iovec_count, schp->k_use_sg)); - return 0; -} - -static int sg_read_oxfer(Sg_request * srp, char __user *outp, int num_read_xfer) { Sg_scatter_hold *schp = &srp->data; -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 8/8] sg: remove unnecessary blk_rq_unmap_user 2008-09-02 13:50 ` [PATCH 7/8] sg: remove sg_read_xfer FUJITA Tomonori @ 2008-09-02 13:50 ` FUJITA Tomonori 0 siblings, 0 replies; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-02 13:50 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley, fujita.tomonori blk_rq_unmap_user in sg_finish_rem_req can take care of all the cases. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- drivers/scsi/sg.c | 7 ------- 1 files changed, 0 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index df8bf67..ba9b9bb 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -522,10 +522,6 @@ sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp) err = -EFAULT; goto err_out; } - if (srp->bio) { - err = blk_rq_unmap_user(srp->bio); - srp->bio = NULL; - } err_out: sg_finish_rem_req(srp); return (0 == err) ? count : err; @@ -1844,9 +1840,6 @@ sg_read_oxfer(Sg_request * srp, char __user *outp, int num_read_xfer) if ((!outp) || (num_read_xfer <= 0)) return 0; - blk_rq_unmap_user(srp->bio); - srp->bio = NULL; - num = 1 << (PAGE_SHIFT + schp->page_order); for (k = 0; k < schp->k_use_sg && schp->pages[k]; k++) { if (num > num_read_xfer) { -- 1.5.4.2 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 0/8] sg cleanup patches after the block conversion 2008-09-02 13:50 [PATCH 0/8] sg cleanup patches after the block conversion FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 1/8] sg: rename sg_cmd_done sg_rq_end_io FUJITA Tomonori @ 2008-09-09 13:35 ` FUJITA Tomonori 2008-09-09 13:42 ` Jens Axboe 1 sibling, 1 reply; 11+ messages in thread From: FUJITA Tomonori @ 2008-09-09 13:35 UTC (permalink / raw) To: jens.axboe; +Cc: linux-scsi, dougg, michaelc, James.Bottomley On Tue, 2 Sep 2008 22:50:00 +0900 FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> wrote: > Here's some cleanup patches, removing functions that became > unnecessary after the block conversion, functions used temporally > during the conversion, etc. > > This is against the for-2.6.28 brach in the block tree: Jens, can you apply this to your for-2.6.28? Thanks, ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/8] sg cleanup patches after the block conversion 2008-09-09 13:35 ` [PATCH 0/8] sg cleanup patches after the block conversion FUJITA Tomonori @ 2008-09-09 13:42 ` Jens Axboe 0 siblings, 0 replies; 11+ messages in thread From: Jens Axboe @ 2008-09-09 13:42 UTC (permalink / raw) To: FUJITA Tomonori; +Cc: linux-scsi, dougg, michaelc, James.Bottomley On Tue, Sep 09 2008, FUJITA Tomonori wrote: > On Tue, 2 Sep 2008 22:50:00 +0900 > FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> wrote: > > > Here's some cleanup patches, removing functions that became > > unnecessary after the block conversion, functions used temporally > > during the conversion, etc. > > > > This is against the for-2.6.28 brach in the block tree: > > Jens, can you apply this to your for-2.6.28? Certainly, I thought I already had... -- Jens Axboe ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-09-09 13:42 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-09-02 13:50 [PATCH 0/8] sg cleanup patches after the block conversion FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 1/8] sg: rename sg_cmd_done sg_rq_end_io FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 2/8] sg: remove SG_ALLOW_DIO_CODE define FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 3/8] sg: remove b_malloc_len in sg_scatter_hold struct FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 4/8] sg: remove __sg_start_req FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 5/8] sg: incorporate sg_build_direct into sg_start_req FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 6/8] sg: remove sg_write_xfer FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 7/8] sg: remove sg_read_xfer FUJITA Tomonori 2008-09-02 13:50 ` [PATCH 8/8] sg: remove unnecessary blk_rq_unmap_user FUJITA Tomonori 2008-09-09 13:35 ` [PATCH 0/8] sg cleanup patches after the block conversion FUJITA Tomonori 2008-09-09 13:42 ` Jens Axboe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox