iov_iter: Use accessor function
Use accessor functions to access an iterator's type and direction. This allows for the possibility of using some other method of determining the type of iterator than if-chains with bitwise-AND conditions. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -349,7 +349,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
|
||||
|
||||
dio->size = 0;
|
||||
dio->multi_bio = false;
|
||||
dio->should_dirty = is_read && (iter->type == ITER_IOVEC);
|
||||
dio->should_dirty = is_read && iter_is_iovec(iter);
|
||||
|
||||
blk_start_plug(&plug);
|
||||
for (;;) {
|
||||
|
@@ -658,7 +658,7 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *to,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (unlikely(to->type & ITER_PIPE)) {
|
||||
if (unlikely(iov_iter_is_pipe(to))) {
|
||||
size_t page_off;
|
||||
ret = iov_iter_get_pages_alloc(to, &pages, len,
|
||||
&page_off);
|
||||
|
@@ -2990,7 +2990,7 @@ cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter)
|
||||
size_t copy = min_t(size_t, remaining, PAGE_SIZE);
|
||||
size_t written;
|
||||
|
||||
if (unlikely(iter->type & ITER_PIPE)) {
|
||||
if (unlikely(iov_iter_is_pipe(iter))) {
|
||||
void *addr = kmap_atomic(page);
|
||||
|
||||
written = copy_to_iter(addr, copy, iter);
|
||||
@@ -3302,7 +3302,7 @@ ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
|
||||
if (!is_sync_kiocb(iocb))
|
||||
ctx->iocb = iocb;
|
||||
|
||||
if (to->type == ITER_IOVEC)
|
||||
if (iter_is_iovec(to))
|
||||
ctx->should_dirty = true;
|
||||
|
||||
rc = setup_aio_ctx_iter(ctx, to, READ);
|
||||
|
@@ -786,7 +786,7 @@ setup_aio_ctx_iter(struct cifs_aio_ctx *ctx, struct iov_iter *iter, int rw)
|
||||
struct page **pages = NULL;
|
||||
struct bio_vec *bv = NULL;
|
||||
|
||||
if (iter->type & ITER_KVEC) {
|
||||
if (iov_iter_is_kvec(iter)) {
|
||||
memcpy(&ctx->iter, iter, sizeof(struct iov_iter));
|
||||
ctx->len = count;
|
||||
iov_iter_advance(iter, count);
|
||||
|
@@ -2054,14 +2054,22 @@ int smbd_recv(struct smbd_connection *info, struct msghdr *msg)
|
||||
|
||||
info->smbd_recv_pending++;
|
||||
|
||||
switch (msg->msg_iter.type) {
|
||||
case READ | ITER_KVEC:
|
||||
if (iov_iter_rw(&msg->msg_iter) == WRITE) {
|
||||
/* It's a bug in upper layer to get there */
|
||||
cifs_dbg(VFS, "CIFS: invalid msg iter dir %u\n",
|
||||
iov_iter_rw(&msg->msg_iter));
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch (iov_iter_type(&msg->msg_iter)) {
|
||||
case ITER_KVEC:
|
||||
buf = msg->msg_iter.kvec->iov_base;
|
||||
to_read = msg->msg_iter.kvec->iov_len;
|
||||
rc = smbd_recv_buf(info, buf, to_read);
|
||||
break;
|
||||
|
||||
case READ | ITER_BVEC:
|
||||
case ITER_BVEC:
|
||||
page = msg->msg_iter.bvec->bv_page;
|
||||
page_offset = msg->msg_iter.bvec->bv_offset;
|
||||
to_read = msg->msg_iter.bvec->bv_len;
|
||||
@@ -2071,10 +2079,11 @@ int smbd_recv(struct smbd_connection *info, struct msghdr *msg)
|
||||
default:
|
||||
/* It's a bug in upper layer to get there */
|
||||
cifs_dbg(VFS, "CIFS: invalid msg type %d\n",
|
||||
msg->msg_iter.type);
|
||||
iov_iter_type(&msg->msg_iter));
|
||||
rc = -EINVAL;
|
||||
}
|
||||
|
||||
out:
|
||||
info->smbd_recv_pending--;
|
||||
wake_up(&info->wait_smbd_recv_pending);
|
||||
|
||||
|
@@ -1313,7 +1313,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
|
||||
spin_lock_init(&dio->bio_lock);
|
||||
dio->refcount = 1;
|
||||
|
||||
dio->should_dirty = (iter->type == ITER_IOVEC);
|
||||
dio->should_dirty = iter_is_iovec(iter) && iov_iter_rw(iter) == READ;
|
||||
sdio.iter = iter;
|
||||
sdio.final_block_in_request = end >> blkbits;
|
||||
|
||||
|
@@ -1271,7 +1271,7 @@ static int fuse_get_user_pages(struct fuse_req *req, struct iov_iter *ii,
|
||||
ssize_t ret = 0;
|
||||
|
||||
/* Special case for kernel I/O: can copy directly into the buffer */
|
||||
if (ii->type & ITER_KVEC) {
|
||||
if (iov_iter_is_kvec(ii)) {
|
||||
unsigned long user_addr = fuse_get_user_addr(ii);
|
||||
size_t frag_size = fuse_get_frag_size(ii, *nbytesp);
|
||||
|
||||
|
@@ -1795,7 +1795,7 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
|
||||
if (pos >= dio->i_size)
|
||||
goto out_free_dio;
|
||||
|
||||
if (iter->type == ITER_IOVEC)
|
||||
if (iter_is_iovec(iter) && iov_iter_rw(iter) == READ)
|
||||
dio->flags |= IOMAP_DIO_DIRTY;
|
||||
} else {
|
||||
flags |= IOMAP_WRITE;
|
||||
|
Reference in New Issue
Block a user