Bug fixes for 6.6-rc6:
* Fix a bug where a writev consisting of a bunch of sub-fsblock writes where the last buffer address is invalid could lead to an infinite loop. Signed-off-by: Darrick J. Wong <djwong@kernel.org> -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQQ2qTKExjcn+O1o2YRKO3ySh0YRpgUCZTFcYAAKCRBKO3ySh0YR pg6NAP4zKkrjdzOKyhu+NJDu4lnB4+8eq0PPnW5r5fw4155wTwEA1PKWp5vtKYRk A3QLraLNS0HxpsguHpfD8KFrPN6LPA8= =93ew -----END PGP SIGNATURE----- Merge tag 'iomap-6.6-fixes-5' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux Pull iomap fix from Darrick Wong: - Fix a bug where a writev consisting of a bunch of sub-fsblock writes where the last buffer address is invalid could lead to an infinite loop * tag 'iomap-6.6-fixes-5' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: iomap: fix short copy in iomap_write_iter()
This commit is contained in:
commit
5722119f67
|
@ -881,8 +881,10 @@ static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i)
|
|||
size_t bytes; /* Bytes to write to folio */
|
||||
size_t copied; /* Bytes copied from user */
|
||||
|
||||
bytes = iov_iter_count(i);
|
||||
retry:
|
||||
offset = pos & (chunk - 1);
|
||||
bytes = min(chunk - offset, iov_iter_count(i));
|
||||
bytes = min(chunk - offset, bytes);
|
||||
status = balance_dirty_pages_ratelimited_flags(mapping,
|
||||
bdp_flags);
|
||||
if (unlikely(status))
|
||||
|
@ -933,10 +935,12 @@ static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i)
|
|||
* halfway through, might be a race with munmap,
|
||||
* might be severe memory pressure.
|
||||
*/
|
||||
if (copied)
|
||||
bytes = copied;
|
||||
if (chunk > PAGE_SIZE)
|
||||
chunk /= 2;
|
||||
if (copied) {
|
||||
bytes = copied;
|
||||
goto retry;
|
||||
}
|
||||
} else {
|
||||
pos += status;
|
||||
written += status;
|
||||
|
|
Loading…
Reference in New Issue