Re: [PATCH] bcache: return IOERR to upper layer when read request meet metadata error

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

 



Rui Hua--

Thank you for fixing this.

On 11/21/2017 05:58 AM, Rui Hua wrote:
> The read request might meet error when searching the btree, but the error was
> not handled in cache_lookup(), and this kind of metadata failure will not go
> into cached_dev_read_error(), finally, the upper layer will receive bi_status=0.
> In this patch we judge the metadata error by the return value of
> bch_btree_map_keys(), there are two potential paths give rise to the error:
> 1.Because the btree is not totally cached in memery, we maybe get error when
>   read btree node from cache device (see bch_btree_node_get()), the likely
>   errno is -EIO, -ENOMEM
> 2.When read miss happend, bch_btree_insert_check_key() will be called to
>   insert a "replace_key" to btree(see cached_dev_cache_miss(), just for doing
>   preparatory work before insert the missed data to cache device), a failure
>   can also happen in this situation, the likely errno is -ENOMEM
> bch_btree_map_keys() will return MAP_DONE in normal scenario, but we will
> get either -EIO or -ENOMEM in above two cases. if these happend, we should
> NOT recover data from backing device (when cache device is dirty) because
> we don't know whether bkeys the read request covered are all clean.
> And after that happend, s->iop.status is still its initially value(0)
> before we submit s->bio.bio, we set it to BLK_STS_IOERR, so it can go into
> cached_dev_read_error(), and finally it can be passed to upper layer,
> or recovered by reread from backing device.
> 
> Signed-off-by: Hua Rui <huarui.dev@xxxxxxxxx>

This preliminarily LGTM-- I have added it to my tree, though I plan to
make another review pass through all of the error path here.

Reviewed-by: Michael Lyle <mlyle@xxxxxxxx>

Mike



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux