diff options
author | David Teigland <teigland@redhat.com> | 2018-11-16 12:21:20 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2018-11-20 09:13:20 -0600 |
commit | ca66d520326493311a3c7132b1bcee0807862301 (patch) | |
tree | d3ccde7c58b9fe8d4efbc9fd4128d98b7ad7a756 /lib/misc | |
parent | b1e9fe9505293e8c9b4a4bfffafe62c5a83b4d11 (diff) | |
download | lvm2-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.c | 11 | ||||
-rw-r--r-- | lib/misc/lvm-globals.h | 2 |
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); |