Messages in this thread |  | | Date | Mon, 21 Dec 2015 11:21:35 +0800 | Subject | Re: IO errors after "block: remove bio_get_nr_vecs()" | From | Ming Lei <> |
| |
On Mon, Dec 21, 2015 at 10:25 AM, Artem S. Tashkinov <t.artem@lycos.com> wrote: > # cat > /sys/block/sda/queue/{max_hw_sectors_kb,max_sectors_kb,max_segments,max_segment_size} > 32767 > 32767 > 168 > 65536
Looks it is fine, then maybe it is related with BIOVEC_PHYS_MERGEABLE(), BIOVEC_SEG_BOUNDARY() or sort of thing, because dma_addr_t and phys_addr_t turn to 64-bit with PAE, but 'unsigned long' and 'void *' is still 32bit.
It was confirmed that there isn't the issue if PAE is disabled.
Dumping both sata/ahci hw sg table and bio's bvec might be helpful.
On Mon, Dec 21, 2015 at 10:32 AM, Kent Overstreet <kent.overstreet@gmail.com> wrote: > > oy vey. WTF's been happening in blk-merge.c? > > Theyy're not the same bug. The bug in your thread was introduced by Jens in > 5014c311ba "block: fix bogus compiler warnings in blk-merge.c", where he screwed > up the bvprv handling - but that patch comes after the patch Artem bisected to. > > blk_bio_segment_split() looks correct in b54ffb73ca.
Yes, that is why reverting 578270bfb(block: fix segment split) can make the issue disappear, because 5014c311ba "block: fix bogus compiler warnings in blk-merge.c" basically disables sg-merge and prevents the issue from being triggered.
Thanks, Ming Lei
|  |