From nobody Sun Feb 8 08:08:24 2026 Received: from mail-il1-f170.google.com (mail-il1-f170.google.com [209.85.166.170]) (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 90C7278C72 for ; Thu, 11 Apr 2024 15:37:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712849846; cv=none; b=qeCDyPqpyRSDuCSgdwayFhzHwqDjv/TbP7NlxVa1SHInEBl8R/ZJ2O17Rllq9iGp/PoPZWyul51Dd0eOEBq5degJ89g6yEHazBqSu+EKnO5qYs9A+M2udvtoGAGgAP+ERt12maehi/EleK8GxxIEuZhBj3r82ZyBbDfAER2/quk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712849846; c=relaxed/simple; bh=c4VQjDpBziD9iQRRsEw79UZ23vGA/d6lw6QGoXIK980=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pgirqUH+qYLcu2gQH/QlQaZC8aEwfgSFWrC8PjYrJYvVyJiF23Qj4o5om+D4SIicRS9t/qfbKkPhL5YwYwYrLTnfXprkjU2CjxCgtp0vpqej1hccJaeJEQ/ia0Zptj30WmVF4kg5GiP7/YfLuNiVJezPhxWvp6Qs7ZgSnWq7KkY= 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=twjH1zcd; arc=none smtp.client-ip=209.85.166.170 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="twjH1zcd" Received: by mail-il1-f170.google.com with SMTP id e9e14a558f8ab-36a224d7414so185645ab.1 for ; Thu, 11 Apr 2024 08:37:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20230601.gappssmtp.com; s=20230601; t=1712849843; x=1713454643; 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=NVcA11oiqqKckOIJKSAr7zcRS6dozXsd/egI2hKWTf0=; b=twjH1zcdKWU+4js0Og3OMdhLNmmY668O1FaSR+xkEG+TFonttdI7McQ3cQ7Mqrt5ma qJTSsJ+MF9FXVlfOFn6WbKb0v+RPLY39+vwpjGakI8pa0Mtti41LcNxbS5SRZjojbAqM yIcQSGwOj0S2ohzbcE/A2dczBwD+EVMeb+vRZ157rXCpCHndeeoNEo/N1keFePqCm9m9 kcqxiHJBKiulznydUh56E/4N1Cbwu9j1gWDhHIo7rY2zupm8JFAerhrjJrcEZ3cdUJnR FKmlMjDKxJEitwoEihYG13/ISWsoieOJhbEqm23/fv2Shlo/02enaPefa66nH/ffKVmP OdsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712849843; x=1713454643; 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=NVcA11oiqqKckOIJKSAr7zcRS6dozXsd/egI2hKWTf0=; b=fw00/4hXPjItGJ7VKVSchFISQVDwhxjeqeMBIcfXEmknSgANmCjjfGWylD5xUMnFBJ dpe4ajoo5MO1JcIABKrOObC+bObw6yO3RFC2yhkJtw08F64+g8JoV5WI7QBHEzc/72dL R/EyJCpQ3/TMy+DTucfXjydlvdD6J75ybEme517/hj6vvXvTIcptIbvdmkgxtS5gjgEL Mk/Xa1fPI+Cb9bWAT3wf8U+mV1AuiiLNm/056jVHQH/9pM7T7vZuvUfEBKSWfM5HE/f0 LegoGwIe5kOM0/PwdkcW1l1Lmo5HajpiAv02g1EUFDvKiwlT7iHc4D/6AMFxw67Mke2d mYqw== X-Gm-Message-State: AOJu0YwCjRUn3RqkJmReyl4mMBxVhmr3zeMke/Jy++9OP2cPBuuTQtnB marppPK3neHRYK42vjfFnxiJm6ZUyRQoGZ+92Y50+PXaNUX1F1TYC5vJsFz3a7rCy24XNKTn+39 i X-Google-Smtp-Source: AGHT+IH0WMBZqOc3AZXqlMmX8eArsu9N275SgHnwH2q/eBuc5sPcd0b9N1yWQQcnV2NSgg9OR4td5A== X-Received: by 2002:a6b:6605:0:b0:7d4:1dae:da1a with SMTP id a5-20020a6b6605000000b007d41daeda1amr152171ioc.2.1712849843372; Thu, 11 Apr 2024 08:37:23 -0700 (PDT) Received: from localhost.localdomain ([96.43.243.2]) by smtp.gmail.com with ESMTPSA id jc25-20020a056638891900b0047f14b7f6c0sm457056jab.5.2024.04.11.08.37.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 08:37:22 -0700 (PDT) From: Jens Axboe To: linux-kernel@vger.kernel.org Cc: Jens Axboe Subject: [PATCH 205/437] drivers/xen: convert to ->read_iter and ->write_iter Date: Thu, 11 Apr 2024 09:15:45 -0600 Message-ID: <20240411153126.16201-206-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/xen/evtchn.c | 25 ++++++++++++------------ drivers/xen/mcelog.c | 17 ++++++++-------- drivers/xen/xenbus/xenbus_dev_frontend.c | 24 +++++++++++------------ drivers/xen/xenfs/super.c | 7 +++---- drivers/xen/xenfs/xenstored.c | 11 +++++------ drivers/xen/xenfs/xensyms.c | 2 +- 6 files changed, 42 insertions(+), 44 deletions(-) diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c index f6a2216c2c87..06af1a458e44 100644 --- a/drivers/xen/evtchn.c +++ b/drivers/xen/evtchn.c @@ -51,6 +51,7 @@ #include #include #include +#include =20 #include #include @@ -197,12 +198,12 @@ static irqreturn_t evtchn_interrupt(int irq, void *da= ta) return IRQ_HANDLED; } =20 -static ssize_t evtchn_read(struct file *file, char __user *buf, - size_t count, loff_t *ppos) +static ssize_t evtchn_read(struct kiocb *iocb, struct iov_iter *to) { int rc; unsigned int c, p, bytes1 =3D 0, bytes2 =3D 0; - struct per_user_data *u =3D file->private_data; + struct per_user_data *u =3D iocb->ki_filp->private_data; + size_t count =3D iov_iter_count(to); =20 /* Whole number of ports. */ count &=3D ~(sizeof(evtchn_port_t)-1); @@ -227,7 +228,7 @@ static ssize_t evtchn_read(struct file *file, char __us= er *buf, =20 mutex_unlock(&u->ring_cons_mutex); =20 - if (file->f_flags & O_NONBLOCK) + if (iocb->ki_filp->f_flags & O_NONBLOCK) return -EAGAIN; =20 rc =3D wait_event_interruptible(u->evtchn_wait, @@ -256,9 +257,9 @@ static ssize_t evtchn_read(struct file *file, char __us= er *buf, =20 rc =3D -EFAULT; smp_rmb(); /* Ensure that we see the port before we copy it. */ - if (copy_to_user(buf, evtchn_ring_entry(u, c), bytes1) || + if (!copy_to_iter_full(evtchn_ring_entry(u, c), bytes1, to) || ((bytes2 !=3D 0) && - copy_to_user(&buf[bytes1], &u->ring[0], bytes2))) + !copy_to_iter_full(&u->ring[0], bytes2, to))) goto unlock_out; =20 WRITE_ONCE(u->ring_cons, c + (bytes1 + bytes2) / sizeof(evtchn_port_t)); @@ -269,12 +270,12 @@ static ssize_t evtchn_read(struct file *file, char __= user *buf, return rc; } =20 -static ssize_t evtchn_write(struct file *file, const char __user *buf, - size_t count, loff_t *ppos) +static ssize_t evtchn_write(struct kiocb *iocb, struct iov_iter *from) { int rc, i; evtchn_port_t *kbuf =3D (evtchn_port_t *)__get_free_page(GFP_KERNEL); - struct per_user_data *u =3D file->private_data; + struct per_user_data *u =3D iocb->ki_filp->private_data; + size_t count =3D iov_iter_count(from); =20 if (kbuf =3D=3D NULL) return -ENOMEM; @@ -290,7 +291,7 @@ static ssize_t evtchn_write(struct file *file, const ch= ar __user *buf, count =3D PAGE_SIZE; =20 rc =3D -EFAULT; - if (copy_from_user(kbuf, buf, count) !=3D 0) + if (!copy_from_iter_full(kbuf, count, from) !=3D 0) goto out; =20 mutex_lock(&u->bind_mutex); @@ -687,8 +688,8 @@ static int evtchn_release(struct inode *inode, struct f= ile *filp) =20 static const struct file_operations evtchn_fops =3D { .owner =3D THIS_MODULE, - .read =3D evtchn_read, - .write =3D evtchn_write, + .read_iter =3D evtchn_read, + .write_iter =3D evtchn_write, .unlocked_ioctl =3D evtchn_ioctl, .poll =3D evtchn_poll, .fasync =3D evtchn_fasync, diff --git a/drivers/xen/mcelog.c b/drivers/xen/mcelog.c index e9ac3b8c4167..610b5f746ca4 100644 --- a/drivers/xen/mcelog.c +++ b/drivers/xen/mcelog.c @@ -103,10 +103,10 @@ static int xen_mce_chrdev_release(struct inode *inode= , struct file *file) return 0; } =20 -static ssize_t xen_mce_chrdev_read(struct file *filp, char __user *ubuf, - size_t usize, loff_t *off) +static ssize_t xen_mce_chrdev_read(struct kiocb *iocb, struct iov_iter *to) { - char __user *buf =3D ubuf; + size_t usize =3D iov_iter_count(to); + ssize_t copied; unsigned num; int i, err; =20 @@ -116,15 +116,16 @@ static ssize_t xen_mce_chrdev_read(struct file *filp,= char __user *ubuf, =20 /* Only supports full reads right now */ err =3D -EINVAL; - if (*off !=3D 0 || usize < XEN_MCE_LOG_LEN*sizeof(struct xen_mce)) + if (iocb->ki_pos !=3D 0 || usize < XEN_MCE_LOG_LEN*sizeof(struct xen_mce)) goto out; =20 err =3D 0; + copied =3D 0; for (i =3D 0; i < num; i++) { struct xen_mce *m =3D &xen_mcelog.entry[i]; =20 - err |=3D copy_to_user(buf, m, sizeof(*m)); - buf +=3D sizeof(*m); + err |=3D !copy_to_iter_full(m, sizeof(*m), to); + copied +=3D sizeof(*m); } =20 memset(xen_mcelog.entry, 0, num * sizeof(struct xen_mce)); @@ -136,7 +137,7 @@ static ssize_t xen_mce_chrdev_read(struct file *filp, c= har __user *ubuf, out: mutex_unlock(&mcelog_lock); =20 - return err ? err : buf - ubuf; + return err ? err : copied; } =20 static __poll_t xen_mce_chrdev_poll(struct file *file, poll_table *wait) @@ -179,7 +180,7 @@ static long xen_mce_chrdev_ioctl(struct file *f, unsign= ed int cmd, static const struct file_operations xen_mce_chrdev_ops =3D { .open =3D xen_mce_chrdev_open, .release =3D xen_mce_chrdev_release, - .read =3D xen_mce_chrdev_read, + .read_iter =3D xen_mce_chrdev_read, .poll =3D xen_mce_chrdev_poll, .unlocked_ioctl =3D xen_mce_chrdev_ioctl, .llseek =3D no_llseek, diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/= xenbus_dev_frontend.c index 6f56640092a9..3da823abfdc0 100644 --- a/drivers/xen/xenbus/xenbus_dev_frontend.c +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c @@ -122,11 +122,10 @@ struct xenbus_file_priv { }; =20 /* Read out any raw xenbus messages queued up. */ -static ssize_t xenbus_file_read(struct file *filp, - char __user *ubuf, - size_t len, loff_t *ppos) +static ssize_t xenbus_file_read(struct kiocb *iocb, struct iov_iter *to) { - struct xenbus_file_priv *u =3D filp->private_data; + struct xenbus_file_priv *u =3D iocb->ki_filp->private_data; + size_t len =3D iov_iter_count(to); struct read_buffer *rb; ssize_t i; int ret; @@ -135,7 +134,7 @@ static ssize_t xenbus_file_read(struct file *filp, again: while (list_empty(&u->read_buffers)) { mutex_unlock(&u->reply_mutex); - if (filp->f_flags & O_NONBLOCK) + if (iocb->ki_filp->f_flags & O_NONBLOCK) return -EAGAIN; =20 ret =3D wait_event_interruptible(u->read_waitq, @@ -150,7 +149,7 @@ static ssize_t xenbus_file_read(struct file *filp, while (i < len) { size_t sz =3D min_t(size_t, len - i, rb->len - rb->cons); =20 - ret =3D copy_to_user(ubuf + i, &rb->msg[rb->cons], sz); + ret =3D !copy_to_iter_full(&rb->msg[rb->cons], sz, to); =20 i +=3D sz - ret; rb->cons +=3D sz - ret; @@ -547,11 +546,10 @@ static int xenbus_write_watch(unsigned msg_type, stru= ct xenbus_file_priv *u) return rc; } =20 -static ssize_t xenbus_file_write(struct file *filp, - const char __user *ubuf, - size_t len, loff_t *ppos) +static ssize_t xenbus_file_write(struct kiocb *iocb, struct iov_iter *from) { - struct xenbus_file_priv *u =3D filp->private_data; + struct xenbus_file_priv *u =3D iocb->ki_filp->private_data; + size_t len =3D iov_iter_count(from); uint32_t msg_type; int rc =3D len; int ret; @@ -585,7 +583,7 @@ static ssize_t xenbus_file_write(struct file *filp, goto out; } =20 - ret =3D copy_from_user(u->u.buffer + u->len, ubuf, len); + ret =3D !copy_from_iter_full(u->u.buffer + u->len, len, from); =20 if (ret !=3D 0) { rc =3D -EFAULT; @@ -695,8 +693,8 @@ static __poll_t xenbus_file_poll(struct file *file, pol= l_table *wait) } =20 const struct file_operations xen_xenbus_fops =3D { - .read =3D xenbus_file_read, - .write =3D xenbus_file_write, + .read_iter =3D xenbus_file_read, + .write_iter =3D xenbus_file_write, .open =3D xenbus_file_open, .release =3D xenbus_file_release, .poll =3D xenbus_file_poll, diff --git a/drivers/xen/xenfs/super.c b/drivers/xen/xenfs/super.c index d7d64235010d..54e4e4702572 100644 --- a/drivers/xen/xenfs/super.c +++ b/drivers/xen/xenfs/super.c @@ -28,19 +28,18 @@ MODULE_DESCRIPTION("Xen filesystem"); MODULE_LICENSE("GPL"); =20 -static ssize_t capabilities_read(struct file *file, char __user *buf, - size_t size, loff_t *off) +static ssize_t capabilities_read(struct kiocb *iocb, struct iov_iter *to) { char *tmp =3D ""; =20 if (xen_initial_domain()) tmp =3D "control_d\n"; =20 - return simple_read_from_buffer(buf, size, off, tmp, strlen(tmp)); + return simple_copy_to_iter(tmp, &iocb->ki_pos, strlen(tmp), to); } =20 static const struct file_operations capabilities_file_ops =3D { - .read =3D capabilities_read, + .read_iter =3D capabilities_read, .llseek =3D default_llseek, }; =20 diff --git a/drivers/xen/xenfs/xenstored.c b/drivers/xen/xenfs/xenstored.c index f59235f9f8a2..c4e8692deac2 100644 --- a/drivers/xen/xenfs/xenstored.c +++ b/drivers/xen/xenfs/xenstored.c @@ -9,11 +9,10 @@ =20 #include "xenfs.h" =20 -static ssize_t xsd_read(struct file *file, char __user *buf, - size_t size, loff_t *off) +static ssize_t xsd_read(struct kiocb *iocb, struct iov_iter *to) { - const char *str =3D (const char *)file->private_data; - return simple_read_from_buffer(buf, size, off, str, strlen(str)); + const char *str =3D (const char *)iocb->ki_filp->private_data; + return simple_copy_to_iter(str, &iocb->ki_pos, strlen(str), to); } =20 static int xsd_release(struct inode *inode, struct file *file) @@ -49,7 +48,7 @@ static int xsd_kva_mmap(struct file *file, struct vm_area= _struct *vma) const struct file_operations xsd_kva_file_ops =3D { .open =3D xsd_kva_open, .mmap =3D xsd_kva_mmap, - .read =3D xsd_read, + .read_iter =3D xsd_read, .release =3D xsd_release, }; =20 @@ -64,6 +63,6 @@ static int xsd_port_open(struct inode *inode, struct file= *file) =20 const struct file_operations xsd_port_file_ops =3D { .open =3D xsd_port_open, - .read =3D xsd_read, + .read_iter =3D xsd_read, .release =3D xsd_release, }; diff --git a/drivers/xen/xenfs/xensyms.c b/drivers/xen/xenfs/xensyms.c index b799bc759c15..ec30aa09620f 100644 --- a/drivers/xen/xenfs/xensyms.c +++ b/drivers/xen/xenfs/xensyms.c @@ -146,7 +146,7 @@ static int xensyms_release(struct inode *inode, struct = file *file) =20 const struct file_operations xensyms_ops =3D { .open =3D xensyms_open, - .read =3D seq_read, + .read_iter =3D seq_read_iter, .llseek =3D seq_lseek, .release =3D xensyms_release }; --=20 2.43.0