[lvm-devel] master - [device/bcache] bcache_read_bytes should put blocks
David Teigland
teigland at sourceware.org
Mon Apr 23 13:47:51 UTC 2018
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=93fc9374294aae679faa23aef0bd631db2e9a31a
Commit: 93fc9374294aae679faa23aef0bd631db2e9a31a
Parent: 7be54bd687ead6aa21e04c8a85a648da369a3d88
Author: David Teigland <teigland at redhat.com>
AuthorDate: Thu Feb 8 13:44:54 2018 -0600
Committer: David Teigland <teigland at redhat.com>
CommitterDate: Fri Apr 20 11:12:50 2018 -0500
[device/bcache] bcache_read_bytes should put blocks
---
lib/device/bcache.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/lib/device/bcache.c b/lib/device/bcache.c
index 52be947..5141083 100644
--- a/lib/device/bcache.c
+++ b/lib/device/bcache.c
@@ -1009,14 +1009,17 @@ bool bcache_read_bytes(struct bcache *cache, int fd, off_t start, size_t len, vo
block_address bb, be, i;
unsigned char *udata = data;
off_t block_size = cache->block_sectors << SECTOR_SHIFT;
+ int errors = 0;
byte_range_to_block_range(cache, start, len, &bb, &be);
for (i = bb; i < be; i++)
bcache_prefetch(cache, fd, i);
for (i = bb; i < be; i++) {
- if (!bcache_get(cache, fd, i, 0, &b))
- return false;
+ if (!bcache_get(cache, fd, i, 0, &b)) {
+ errors++;
+ continue;
+ }
if (i == bb) {
off_t block_offset = start % block_size;
@@ -1030,9 +1033,11 @@ bool bcache_read_bytes(struct bcache *cache, int fd, off_t start, size_t len, vo
len -= blen;
udata += blen;
}
+
+ bcache_put(b);
}
- return true;
+ return errors ? false : true;
}
//----------------------------------------------------------------
More information about the lvm-devel
mailing list