From nobody Fri Dec 19 17:16:19 2025 Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C47A1C9ECE for ; Thu, 11 Apr 2024 15:36:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712849788; cv=none; b=AVIjmWYGP9QuIf4Tlw/lRe1oO478fGvFZYkz9707MDwkM8QYpIt6sNOSkp06+q264K7TWLBvJDXni3RK1Z95hzWYLq8iAVLehmlsp7t9PsSTrVkiD+UY4q0+YqbX9CS9UCGxPInrJBUsCpC0ivk0vH8ZYKyfERJNuAyfPBV/efY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712849788; c=relaxed/simple; bh=JjpU4GRBcne7lTFL4A+MIuHfW0eUTaqr2Y5mR//C6Ps=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HPr0D7RWQFAJ3HA/i5k55Gw5vfwWpg9Y+l7+vI5XT/oULy/YjY6oVuKa5D84v8yYh9JiPx3O+MvHeinrmG1mp0ZcJ1uJ+jFxt+j4I3PmeNXPtt8k7NT3Z0fMxsqbp2agb4JZw1yLxkyBQtCP7HYOTfcjGaNegM4TFFr0SGJB+Ls= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.dk; spf=pass smtp.mailfrom=kernel.dk; dkim=pass (2048-bit key) header.d=kernel-dk.20230601.gappssmtp.com header.i=@kernel-dk.20230601.gappssmtp.com header.b=O2uig6EW; arc=none smtp.client-ip=209.85.166.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.dk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=kernel.dk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel-dk.20230601.gappssmtp.com header.i=@kernel-dk.20230601.gappssmtp.com header.b="O2uig6EW" Received: by mail-io1-f46.google.com with SMTP id ca18e2360f4ac-7d6112ba6baso58079039f.1 for ; Thu, 11 Apr 2024 08:36:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20230601.gappssmtp.com; s=20230601; t=1712849784; x=1713454584; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=njqcBwWUNR1MADk9nqYz8nv4i+lwHFUPJWFghnPuFjs=; b=O2uig6EWdPRgHZCZ7otrCPrfQypJ1eQs8IaGl9xO+Sjaq6qhRfI9goEzbM5DWWD6nW Md6ucGTyEPzUhp8nyegNQyQPVQ6JtPKrvXKydV7r22VKlR/YG97t8cLStJF3WsjcoIdc k9TuvH3aLnRPAwUpp731F8RGW9y36kUqhA5QwvAemUZ5e/2DnzKFtPs43hGMSceAz6q0 5aYbzpXEQvMkIxILaX+N3FR7BG3n+L9ngco6j97GONMy3ekJmgHa0CTgeETP278DBNrL fMPW3geiN6KvU2qvXBjkO1Mjg637mycUoNNr05s45nBYkrMF6kVIG2OyGOiZ1fdL51jU +B1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712849784; x=1713454584; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=njqcBwWUNR1MADk9nqYz8nv4i+lwHFUPJWFghnPuFjs=; b=erZQfcC8sOEJQyi2Y+SOsSbMuTI1UpjLnMeZSV8M7Krdctm64JTHSOR41NAOs0WP0X vd3+QAxHa6sTyvKy1S7YUgo8Lf+JYLOqnZRw2rBSqLM3DXQ2obJxVK1VKz2IpnrBgG2G +c5grEh86RHE+g5I2dcfenYDABBc1tKMf0MzM3001AY39/UWZPsfYXcezZrK85O1X2Qk IhCFVgVlvugghabqGxOJmUYgZb+vc8+nago+sTl3Y9JxcnPv0KNxeSAuUVZDFrgOiO7u T+DmU6JWOovfcPePGm0pI4BjIFptcirf+oprcmuLx1PMnc8A5jX+qemft7XgfNRBJUv1 w9hQ== X-Gm-Message-State: AOJu0YwvF6y2YkwGS5KNlHyN4/BhNzo8Qx/8NNqTj8kABApLDRmoUw1z OOFvfe74cWwgX+ElaegQxmrlLgm0+UF1TkcXCbdUbck/2n+9/BEfy5hReLeWAD64mBhbqzsid9W 7 X-Google-Smtp-Source: AGHT+IECsoBNkAbvG8lBtHH7uIgp/F+qevwgD8Qpg9Vu2GLAHqfkogTYBEztciutqEbyCeCDWjFT5g== X-Received: by 2002:a6b:f312:0:b0:7d5:de23:13a9 with SMTP id m18-20020a6bf312000000b007d5de2313a9mr161720ioh.1.1712849784482; Thu, 11 Apr 2024 08:36:24 -0700 (PDT) Received: from localhost.localdomain ([96.43.243.2]) by smtp.gmail.com with ESMTPSA id jc25-20020a056638891900b0047f14b7f6c0sm457056jab.5.2024.04.11.08.36.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 08:36:22 -0700 (PDT) From: Jens Axboe To: linux-kernel@vger.kernel.org Cc: Jens Axboe Subject: [PATCH 168/437] usb: misc: convert to read/write iterators Date: Thu, 11 Apr 2024 09:15:08 -0600 Message-ID: <20240411153126.16201-169-axboe@kernel.dk> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240411153126.16201-1-axboe@kernel.dk> References: <20240411153126.16201-1-axboe@kernel.dk> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Jens Axboe --- drivers/usb/misc/adutux.c | 6 ++++-- drivers/usb/misc/chaoskey.c | 13 +++++-------- drivers/usb/misc/idmouse.c | 15 ++++++--------- drivers/usb/misc/iowarrior.c | 6 ++++-- drivers/usb/misc/ldusb.c | 24 ++++++++++++------------ drivers/usb/misc/legousbtower.c | 26 ++++++++++++++------------ drivers/usb/misc/sisusbvga/sisusbvga.c | 6 ++++-- drivers/usb/misc/usblcd.c | 20 ++++++++++---------- drivers/usb/misc/yurex.c | 19 +++++++++---------- 9 files changed, 68 insertions(+), 67 deletions(-) diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c index ed6a19254d2f..20d6107682c2 100644 --- a/drivers/usb/misc/adutux.c +++ b/drivers/usb/misc/adutux.c @@ -499,6 +499,7 @@ static ssize_t adu_read(struct file *file, __user char = *buffer, size_t count, =20 return retval; } +FOPS_READ_ITER_HELPER(adu_read); =20 static ssize_t adu_write(struct file *file, const __user char *buffer, size_t count, loff_t *ppos) @@ -619,12 +620,13 @@ static ssize_t adu_write(struct file *file, const __u= ser char *buffer, remove_wait_queue(&dev->write_wait, &waita); return retval; } +FOPS_WRITE_ITER_HELPER(adu_write); =20 /* file operations needed when we register this driver */ static const struct file_operations adu_fops =3D { .owner =3D THIS_MODULE, - .read =3D adu_read, - .write =3D adu_write, + .read_iter =3D adu_read_iter, + .write_iter =3D adu_write_iter, .open =3D adu_open, .release =3D adu_release, .llseek =3D noop_llseek, diff --git a/drivers/usb/misc/chaoskey.c b/drivers/usb/misc/chaoskey.c index 6fb5140e29b9..400b19bb1ee6 100644 --- a/drivers/usb/misc/chaoskey.c +++ b/drivers/usb/misc/chaoskey.c @@ -403,18 +403,16 @@ static int _chaoskey_fill(struct chaoskey *dev) return result; } =20 -static ssize_t chaoskey_read(struct file *file, - char __user *buffer, - size_t count, - loff_t *ppos) +static ssize_t chaoskey_read(struct kiocb *iocb, struct iov_iter *to) { struct chaoskey *dev; ssize_t read_count =3D 0; int this_time; int result =3D 0; unsigned long remain; + size_t count =3D iov_iter_count(to); =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 if (dev =3D=3D NULL || !dev->present) return -ENODEV; @@ -446,7 +444,7 @@ static ssize_t chaoskey_read(struct file *file, if (this_time > count) this_time =3D count; =20 - remain =3D copy_to_user(buffer, dev->buf + dev->used, this_time); + remain =3D !copy_to_iter_full(dev->buf + dev->used, this_time, to); if (remain) { result =3D -EFAULT; =20 @@ -460,7 +458,6 @@ static ssize_t chaoskey_read(struct file *file, =20 count -=3D this_time; read_count +=3D this_time; - buffer +=3D this_time; dev->used +=3D this_time; mutex_unlock(&dev->lock); } @@ -554,7 +551,7 @@ static int chaoskey_resume(struct usb_interface *interf= ace) /* file operation pointers */ static const struct file_operations chaoskey_fops =3D { .owner =3D THIS_MODULE, - .read =3D chaoskey_read, + .read_iter =3D chaoskey_read, .open =3D chaoskey_open, .release =3D chaoskey_release, .llseek =3D default_llseek, diff --git a/drivers/usb/misc/idmouse.c b/drivers/usb/misc/idmouse.c index ea39243efee3..91534f0982ea 100644 --- a/drivers/usb/misc/idmouse.c +++ b/drivers/usb/misc/idmouse.c @@ -79,9 +79,7 @@ struct usb_idmouse { }; =20 /* local function prototypes */ -static ssize_t idmouse_read(struct file *file, char __user *buffer, - size_t count, loff_t * ppos); - +static ssize_t idmouse_read(struct kiocb *iocb, struct iov_iter *to); static int idmouse_open(struct inode *inode, struct file *file); static int idmouse_release(struct inode *inode, struct file *file); =20 @@ -95,7 +93,7 @@ static int idmouse_resume(struct usb_interface *intf); /* file operation pointers */ static const struct file_operations idmouse_fops =3D { .owner =3D THIS_MODULE, - .read =3D idmouse_read, + .read_iter =3D idmouse_read, .open =3D idmouse_open, .release =3D idmouse_release, .llseek =3D default_llseek, @@ -290,10 +288,9 @@ static int idmouse_release(struct inode *inode, struct= file *file) return 0; } =20 -static ssize_t idmouse_read(struct file *file, char __user *buffer, size_t= count, - loff_t * ppos) +static ssize_t idmouse_read(struct kiocb *iocb, struct iov_iter *to) { - struct usb_idmouse *dev =3D file->private_data; + struct usb_idmouse *dev =3D iocb->ki_filp->private_data; int result; =20 /* lock this object */ @@ -305,8 +302,8 @@ static ssize_t idmouse_read(struct file *file, char __u= ser *buffer, size_t count return -ENODEV; } =20 - result =3D simple_read_from_buffer(buffer, count, ppos, - dev->bulk_in_buffer, IMGSIZE); + result =3D simple_copy_to_iter(dev->bulk_in_buffer, &iocb->ki_pos, + IMGSIZE, to); /* unlock the device */ mutex_unlock(&dev->lock); return result; diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c index 6d28467ce352..bb0f28e1cdca 100644 --- a/drivers/usb/misc/iowarrior.c +++ b/drivers/usb/misc/iowarrior.c @@ -332,6 +332,7 @@ static ssize_t iowarrior_read(struct file *file, char _= _user *buffer, atomic_set(&dev->read_idx, read_idx); return count; } +FOPS_READ_ITER_HELPER(iowarrior_read); =20 /* * iowarrior_write @@ -468,6 +469,7 @@ static ssize_t iowarrior_write(struct file *file, mutex_unlock(&dev->mutex); return retval; } +FOPS_WRITE_ITER_HELPER(iowarrior_write); =20 /* * iowarrior_ioctl @@ -707,8 +709,8 @@ static __poll_t iowarrior_poll(struct file *file, poll_= table * wait) */ static const struct file_operations iowarrior_fops =3D { .owner =3D THIS_MODULE, - .write =3D iowarrior_write, - .read =3D iowarrior_read, + .write_iter =3D iowarrior_write_iter, + .read_iter =3D iowarrior_read_iter, .unlocked_ioctl =3D iowarrior_ioctl, .open =3D iowarrior_open, .release =3D iowarrior_release, diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c index 7cbef74dfc9a..7fef44f35b45 100644 --- a/drivers/usb/misc/ldusb.c +++ b/drivers/usb/misc/ldusb.c @@ -433,16 +433,16 @@ static __poll_t ld_usb_poll(struct file *file, poll_t= able *wait) /* * ld_usb_read */ -static ssize_t ld_usb_read(struct file *file, char __user *buffer, size_t = count, - loff_t *ppos) +static ssize_t ld_usb_read(struct kiocb *iocb, struct iov_iter *to) { + size_t count =3D iov_iter_count(to); struct ld_usb *dev; size_t *actual_buffer; size_t bytes_to_read; int retval =3D 0; int rv; =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 /* verify that we actually have some data to read */ if (count =3D=3D 0) @@ -466,7 +466,7 @@ static ssize_t ld_usb_read(struct file *file, char __us= er *buffer, size_t count, while (dev->ring_head =3D=3D dev->ring_tail) { dev->interrupt_in_done =3D 0; spin_unlock_irq(&dev->rbsl); - if (file->f_flags & O_NONBLOCK) { + if (iocb->ki_filp->f_flags & O_NONBLOCK) { retval =3D -EAGAIN; goto unlock_exit; } @@ -490,7 +490,7 @@ static ssize_t ld_usb_read(struct file *file, char __us= er *buffer, size_t count, *actual_buffer-bytes_to_read); =20 /* copy one interrupt_in_buffer from ring_buffer into userspace */ - if (copy_to_user(buffer, actual_buffer+1, bytes_to_read)) { + if (!copy_to_iter_full(actual_buffer+1, bytes_to_read, to)) { retval =3D -EFAULT; goto unlock_exit; } @@ -520,14 +520,14 @@ static ssize_t ld_usb_read(struct file *file, char __= user *buffer, size_t count, /* * ld_usb_write */ -static ssize_t ld_usb_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) +static ssize_t ld_usb_write(struct kiocb *iocb, struct iov_iter *from) { + size_t count =3D iov_iter_count(from); struct ld_usb *dev; size_t bytes_to_write; int retval =3D 0; =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 /* verify that we actually have some data to write */ if (count =3D=3D 0) @@ -548,7 +548,7 @@ static ssize_t ld_usb_write(struct file *file, const ch= ar __user *buffer, =20 /* wait until previous transfer is finished */ if (dev->interrupt_out_busy) { - if (file->f_flags & O_NONBLOCK) { + if (iocb->ki_filp->f_flags & O_NONBLOCK) { retval =3D -EAGAIN; goto unlock_exit; } @@ -566,7 +566,7 @@ static ssize_t ld_usb_write(struct file *file, const ch= ar __user *buffer, dev_dbg(&dev->intf->dev, "%s: count =3D %zu, bytes_to_write =3D %zu\n", __func__, count, bytes_to_write); =20 - if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) { + if (!copy_from_iter_full(dev->interrupt_out_buffer, bytes_to_write, from)= ) { retval =3D -EFAULT; goto unlock_exit; } @@ -622,8 +622,8 @@ static ssize_t ld_usb_write(struct file *file, const ch= ar __user *buffer, /* file operations needed when we register this driver */ static const struct file_operations ld_usb_fops =3D { .owner =3D THIS_MODULE, - .read =3D ld_usb_read, - .write =3D ld_usb_write, + .read_iter =3D ld_usb_read, + .write_iter =3D ld_usb_write, .open =3D ld_usb_open, .release =3D ld_usb_release, .poll =3D ld_usb_poll, diff --git a/drivers/usb/misc/legousbtower.c b/drivers/usb/misc/legousbtowe= r.c index 379cf01a6e96..57dcb5612734 100644 --- a/drivers/usb/misc/legousbtower.c +++ b/drivers/usb/misc/legousbtower.c @@ -218,8 +218,8 @@ struct lego_usb_tower { =20 =20 /* local function prototypes */ -static ssize_t tower_read(struct file *file, char __user *buffer, size_t c= ount, loff_t *ppos); -static ssize_t tower_write(struct file *file, const char __user *buffer, s= ize_t count, loff_t *ppos); +static ssize_t tower_read(struct kiocb *iocb, struct iov_iter *to); +static ssize_t tower_write(struct kiocb *iocb, struct iov_iter *from); static inline void tower_delete(struct lego_usb_tower *dev); static int tower_open(struct inode *inode, struct file *file); static int tower_release(struct inode *inode, struct file *file); @@ -237,8 +237,8 @@ static void tower_disconnect(struct usb_interface *inte= rface); /* file operations needed when we register this driver */ static const struct file_operations tower_fops =3D { .owner =3D THIS_MODULE, - .read =3D tower_read, - .write =3D tower_write, + .read_iter =3D tower_read, + .write_iter =3D tower_write, .open =3D tower_open, .release =3D tower_release, .poll =3D tower_poll, @@ -489,15 +489,16 @@ static loff_t tower_llseek(struct file *file, loff_t = off, int whence) /* * tower_read */ -static ssize_t tower_read(struct file *file, char __user *buffer, size_t c= ount, loff_t *ppos) +static ssize_t tower_read(struct kiocb *iocb, struct iov_iter *to) { + size_t count =3D iov_iter_count(to); struct lego_usb_tower *dev; size_t bytes_to_read; int i; int retval =3D 0; unsigned long timeout =3D 0; =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 /* lock this object */ if (mutex_lock_interruptible(&dev->lock)) { @@ -523,7 +524,7 @@ static ssize_t tower_read(struct file *file, char __use= r *buffer, size_t count, /* wait for data */ tower_check_for_read_packet(dev); while (dev->read_packet_length =3D=3D 0) { - if (file->f_flags & O_NONBLOCK) { + if (iocb->ki_filp->f_flags & O_NONBLOCK) { retval =3D -EAGAIN; goto unlock_exit; } @@ -547,7 +548,7 @@ static ssize_t tower_read(struct file *file, char __use= r *buffer, size_t count, /* copy the data from read_buffer into userspace */ bytes_to_read =3D min(count, dev->read_packet_length); =20 - if (copy_to_user(buffer, dev->read_buffer, bytes_to_read)) { + if (!copy_to_iter_full(dev->read_buffer, bytes_to_read, to)) { retval =3D -EFAULT; goto unlock_exit; } @@ -573,13 +574,14 @@ static ssize_t tower_read(struct file *file, char __u= ser *buffer, size_t count, /* * tower_write */ -static ssize_t tower_write(struct file *file, const char __user *buffer, s= ize_t count, loff_t *ppos) +static ssize_t tower_write(struct kiocb *iocb, struct iov_iter *from) { + size_t count =3D iov_iter_count(from); struct lego_usb_tower *dev; size_t bytes_to_write; int retval =3D 0; =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 /* lock this object */ if (mutex_lock_interruptible(&dev->lock)) { @@ -601,7 +603,7 @@ static ssize_t tower_write(struct file *file, const cha= r __user *buffer, size_t =20 /* wait until previous transfer is finished */ while (dev->interrupt_out_busy) { - if (file->f_flags & O_NONBLOCK) { + if (iocb->ki_filp->f_flags & O_NONBLOCK) { retval =3D -EAGAIN; goto unlock_exit; } @@ -616,7 +618,7 @@ static ssize_t tower_write(struct file *file, const cha= r __user *buffer, size_t dev_dbg(&dev->udev->dev, "%s: count =3D %zd, bytes_to_write =3D %zd\n", __func__, count, bytes_to_write); =20 - if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) { + if (!copy_from_iter_full(dev->interrupt_out_buffer, bytes_to_write, from)= ) { retval =3D -EFAULT; goto unlock_exit; } diff --git a/drivers/usb/misc/sisusbvga/sisusbvga.c b/drivers/usb/misc/sisu= sbvga/sisusbvga.c index febf34f9f049..88a94fafe594 100644 --- a/drivers/usb/misc/sisusbvga/sisusbvga.c +++ b/drivers/usb/misc/sisusbvga/sisusbvga.c @@ -2428,6 +2428,7 @@ static ssize_t sisusb_read(struct file *file, char __= user *buffer, =20 return errno ? errno : bytes_read; } +FOPS_READ_ITER_HELPER(sisusb_read); =20 static ssize_t sisusb_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos) @@ -2572,6 +2573,7 @@ static ssize_t sisusb_write(struct file *file, const = char __user *buffer, =20 return errno ? errno : bytes_written; } +FOPS_WRITE_ITER_HELPER(sisusb_write); =20 static loff_t sisusb_lseek(struct file *file, loff_t offset, int orig) { @@ -2757,8 +2759,8 @@ static const struct file_operations usb_sisusb_fops = =3D { .owner =3D THIS_MODULE, .open =3D sisusb_open, .release =3D sisusb_release, - .read =3D sisusb_read, - .write =3D sisusb_write, + .read_iter =3D sisusb_read_iter, + .write_iter =3D sisusb_write_iter, .llseek =3D sisusb_lseek, #ifdef CONFIG_COMPAT .compat_ioctl =3D sisusb_compat_ioctl, diff --git a/drivers/usb/misc/usblcd.c b/drivers/usb/misc/usblcd.c index bb546f624a45..8d826e648b84 100644 --- a/drivers/usb/misc/usblcd.c +++ b/drivers/usb/misc/usblcd.c @@ -121,14 +121,14 @@ static int lcd_release(struct inode *inode, struct fi= le *file) return 0; } =20 -static ssize_t lcd_read(struct file *file, char __user * buffer, - size_t count, loff_t *ppos) +static ssize_t lcd_read(struct kiocb *iocb, struct iov_iter *to) { + size_t count =3D iov_iter_count(to); struct usb_lcd *dev; int retval =3D 0; int bytes_read; =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 down_read(&dev->io_rwsem); =20 @@ -147,7 +147,7 @@ static ssize_t lcd_read(struct file *file, char __user = * buffer, =20 /* if the read was successful, copy the data to userspace */ if (!retval) { - if (copy_to_user(buffer, dev->bulk_in_buffer, bytes_read)) + if (!copy_to_iter_full(dev->bulk_in_buffer, bytes_read, to)) retval =3D -EFAULT; else retval =3D bytes_read; @@ -214,15 +214,15 @@ static void lcd_write_bulk_callback(struct urb *urb) up(&dev->limit_sem); } =20 -static ssize_t lcd_write(struct file *file, const char __user * user_buffe= r, - size_t count, loff_t *ppos) +static ssize_t lcd_write(struct kiocb *iocb, struct iov_iter *from) { + size_t count =3D iov_iter_count(from); struct usb_lcd *dev; int retval =3D 0, r; struct urb *urb =3D NULL; char *buf =3D NULL; =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 /* verify that we actually have some data to write */ if (count =3D=3D 0) @@ -253,7 +253,7 @@ static ssize_t lcd_write(struct file *file, const char = __user * user_buffer, goto error; } =20 - if (copy_from_user(buf, user_buffer, count)) { + if (!copy_from_iter_full(buf, count, from)) { retval =3D -EFAULT; goto error; } @@ -296,8 +296,8 @@ static ssize_t lcd_write(struct file *file, const char = __user * user_buffer, =20 static const struct file_operations lcd_fops =3D { .owner =3D THIS_MODULE, - .read =3D lcd_read, - .write =3D lcd_write, + .read_iter =3D lcd_read, + .write_iter =3D lcd_write, .open =3D lcd_open, .unlocked_ioctl =3D lcd_ioctl, .release =3D lcd_release, diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c index 9a0649d23693..b3dd24aeae23 100644 --- a/drivers/usb/misc/yurex.c +++ b/drivers/usb/misc/yurex.c @@ -398,15 +398,14 @@ static int yurex_release(struct inode *inode, struct = file *file) return 0; } =20 -static ssize_t yurex_read(struct file *file, char __user *buffer, size_t c= ount, - loff_t *ppos) +static ssize_t yurex_read(struct kiocb *iocb, struct iov_iter *to) { struct usb_yurex *dev; int len =3D 0; char in_buffer[MAX_S64_STRLEN]; unsigned long flags; =20 - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 mutex_lock(&dev->io_mutex); if (dev->disconnected) { /* already disconnected */ @@ -424,11 +423,10 @@ static ssize_t yurex_read(struct file *file, char __u= ser *buffer, size_t count, spin_unlock_irqrestore(&dev->lock, flags); mutex_unlock(&dev->io_mutex); =20 - return simple_read_from_buffer(buffer, count, ppos, in_buffer, len); + return simple_copy_to_iter(in_buffer, &iocb->ki_pos, len, to); } =20 -static ssize_t yurex_write(struct file *file, const char __user *user_buff= er, - size_t count, loff_t *ppos) +static ssize_t yurex_write(struct kiocb *iocb, struct iov_iter *from) { struct usb_yurex *dev; int i, set =3D 0, retval =3D 0; @@ -436,10 +434,11 @@ static ssize_t yurex_write(struct file *file, const c= har __user *user_buffer, char *data =3D buffer; unsigned long long c, c2 =3D 0; signed long timeout =3D 0; + size_t count =3D iov_iter_count(from); DEFINE_WAIT(wait); =20 count =3D min(sizeof(buffer) - 1, count); - dev =3D file->private_data; + dev =3D iocb->ki_filp->private_data; =20 /* verify that we actually have some data to write */ if (count =3D=3D 0) @@ -452,7 +451,7 @@ static ssize_t yurex_write(struct file *file, const cha= r __user *user_buffer, goto error; } =20 - if (copy_from_user(buffer, user_buffer, count)) { + if (!copy_from_iter_full(buffer, count, from)) { mutex_unlock(&dev->io_mutex); retval =3D -EFAULT; goto error; @@ -521,8 +520,8 @@ static ssize_t yurex_write(struct file *file, const cha= r __user *user_buffer, =20 static const struct file_operations yurex_fops =3D { .owner =3D THIS_MODULE, - .read =3D yurex_read, - .write =3D yurex_write, + .read_iter =3D yurex_read, + .write_iter =3D yurex_write, .open =3D yurex_open, .release =3D yurex_release, .fasync =3D yurex_fasync, --=20 2.43.0