IB/hfi1: check for user backed iterator, not specific iterator type
authorJens Axboe <axboe@kernel.dk>
Tue, 28 Mar 2023 20:32:38 +0000 (14:32 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 30 Mar 2023 14:12:29 +0000 (08:12 -0600)
In preparation for switching single segment iterators to using ITER_UBUF,
swap the check for whether we are user backed or not. While at it, move
it outside the srcu locking area to clean up the code a bit.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/infiniband/hw/hfi1/file_ops.c

index 3065db9..f3d6ce4 100644 (file)
@@ -267,6 +267,8 @@ static ssize_t hfi1_write_iter(struct kiocb *kiocb, struct iov_iter *from)
 
        if (!HFI1_CAP_IS_KSET(SDMA))
                return -EINVAL;
+       if (!from->user_backed)
+               return -EINVAL;
        idx = srcu_read_lock(&fd->pq_srcu);
        pq = srcu_dereference(fd->pq, &fd->pq_srcu);
        if (!cq || !pq) {
@@ -274,11 +276,6 @@ static ssize_t hfi1_write_iter(struct kiocb *kiocb, struct iov_iter *from)
                return -EIO;
        }
 
-       if (!iter_is_iovec(from) || !dim) {
-               srcu_read_unlock(&fd->pq_srcu, idx);
-               return -EINVAL;
-       }
-
        trace_hfi1_sdma_request(fd->dd, fd->uctxt->ctxt, fd->subctxt, dim);
 
        if (atomic_read(&pq->n_reqs) == pq->n_max_reqs) {