[btrfs] fix check_direct_IO() for non-iovec iterators
looking for duplicate ->iov_base makes sense only for iovec-backed iterators; for kvec-backed ones it's pointless, for bvec-backed ones it's pointless and broken on 32bit (we walk through an array of struct bio_vec accessing them as if they were struct iovec; works by accident on 64bit, but on 32bit it'll blow up) and for pipe-backed ones it's pointless and ends up oopsing. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
b57332b410
Коммит
cd27e45504
|
@ -8618,7 +8618,7 @@ static ssize_t check_direct_IO(struct btrfs_root *root, struct kiocb *iocb,
|
|||
goto out;
|
||||
|
||||
/* If this is a write we don't need to check anymore */
|
||||
if (iov_iter_rw(iter) == WRITE)
|
||||
if (iov_iter_rw(iter) != READ || !iter_is_iovec(iter))
|
||||
return 0;
|
||||
/*
|
||||
* Check to make sure we don't have duplicate iov_base's in this
|
||||
|
|
Загрузка…
Ссылка в новой задаче