Thread (4 messages) 4 messages, 2 authors, 2009-05-22

Re: Does raid5 have error handling while reading?

From: NeilBrown <hidden>
Date: 2009-05-22 11:21:38

On Fri, May 22, 2009 7:13 pm, Xu Yuehai wrote:
quoted
If chunk_aligned_read results in an error, then the request
is re-tried through the stripe cache.  I would call that "error
handling".
I think you mean that error() and raid5_align_endio are invoked and
the read request is sent to conf->retry_read_aligned_list, then the
raid5d will handle it.
Yes, that sounds right.
quoted
If the cache finds that a drives is failed, the data is calculated
from the other drives, though the code is not a straight forward
as it used to be.
See fetch_block5 which sets STRIPE_OP_COMPUTE_BLK which causes
ops_run_compute5 to do the work (or to schedule the work on separate
hardware).
I notice that the bit STRIPE_OP_COMPUTE_BLK is set if only s->uptodate
== disks - 1, however, suppose there is just a single read request, I
fail to find out why this condition is satisfied.
If there is just one read for a block on a device that has failed,
then fetch_block5 will schedule read requests (Wantread) on all
the other devices.  Once all those reads complete Uptodate will
be set, so s->update will indeed equal disks - 1, and so
COMPUTE_BLK will get set.

NeilBrown
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help