summaryrefslogtreecommitdiff
path: root/lib/misc
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2018-11-16 12:21:20 -0600
committerDavid Teigland <teigland@redhat.com>2018-11-20 09:13:20 -0600
commitca66d520326493311a3c7132b1bcee0807862301 (patch)
treed3ccde7c58b9fe8d4efbc9fd4128d98b7ad7a756 /lib/misc
parentb1e9fe9505293e8c9b4a4bfffafe62c5a83b4d11 (diff)
downloadlvm2-ca66d520326493311a3c7132b1bcee0807862301.tar.gz
io: use sync io if aio fails
io_setup() for aio may fail if a system has reached the aio request limit. In this case, fall back to using sync io. Also, lvm use of aio can be disabled entirely with config setting global/use_aio=0. The system limit for aio requests can be seen from /proc/sys/fs/aio-max-nr The current usage of aio requests can be seen from /proc/sys/fs/aio-nr The system limit for aio requests can be increased by setting fs.aio-max-nr using sysctl. Also add last-byte limit to the sync io code.
Diffstat (limited to 'lib/misc')
-rw-r--r--lib/misc/lvm-globals.c11
-rw-r--r--lib/misc/lvm-globals.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/misc/lvm-globals.c b/lib/misc/lvm-globals.c
index 86e6cf49f..0ad60fd93 100644
--- a/lib/misc/lvm-globals.c
+++ b/lib/misc/lvm-globals.c
@@ -24,6 +24,7 @@
static int _verbose_level = VERBOSE_BASE_LEVEL;
static int _silent = 0;
static int _test = 0;
+static int _use_aio = 0;
static int _md_filtering = 0;
static int _internal_filtering = 0;
static int _fwraid_filtering = 0;
@@ -69,6 +70,11 @@ void init_test(int level)
_test = level;
}
+void init_use_aio(int use_aio)
+{
+ _use_aio = use_aio;
+}
+
void init_md_filtering(int level)
{
_md_filtering = level;
@@ -215,6 +221,11 @@ int test_mode(void)
return _test;
}
+int use_aio(void)
+{
+ return _use_aio;
+}
+
int md_filtering(void)
{
return _md_filtering;
diff --git a/lib/misc/lvm-globals.h b/lib/misc/lvm-globals.h
index 6fc26ccc4..42dcc341e 100644
--- a/lib/misc/lvm-globals.h
+++ b/lib/misc/lvm-globals.h
@@ -25,6 +25,7 @@ enum dev_ext_e;
void init_verbose(int level);
void init_silent(int silent);
void init_test(int level);
+void init_use_aio(int use_aio);
void init_md_filtering(int level);
void init_internal_filtering(int level);
void init_fwraid_filtering(int level);
@@ -55,6 +56,7 @@ const char *get_cmd_name(void);
void set_sysfs_dir_path(const char *path);
int test_mode(void);
+int use_aio(void);
int md_filtering(void);
int internal_filtering(void);
int fwraid_filtering(void);