From: Wang Shilong Date: Thu, 7 May 2020 00:58:54 +0000 (+0800) Subject: LU-13541 llite: fix possible divide zero in ll_use_fast_io() X-Git-Tag: 2.13.54~79 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=7cd0afe583211a11cfe3c1041e5b982e65769f37;p=fs%2Flustre-release.git LU-13541 llite: fix possible divide zero in ll_use_fast_io() ll_use_fast_io() is used to check wheather we could use fast IO. Since it is called in fast path, we don't hold ras_lock to protect access, there might have the race @ras_stride_bytes is reset after stride_io_mode() check. Fixes: 9e4c5bdaaec5 ("LU-12644 llite: try fast io for stride io correctly") Change-Id: If57ad074ecfa6560cc527f9f52e7adc2b0a456fd Signed-off-by: Wang Shilong Reviewed-on: https://review.whamcloud.com/38545 Reviewed-by: Andreas Dilger Tested-by: Andreas Dilger Tested-by: jenkins Reviewed-by: Jian Yu Reviewed-by: James Nunez Tested-by: Maloo --- diff --git a/lustre/llite/rw.c b/lustre/llite/rw.c index b8404a9..6cf2c74 100644 --- a/lustre/llite/rw.c +++ b/lustre/llite/rw.c @@ -1604,10 +1604,11 @@ static bool ll_use_fast_io(struct file *file, unsigned long fast_read_pages = max(RA_REMAIN_WINDOW_MIN, ras->ras_rpc_pages); loff_t skip_pages; + loff_t stride_bytes = ras->ras_stride_bytes; - if (stride_io_mode(ras)) { + if (stride_io_mode(ras) && stride_bytes) { skip_pages = (ras->ras_stride_length + - ras->ras_stride_bytes - 1) / ras->ras_stride_bytes; + ras->ras_stride_bytes - 1) / stride_bytes; skip_pages *= fast_read_pages; } else { skip_pages = fast_read_pages;