Re: [PATCH 1/2] scsi_transport_fc: FC pass through support via bsg interface - revised

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Oct 27, 2008, at 1:20 AM, Boaz Harrosh wrote:

FUJITA Tomonori wrote:
On Sun, 26 Oct 2008 11:38:04 +0200
Boaz Harrosh <bharrosh@xxxxxxxxxxx> wrote:

FUJITA Tomonori wrote:
CC'ed Jens,

On Wed, 22 Oct 2008 19:27:35 -0700
Seokmann Ju <seokmann.ju@xxxxxxxxxx> wrote:

And it seems like that the panic is happening due to the fact that
blk_delete_timer() is not called upon having completion of the service.
In other words, the block layer calls blk_add_timer() prior to
dispatch the service but, it doesn't call blk_delete_timer() when it
returned.
Yeah, we need to call blk_delete_timer somewhere.


Just for heck of it, I've tried out by adding blk_delete_timer() in the ~/block/blk-exec.c:blk_end_sync_rq() and it seems fixes the problem.
I think blk_end_sync_rq() is not the good place. From the perspective
of bsg, we need to handle both blk_execute_rq_nowait and
blk_execute_rq.


Seems like that there are APIs in the block layer that are call the
blk_delete_timer(), including,
- blk_end_io()
- __blk_end_request()

Could you guide me what is right way to fix the problem?
Exporting blk_delete_timer is one option, but it doesn't look very
nice (since the block layer doesn't export any details about its timer infrastructure), I think. Modifying blk_end_io() to make it usable for
requests via something like bsg might be better.

Anyway, we need to ask Jens.

Jens, fc people have working on fc pass through support via bsg, which hooks bsg's request queue on fc transport objects (We did the similar
thing for sas transport).

We want the timeout feature for fc pass through and I think that it's nice to use the block layer timeout feature for it. But the users of
bsg request queue don't need (or call) APIs such as
end_that_request_last to call blk_delete_timer internally. How should
these users call blk_delete_timer?
TOMO Hi
If a command is queued by bsg to a scsi device, which is posible. Then
blk_end_request() is called by scsi-ml. So it does work.

It doesn't work for bsg's scsi transport pass through stuff such as
SMP (sas management protocol, we already support) and FC. Virtually,
they don't use scsi-ml.


Right, I know that, that's why I say.


I think that all block-queue consumers should call one of
blk_end_request(),

This is kinda what I suggested in the previous mail but as I wrote,
some of them don't now.


I think they should, specially if they're going to use the timer.
The way I see it they must. It's kind of a block layer API thing.
Someone calls blk_execute_xx then eventually someone needs to call
blk_end_request. You could call it from bsg but only temporary until
all are fixed. (because you will need an ugly check to see if request
was not already ended)
I made following changes but, it seems not helpful for the issue.
It, eventually, got failed to call blk_delete_timer() as ~/block/blk- core.c:__end_that_request_first() returns non-zero. Inside of the __end_that_reqeust_first(), it detected 'nbytes' is bigger than 'nr_bytes' in case of bidi (where req->next_rq is not NULL). I'm not sure whether we need to have chains of function calls initiated by the blk_end_request() or blk_end_bidi_request().
Would it create any problems if we directly call 'blk_delete_timer()'?

Seokmann
---
diff -Naurp a/blk-exec.c b/blk-exec.c
--- a/blk-exec.c	2008-10-27 09:33:14.000000000 -0700
+++ b/blk-exec.c	2008-10-27 09:34:08.000000000 -0700
@@ -22,6 +22,13 @@ static void blk_end_sync_rq(struct reque
 {
 	struct completion *waiting = rq->end_io_data;

+	if (rq->next_rq) {
+		blk_end_bidi_request(rq, error, rq->data_len,
+		    rq->next_rq->data_len);
+		// blk_end_request(rq);
+		// blk_delete_timer(rq);
+	}
+
 	rq->end_io_data = NULL;
 	__blk_put_request(rq->q, rq);
---



there are lots to choose from. We don't need
a new API. It will work with or without data, and it does what
you want.

Boaz

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux