On Thu, Oct 24, 2019 at 03:06:18AM +0000, Heming Zhao wrote: > First fail is in bcache_flush, then bcache_invalidate_fd does nothing because the data > in cache->errored, which not belongs to dirty & clean list. Then the data mistakenly > move from cache->errored into cache->dirty by "bcache_get => _lookup_or_read_block" > (because the data holds BF_DIRTY flag). I just pushed a couple of patches that will hopefully fix this issue for you: commit 6b0d969b2a85ba69046afa26af4d7bcddddbccd5 (HEAD -> master, origin/master, origin/HEAD, 2019-10-11-bcache-purge) Author: Joe Thornber <ejt@xxxxxxxxxx> Date: Mon Oct 28 15:01:47 2019 +0000 [label] Use bcache_abort_fd() to ensure blocks are no longer in the cache. The return value from bcache_invalidate_fd() was not being checked. So I've introduced a little function, _invalidate_fd() that always calls bcache_abort_fd() if the write fails. commit 2938b4dcca0a1df661758abfab7f402ea7aab018 Author: Joe Thornber <ejt@xxxxxxxxxx> Date: Mon Oct 28 14:29:47 2019 +0000 [bcache] add bcache_abort() This gives us a way to cope with write failures. Also there are big changes to bcache coming, that remove file descriptors from the interface completely. See the branch 2019-09-05-add-io-manager for more info (bcache has been renamed io_manager). - Joe _______________________________________________ linux-lvm mailing list linux-lvm@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/linux-lvm read the LVM HOW-TO at http://tldp.org/HOWTO/LVM-HOWTO/