Skip to content

Commit f758bfe

Browse files
axboekuba-moo
authored andcommitted
tap: add support for IOCB_NOWAIT
The tap driver already supports passing in nonblocking state based on O_NONBLOCK, add support for checking IOCB_NOWAIT as well. With that done, we can flag it with FMODE_NOWAIT as well. Signed-off-by: Jens Axboe <axboe@kernel.dk> Link: https://lore.kernel.org/r/8f859870-e6e2-09ca-9c0f-a2aa7c984fb2@kernel.dk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 438b406 commit f758bfe

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

drivers/net/tap.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,9 @@ static int tap_open(struct inode *inode, struct file *file)
555555
goto err_put;
556556
}
557557

558+
/* tap groks IOCB_NOWAIT just fine, mark it as such */
559+
file->f_mode |= FMODE_NOWAIT;
560+
558561
dev_put(tap->dev);
559562

560563
rtnl_unlock();
@@ -771,8 +774,12 @@ static ssize_t tap_write_iter(struct kiocb *iocb, struct iov_iter *from)
771774
{
772775
struct file *file = iocb->ki_filp;
773776
struct tap_queue *q = file->private_data;
777+
int noblock = 0;
778+
779+
if ((file->f_flags & O_NONBLOCK) || (iocb->ki_flags & IOCB_NOWAIT))
780+
noblock = 1;
774781

775-
return tap_get_user(q, NULL, from, file->f_flags & O_NONBLOCK);
782+
return tap_get_user(q, NULL, from, noblock);
776783
}
777784

778785
/* Put packet to the user space buffer */
@@ -888,8 +895,12 @@ static ssize_t tap_read_iter(struct kiocb *iocb, struct iov_iter *to)
888895
struct file *file = iocb->ki_filp;
889896
struct tap_queue *q = file->private_data;
890897
ssize_t len = iov_iter_count(to), ret;
898+
int noblock = 0;
899+
900+
if ((file->f_flags & O_NONBLOCK) || (iocb->ki_flags & IOCB_NOWAIT))
901+
noblock = 1;
891902

892-
ret = tap_do_read(q, to, file->f_flags & O_NONBLOCK, NULL);
903+
ret = tap_do_read(q, to, noblock, NULL);
893904
ret = min_t(ssize_t, ret, len);
894905
if (ret > 0)
895906
iocb->ki_pos = ret;

0 commit comments

Comments
 (0)