mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-22 06:50:52 +03:00
bcache: fix busy loop with too many errors
When bcache tries to write data to a faulty device, it may get out of caching blocks and then just busy-loops on a CPU - so this check protects this by checking if there is already max_io (~64) errored blocks.
This commit is contained in:
parent
d32ee355c7
commit
5e64aa222b
@ -1,5 +1,6 @@
|
||||
Version 2.02.188 -
|
||||
==================================
|
||||
Fix bcache when device has too many failing writes.
|
||||
Fix bcache waiting for IO completion with failing disks.
|
||||
Configure use own python path name order to prefer using python3.
|
||||
Enhance reporting and error handling when creating thin volumes.
|
||||
|
@ -957,6 +957,11 @@ static struct block *_new_block(struct bcache *cache, int fd, block_address i, b
|
||||
if (dm_list_empty(&cache->io_pending))
|
||||
_writeback(cache, 16); // FIXME: magic number
|
||||
_wait_all(cache);
|
||||
if (dm_list_size(&cache->errored) >= cache->max_io) {
|
||||
log_debug("bcache no new blocks for di %d index %u with >%d errors.",
|
||||
fd, (uint32_t) i, cache->max_io);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
log_error("bcache no new blocks for fd %d index %u",
|
||||
fd, (uint32_t) i);
|
||||
|
Loading…
x
Reference in New Issue
Block a user