From: Rusty Russell <rusty@rustcorp.com.au>
To: linux-scsi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Jens Axboe <jens.axboe@oracle.com>,
Douglas Gilbert <dougg@torque.net>
Subject: [PATCH 5/5] sg_ring: Convert scsi_debug
Date: Thu, 20 Dec 2007 16:53:36 +1100 [thread overview]
Message-ID: <200712201653.36632.rusty@rustcorp.com.au> (raw)
In-Reply-To: <200712201651.59283.rusty@rustcorp.com.au>
Douglas Gilbert pointed out that converting scsi_debug would be a good
demonstration of the conversion required for other SCSI devices.
Details of the changes:
1) ->use_sg is replaced by ->sg, which if non-NULL, contains the sg_ring.
2) ->request_buffer can be NULL (it's only relevent if ->sg isn't set)
3) sg_ring_for_each is no longer required, just iterate directly over ->sg.
4) The iterator updates a struct sg_ring (sg) and an index (k), so previous
references to sg become &sg->sg[k] (the k'th element within the sg_ring sg).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
diff -r c5fe2cab1d48 drivers/scsi/scsi_debug.c
--- a/drivers/scsi/scsi_debug.c Thu Dec 20 13:12:43 2007 +1100
+++ b/drivers/scsi/scsi_debug.c Thu Dec 20 13:39:24 2007 +1100
@@ -601,16 +601,16 @@ static int fill_from_dev_buffer(struct s
int k, req_len, act_len, len, active;
void * kaddr;
void * kaddr_off;
- struct scatterlist * sg;
+ struct sg_ring * sg;
if (0 == scp->request_bufflen)
return 0;
- if (NULL == scp->request_buffer)
- return (DID_ERROR << 16);
if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) ||
(scp->sc_data_direction == DMA_FROM_DEVICE)))
return (DID_ERROR << 16);
- if (0 == scp->use_sg) {
+ if (NULL == scp->sg) {
+ if (NULL == scp->request_buffer)
+ return (DID_ERROR << 16);
req_len = scp->request_bufflen;
act_len = (req_len < arr_len) ? req_len : arr_len;
memcpy(scp->request_buffer, arr, act_len);
@@ -622,14 +622,14 @@ static int fill_from_dev_buffer(struct s
}
active = 1;
req_len = act_len = 0;
- scsi_for_each_sg(scp, sg, scp->use_sg, k) {
+ sg_ring_for_each(scp->sg, sg, k) {
if (active) {
kaddr = (unsigned char *)
- kmap_atomic(sg_page(sg), KM_USER0);
+ kmap_atomic(sg_page(&sg->sg[k]), KM_USER0);
if (NULL == kaddr)
return (DID_ERROR << 16);
- kaddr_off = (unsigned char *)kaddr + sg->offset;
- len = sg->length;
+ kaddr_off = (unsigned char *)kaddr + sg->sg[k].offset;
+ len = sg->sg[k].length;
if ((req_len + len) > arr_len) {
active = 0;
len = arr_len - req_len;
@@ -638,7 +638,7 @@ static int fill_from_dev_buffer(struct s
kunmap_atomic(kaddr, KM_USER0);
act_len += len;
}
- req_len += sg->length;
+ req_len += sg->sg[k].length;
}
if (scp->resid)
scp->resid -= act_len;
@@ -654,29 +654,29 @@ static int fetch_to_dev_buffer(struct sc
int k, req_len, len, fin;
void * kaddr;
void * kaddr_off;
- struct scatterlist * sg;
+ struct sg_ring * sg;
if (0 == scp->request_bufflen)
return 0;
- if (NULL == scp->request_buffer)
- return -1;
if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) ||
(scp->sc_data_direction == DMA_TO_DEVICE)))
return -1;
- if (0 == scp->use_sg) {
+ if (NULL == scp->sg) {
+ if (NULL == scp->request_buffer)
+ return -1;
req_len = scp->request_bufflen;
len = (req_len < max_arr_len) ? req_len : max_arr_len;
memcpy(arr, scp->request_buffer, len);
return len;
}
- sg = scsi_sglist(scp);
req_len = fin = 0;
- for (k = 0; k < scp->use_sg; ++k, sg = sg_next(sg)) {
- kaddr = (unsigned char *)kmap_atomic(sg_page(sg), KM_USER0);
+ sg_ring_for_each(scp->sg, sg, k) {
+ kaddr = (unsigned char *)kmap_atomic(sg_page(&sg->sg[k]),
+ KM_USER0);
if (NULL == kaddr)
return -1;
- kaddr_off = (unsigned char *)kaddr + sg->offset;
- len = sg->length;
+ kaddr_off = (unsigned char *)kaddr + sg->sg[k].offset;
+ len = sg->sg[k].length;
if ((req_len + len) > max_arr_len) {
len = max_arr_len - req_len;
fin = 1;
@@ -685,7 +685,7 @@ static int fetch_to_dev_buffer(struct sc
kunmap_atomic(kaddr, KM_USER0);
if (fin)
return req_len + len;
- req_len += sg->length;
+ req_len += sg->sg[k].length;
}
return req_len;
}
next prev parent reply other threads:[~2007-12-20 5:53 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-20 5:45 [PATCH 0/5] sg_ring for scsi Rusty Russell
2007-12-20 5:48 ` [PATCH 1/5] sg_ring: sg_ring.h Rusty Russell
2007-12-20 5:49 ` [PATCH 2/5] dma_map_sg_ring() helper Rusty Russell
2007-12-20 5:50 ` [PATCH 3/5] blk_rq_map_sg_ring as a counterpart to blk_rq_map_sg Rusty Russell
2007-12-20 5:51 ` [PATCH 4/5] sg_ring: Convert core scsi code to sg_ring Rusty Russell
2007-12-20 5:53 ` Rusty Russell [this message]
2007-12-20 7:06 ` [PATCH 2/5] dma_map_sg_ring() helper FUJITA Tomonori
2007-12-20 7:42 ` David Miller
2007-12-20 22:58 ` Rusty Russell
2007-12-21 0:00 ` FUJITA Tomonori
2007-12-21 0:35 ` Rusty Russell
2007-12-21 0:40 ` David Miller
2007-12-21 2:22 ` FUJITA Tomonori
2007-12-21 2:47 ` Rusty Russell
2007-12-20 7:07 ` [PATCH 0/5] sg_ring for scsi FUJITA Tomonori
2007-12-20 7:53 ` Rusty Russell
2007-12-20 7:58 ` David Miller
2007-12-20 7:58 ` Jens Axboe
2007-12-20 23:13 ` Rusty Russell
2007-12-21 0:30 ` David Miller
2007-12-21 2:28 ` FUJITA Tomonori
2007-12-21 3:26 ` Rusty Russell
2007-12-21 4:37 ` FUJITA Tomonori
2007-12-26 0:27 ` Rusty Russell
2007-12-27 2:09 ` FUJITA Tomonori
2007-12-27 11:52 ` Rusty Russell
2007-12-21 12:13 ` Herbert Xu
2007-12-20 7:58 ` Jens Axboe
2007-12-20 13:55 ` Boaz Harrosh
2007-12-20 14:00 ` [PATCH 1/3] SG: Move functions to lib/scatterlist.c and add sg chaining allocator helpers Boaz Harrosh
2007-12-20 14:21 ` Boaz Harrosh
2007-12-21 12:15 ` Herbert Xu
2007-12-20 14:03 ` [PATCH 2/3] SG: Convert SCSI to use scatterlist helpers for sg chaining Boaz Harrosh
2007-12-20 14:26 ` Boaz Harrosh
2007-12-20 14:06 ` [PATCH 3/3] SG: Update ide/ to use sg_table Boaz Harrosh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200712201653.36632.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=dougg@torque.net \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox