[lvm-devel] 2018-06-01-stable - devs: use bcache fd for read ahead ioctl

David Teigland teigland at sourceware.org
Tue Jun 26 17:16:59 UTC 2018


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=f7ffba204e06ae432ae2c7943cb41eec5b8e8bb1
Commit:        f7ffba204e06ae432ae2c7943cb41eec5b8e8bb1
Parent:        90e419c645ac5ad3b82044fd3422f956442935a6
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Tue Jun 26 12:05:39 2018 -0500
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Tue Jun 26 12:15:43 2018 -0500

devs: use bcache fd for read ahead ioctl

to avoid an unnecessary open of the device in
most cases.
---
 lib/device/dev-io.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/lib/device/dev-io.c b/lib/device/dev-io.c
index 9a03d3a..145093f 100644
--- a/lib/device/dev-io.c
+++ b/lib/device/dev-io.c
@@ -367,18 +367,24 @@ static int _dev_get_size_dev(struct device *dev, uint64_t *size)
 static int _dev_read_ahead_dev(struct device *dev, uint32_t *read_ahead)
 {
 	long read_ahead_long;
+	int fd = dev->bcache_fd;
+	int do_close = 0;
 
 	if (dev->read_ahead != -1) {
 		*read_ahead = (uint32_t) dev->read_ahead;
 		return 1;
 	}
 
-	if (!dev_open_readonly(dev))
-		return_0;
+	if (fd <= 0) {
+		if (!dev_open_readonly(dev))
+			return_0;
+		fd = dev_fd(dev);
+		do_close = 1;
+	}
 
-	if (ioctl(dev->fd, BLKRAGET, &read_ahead_long) < 0) {
+	if (ioctl(fd, BLKRAGET, &read_ahead_long) < 0) {
 		log_sys_error("ioctl BLKRAGET", dev_name(dev));
-		if (!dev_close_immediate(dev))
+		if (do_close && !dev_close_immediate(dev))
 			stack;
 		return 0;
 	}
@@ -389,8 +395,8 @@ static int _dev_read_ahead_dev(struct device *dev, uint32_t *read_ahead)
 	log_very_verbose("%s: read_ahead is %u sectors",
 			 dev_name(dev), *read_ahead);
 
-	if (!dev_close_immediate(dev))
-		stack;
+	if (do_close && !dev_close_immediate(dev))
+		log_sys_error("close", dev_name(dev));
 
 	return 1;
 }




More information about the lvm-devel mailing list