Re: [Doubt] how is a disk marked faulty in RAID5

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

 



On Tue, 24 Apr 2012 19:36:48 -0400 Anuj Goel <agoel@xxxxxxxxxxxxxxxxx> wrote:

> Hi,
> 
> I have been looking into the RAID5 code, but unable to find how a disk
> is marked faulty in a RAID5 array.

A call to md_error() calls back into error() and marks it fault.

> I consider the case when we try to read, say 2 sectors within a chunk
> and the read fails. My understanding so far is as below:
> 
> The status of the read operation is returned in the call back function
> "raid5_align_endio" registered in chunk-aligned_read().
> If there was an error in the read, it LIFO adds the original bio to
> the retry list and wakes up the raid5d thread.
> This thread will remove the bio from the retry list and send it to
> retry_aligned_read().
> 
> In retry_aligned_read(), we first compute the disk number and sector
> offset within the disk using raid5_compute_sector().
> 
> 1. Then we do some stripe operations, but I cannot see where the
> actual read from the disk is scheduled.

retry_alignd_read calls handle_stripe()
handle_stripe() calls handle_stripe_fill()
handle_stripe_fill() calls fetch_block which sets R5_Wantread on the target
'dev', or on every other dev (later it will set R5_Wantcompute on the target
dev).
handle_stripe() calls ops_run_io which notices R5_Wantread an schedules the
read.

> 2. Also, if the sector on the disk is found unreadable, according to
> the RAID5 design, it should be recomputed using parity and the disk
> marked FAULTY. Can you please point me to the code/functions I should
> look into to understand how this is being done.

fetch_block is probably the important bit to read and understand
Note how it sets STRIPE_OP_COMPUTE_BLOCK and subsequently __raid_run_ops()
notices that and runs ops_run_compute5() which sets up the xor process.


> 3. After one disk failure, if another disk fails, I think the RAID5
> array cannot be used anymore. How is the second disk failure reported
> ?

What exactly to you mean by "reported".
The second disk is marked as faulty
Subsequent writes and some reads will fail.
See the
	if (s.failed > conf->max_degraded) {
branch in handle_stripe()


> 
> This is my first tryst with Linux code, (specifically software RAID),
> so I am not sure how to debug and understand the code flow.
> Is code reading the only way to understand the flow, or is there some
> documentation giving a high level overview of the implementation of
> software RAID ?
> 
> Any suggestions will be highly appreciated !!
> 

NeilBrown

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux