[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240409152438.77960-2-axboe@kernel.dk>
Date: Tue, 9 Apr 2024 09:22:15 -0600
From: Jens Axboe <axboe@...nel.dk>
To: linux-fsdevel@...r.kernel.org
Cc: brauner@...nel.org,
linux-kernel@...r.kernel.org,
viro@...iv.linux.org.uk,
Jens Axboe <axboe@...nel.dk>
Subject: [PATCH 1/4] iov_iter: add copy_to_iter_full()
Add variant of copy_to_iter() that either copies the full amount asked
for and return success, or ensures that the iov_iter is back to where
it started on failure and returns false.
Suggested-by: Al Viro <viro@...iv.linux.org.uk>
Signed-off-by: Jens Axboe <axboe@...nel.dk>
---
include/linux/uio.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/include/linux/uio.h b/include/linux/uio.h
index 00cebe2b70de..9e9510672b28 100644
--- a/include/linux/uio.h
+++ b/include/linux/uio.h
@@ -197,6 +197,16 @@ size_t copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i)
return 0;
}
+static __always_inline __must_check
+bool copy_to_iter_full(const void *addr, size_t bytes, struct iov_iter *i)
+{
+ size_t copied = copy_to_iter(addr, bytes, i);
+ if (likely(copied == bytes))
+ return true;
+ iov_iter_revert(i, copied);
+ return false;
+}
+
static __always_inline __must_check
size_t copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
{
--
2.43.0
Powered by blists - more mailing lists