diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2024-07-22 21:51:33 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2024-11-03 01:28:06 -0500 |
| commit | 20d9eb3b870630f213adfd82d255acd36341b036 (patch) | |
| tree | 7e4d630f6ce138c42ddd927b9aa6f5f50f4f636c /fs/read_write.c | |
| parent | 8152f8201088350c76bb9685cd5990dd51d59aff (diff) | |
| download | linux-20d9eb3b870630f213adfd82d255acd36341b036.tar.gz linux-20d9eb3b870630f213adfd82d255acd36341b036.tar.bz2 linux-20d9eb3b870630f213adfd82d255acd36341b036.zip | |
convert do_preadv()/do_pwritev()
fdput() can be transposed with add_{r,w}char() and inc_sysc{r,w}();
it's the same story as with do_readv()/do_writev(), only with
fdput() instead of fdput_pos().
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/read_write.c')
| -rw-r--r-- | fs/read_write.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/fs/read_write.c b/fs/read_write.c index deb87457aa76..f6e9232eacd8 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1113,18 +1113,16 @@ static inline loff_t pos_from_hilo(unsigned long high, unsigned long low) static ssize_t do_preadv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen, loff_t pos, rwf_t flags) { - struct fd f; ssize_t ret = -EBADF; if (pos < 0) return -EINVAL; - f = fdget(fd); - if (fd_file(f)) { + CLASS(fd, f)(fd); + if (!fd_empty(f)) { ret = -ESPIPE; if (fd_file(f)->f_mode & FMODE_PREAD) ret = vfs_readv(fd_file(f), vec, vlen, &pos, flags); - fdput(f); } if (ret > 0) @@ -1136,18 +1134,16 @@ static ssize_t do_preadv(unsigned long fd, const struct iovec __user *vec, static ssize_t do_pwritev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen, loff_t pos, rwf_t flags) { - struct fd f; ssize_t ret = -EBADF; if (pos < 0) return -EINVAL; - f = fdget(fd); - if (fd_file(f)) { + CLASS(fd, f)(fd); + if (!fd_empty(f)) { ret = -ESPIPE; if (fd_file(f)->f_mode & FMODE_PWRITE) ret = vfs_writev(fd_file(f), vec, vlen, &pos, flags); - fdput(f); } if (ret > 0) |
