summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2018-08-24 14:46:51 -0500
committerDavid Teigland <teigland@redhat.com>2018-08-24 14:50:53 -0500
commita991664dec02b62681a4a3eea7fbee2fc3a88700 (patch)
tree2c78acce05801adf8d6e39bbab55056465cfd450
parentab1aa0a4fb9b422b177bba35f1bd96fda2330189 (diff)
downloadlvm2-a991664dec02b62681a4a3eea7fbee2fc3a88700.tar.gz
bcache: reduce MAX_IO to 256
This is the number of concurrent async io requests that the scan layer will submit to the bcache layer. There will be an open fd for each of these, so it is best to keep this well below the default limit for max open files (1024), otherwise lvm may get EMFILE from open(2) when there are around 1024 devices to scan on the system.
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/device/bcache.c10
2 files changed, 10 insertions, 1 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 63ec99429..1a00b78bd 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -4,6 +4,7 @@ Version 2.02.182 -
Fix lvconvert raid0/raid0_meta -> striped regression.
Fix lvconvert --splitmirror for mirror type (2.02.178).
Do not pair cache policy and cache metadata format.
+ Reduce max concurrent aios to avoid EMFILE with many devices.
Version 2.02.181 - 01 August 2018
=================================
diff --git a/lib/device/bcache.c b/lib/device/bcache.c
index b1f7d2a41..531d83b10 100644
--- a/lib/device/bcache.c
+++ b/lib/device/bcache.c
@@ -196,7 +196,15 @@ static bool _async_issue(struct io_engine *ioe, enum dir d, int fd,
return true;
}
-#define MAX_IO 1024
+/*
+ * MAX_IO is returned to the layer above via bcache_max_prefetches() which
+ * tells the caller how many devices to submit io for concurrently. There will
+ * be an open file descriptor for each of these, so keep it low enough to avoid
+ * reaching the default max open file limit (1024) when there are over 1024
+ * devices being scanned.
+ */
+
+#define MAX_IO 256
#define MAX_EVENT 64
static bool _async_wait(struct io_engine *ioe, io_complete_fn fn)