summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2019-11-26 15:46:49 -0600
committerDavid Teigland <teigland@redhat.com>2019-11-26 16:52:28 -0600
commit56a295f78c4638e201ad78a8b25fd7874f2d905d (patch)
treeb25d149084ea1cbbcd602d72f5e2b3c2f2d18045
parent29db9c6325ac3552b0ba3a0f49682e8e8112cca2 (diff)
downloadlvm2-56a295f78c4638e201ad78a8b25fd7874f2d905d.tar.gz
bcache: add invalidate_bytes function
-rw-r--r--lib/device/bcache-utils.c15
-rw-r--r--lib/device/bcache.h1
-rw-r--r--lib/label/label.c5
-rw-r--r--lib/label/label.h1
4 files changed, 22 insertions, 0 deletions
diff --git a/lib/device/bcache-utils.c b/lib/device/bcache-utils.c
index 25535547c..cf7414457 100644
--- a/lib/device/bcache-utils.c
+++ b/lib/device/bcache-utils.c
@@ -79,6 +79,21 @@ bool bcache_read_bytes(struct bcache *cache, int fd, uint64_t start, size_t len,
return true;
}
+bool bcache_invalidate_bytes(struct bcache *cache, int fd, uint64_t start, size_t len)
+{
+ block_address bb, be;
+ bool result = true;
+
+ byte_range_to_block_range(cache, start, len, &bb, &be);
+
+ for (; bb != be; bb++) {
+ if (!bcache_invalidate(cache, fd, bb))
+ result = false;
+ }
+
+ return result;
+}
+
//----------------------------------------------------------------
// Writing bytes and zeroing bytes are very similar, so we factor out
diff --git a/lib/device/bcache.h b/lib/device/bcache.h
index 7622fd354..4ef044c74 100644
--- a/lib/device/bcache.h
+++ b/lib/device/bcache.h
@@ -163,6 +163,7 @@ bool bcache_read_bytes(struct bcache *cache, int fd, uint64_t start, size_t len,
bool bcache_write_bytes(struct bcache *cache, int fd, uint64_t start, size_t len, void *data);
bool bcache_zero_bytes(struct bcache *cache, int fd, uint64_t start, size_t len);
bool bcache_set_bytes(struct bcache *cache, int fd, uint64_t start, size_t len, uint8_t val);
+bool bcache_invalidate_bytes(struct bcache *cache, int fd, uint64_t start, size_t len);
void bcache_set_last_byte(struct bcache *cache, int fd, uint64_t offset, int sector_size);
void bcache_unset_last_byte(struct bcache *cache, int fd);
diff --git a/lib/label/label.c b/lib/label/label.c
index 05986cbe7..64b7ca097 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -1464,6 +1464,11 @@ bool dev_write_bytes(struct device *dev, uint64_t start, size_t len, void *data)
return true;
}
+bool dev_invalidate_bytes(struct device *dev, uint64_t start, size_t len)
+{
+ return bcache_invalidate_bytes(scan_bcache, dev->bcache_fd, start, len);
+}
+
bool dev_write_zeros(struct device *dev, uint64_t start, size_t len)
{
if (test_mode())
diff --git a/lib/label/label.h b/lib/label/label.h
index f06b7df63..33a91fa6c 100644
--- a/lib/label/label.h
+++ b/lib/label/label.h
@@ -126,6 +126,7 @@ bool dev_read_bytes(struct device *dev, uint64_t start, size_t len, void *data);
bool dev_write_bytes(struct device *dev, uint64_t start, size_t len, void *data);
bool dev_write_zeros(struct device *dev, uint64_t start, size_t len);
bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val);
+bool dev_invalidate_bytes(struct device *dev, uint64_t start, size_t len);
void dev_set_last_byte(struct device *dev, uint64_t offset);
void dev_unset_last_byte(struct device *dev);