]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iomap: introduce iomap_fsverity_write() for writing fsverity metadata
authorAndrey Albershteyn <aalbersh@kernel.org>
Wed, 20 May 2026 12:37:07 +0000 (14:37 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 5 Jun 2026 11:36:22 +0000 (13:36 +0200)
This is just a wrapper around iomap_file_buffered_write() to create
necessary iterator over metadata.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Link: https://patch.msgid.link/20260520123722.405752-10-aalbersh@kernel.org
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
fs/iomap/buffered-io.c
include/linux/iomap.h

index f9cc5a32e222da4bf0a50c5c466663f68f2f3cc5..dab4aacff313abae617b62de5a41990b67d73371 100644 (file)
@@ -1290,6 +1290,31 @@ iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *i,
 }
 EXPORT_SYMBOL_GPL(iomap_file_buffered_write);
 
+int iomap_fsverity_write(struct file *file, loff_t pos, size_t length,
+               const void *buf, const struct iomap_ops *ops,
+               const struct iomap_write_ops *write_ops)
+{
+       int                     ret;
+       struct iov_iter         iiter;
+       struct kvec             kvec = {
+               .iov_base       = (void *)buf,
+               .iov_len        = length,
+       };
+       struct kiocb            iocb = {
+               .ki_filp        = file,
+               .ki_ioprio      = get_current_ioprio(),
+               .ki_pos         = pos,
+       };
+
+       iov_iter_kvec(&iiter, WRITE, &kvec, 1, length);
+
+       ret = iomap_file_buffered_write(&iocb, &iiter, ops, write_ops, NULL);
+       if (ret < 0)
+               return ret;
+       return ret == length ? 0 : -EIO;
+}
+EXPORT_SYMBOL_GPL(iomap_fsverity_write);
+
 static void iomap_write_delalloc_ifs_punch(struct inode *inode,
                struct folio *folio, loff_t start_byte, loff_t end_byte,
                struct iomap *iomap, iomap_punch_t punch)
index 1be2e16b696a8f6157b93479795fe689f33b874f..3582ed1fe23611edd87c445f4791385eb3ae59f7 100644 (file)
@@ -353,6 +353,9 @@ static inline bool iomap_want_unshare_iter(const struct iomap_iter *iter)
 ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from,
                const struct iomap_ops *ops,
                const struct iomap_write_ops *write_ops, void *private);
+int iomap_fsverity_write(struct file *file, loff_t pos, size_t length,
+               const void *buf, const struct iomap_ops *ops,
+               const struct iomap_write_ops *write_ops);
 void iomap_read_folio(const struct iomap_ops *ops,
                struct iomap_read_folio_ctx *ctx, void *private);
 void iomap_readahead(const struct iomap_ops *ops,