From: Shreyansh Jain <shreyansh.jain@gmail.com>
To: linux-kernel@vger.kernel.org
Subject: Query about Bio submission / Direct IO
Date: Fri, 19 Oct 2007 06:17:42 +0000 (UTC) [thread overview]
Message-ID: <loom.20071019T055230-553@post.gmane.org> (raw)
Hi List,
I have tried this on kernelnewbies
<http://article.gmane.org/gmane.linux.kernel.kernelnewbies/23166> but it seems
I am not good at explaining well. trying here again.
Question:
Is there a limitation (some kind of caveat) when direct IO pages are added to
a bio (multiple pages per bio) and if the total length or offset of some of
the vectors is not aligned (PAGE_SIZE or sector size)?
My scenario:
1. I have a filesystem in which I create bio for submission to a SCSI disk
connected in a SAN via a FC switch.
2. This is a direct IO request where in multiple pages are being added in a bio
(bio_map_user). Also, as the user buffer I get is unaligned, I am changing
bio's first vector offset (as well as len, bi_size accordingly).
What I observe is:
1. IO is performed perfectly (as expected) in case there are no SCSI failure.
end_bio gets called as expected and the user app is happy.
2. In case I disconnect the SCSI device from switch, my end_bio function
keeps on getting sub-completion bio (bi_size > 0 and uptodate cleared,
error set to -5).
3. For capturing and ignoring sub-completion returns from block layer,
using other kernel end_bio implementation as example I had a code like
if(bio->bi_size > 0)
return 1;
as the starting lines of the end_bio routine. Thus, my user space goes off
to disk sleep and kernel log keeps on spweing messages like
...
Oct 17 21:56:07 mgs02 kernel: end_request: I/O error, dev sdl, sector 33639
Oct 17 21:56:07 mgs02 kernel: sd 2:0:0:8: SCSI error: return code = 0x10000
Oct 17 21:56:07 mgs02 kernel: end_request: I/O error, dev sdl, sector 33639
Oct 17 21:56:07 mgs02 kernel: sd 2:0:0:8: SCSI error: return code = 0x10000
Oct 17 21:56:07 mgs02 kernel: end_request: I/O error, dev sdl, sector 33639
...
till i connect the switch back - even if that is one hour after disconnecting it.
Best part - it works amazingly well in case I keep the offset of the first page
aligned (somehow, at expense of corrupted data copy) - failure of SCSI disk
(end_bio returns, bi_size=0, my code captures error) or no failure.
I have tried this on 2.6.5 and 2.6.16.27 (I agree they are old, but that is
what I have to work on :( ). It is a qlogic SCSI HBA. I have created the bio
just like other kernel subsystems do.
Only thing I am not sure is whether there is something special that needs to
be done in case of direct IO which I am missing.
biodoc.txt states that:
"Note: Right now the only user of bios with more than one page is ll_rw_kio,
which in turn means that only raw I/O uses it (direct i/o may not work right
now)."
Any idea why it doesn't work (though I am expecting that this doc is 2.6
starting era and things might have changed a lot now).
Any help would be highly appreciated. Apologies if my channel of approach is
wrong and if this post is huge (couldn't keep it shorter than this).
Shreyansh
[PS: Is this situation something to do with request flags REQ_PC /
REQ_BLOCK_PC?? While searching code, I found these somewhere connected to
direct IO (bio_add_pc_page) and could find more about them]
next reply other threads:[~2007-10-19 6:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-19 6:17 Shreyansh Jain [this message]
2007-10-22 10:53 ` Query about Bio submission / Direct IO Boaz Harrosh
2007-10-23 5:33 ` Shreyansh
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=loom.20071019T055230-553@post.gmane.org \
--to=shreyansh.jain@gmail.com \
--cc=linux-kernel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.