diff options
| author | Konstantin Khlebnikov <khlebnikov@yandex-team.ru> | 2016-11-27 19:32:32 +0300 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-07-04 11:50:58 +0200 |
| commit | 932ad580d6714044f775f7faf58c00b00e810fec (patch) | |
| tree | 1b5ffbfd83d51f451fc29d7dbeeea9ed6af940b4 /include/linux | |
| parent | ce8eb24f7bbf9494ca611c10236ae751ffa23b31 (diff) | |
md/raid5: limit request size according to implementation limits
commit e8d7c33232e5fdfa761c3416539bc5b4acd12db5 upstream.
Current implementation employ 16bit counter of active stripes in lower
bits of bio->bi_phys_segments. If request is big enough to overflow
this counter bio will be completed and freed too early.
Fortunately this not happens in default configuration because several
other limits prevent that: stripe_cache_size * nr_disks effectively
limits count of active stripes. And small max_sectors_kb at lower
disks prevent that during normal read/write operations.
Overflow easily happens in discard if it's enabled by module parameter
"devices_handle_discard_safely" and stripe_cache_size is set big enough.
This patch limits requests size with 256Mb - 8Kb to prevent overflows.
Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Shaohua Li <shli@kernel.org>
Cc: Neil Brown <neilb@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Diffstat (limited to 'include/linux')
0 files changed, 0 insertions, 0 deletions
