On 08/20/2014 12:32 AM, Ivan Shapovalov wrote:
From `git log` I've seen that VFS people intend to replace ->aio_read() and
->aio_write() of struct file_operations with new methods ->read_iter() and
->write_iter().
(Along with a couple of related new helpers, differing from previous just in
calling _iter methods instead of aio_ ones.)
From other filesystems it seems that these are simple drop-in replacements
(however, well, I have zero familiarity with VFS). So here is a question:
is there any intentional reason that generic_file_aio_write() is not used
in reiser4?
Currently reiser4 is a set of two filesystems which differ in methods
of handling regular files. For VFS we provide "dispatchers", which pass
management to appropriate plugin (UNIX_FILE or CRYPTCOMPRESS).
UNIX_FILE plugin doesn't use generic write for performance reasons
(I'll try to find the respective mailing thread). CRYPTCOMPRESS doesn't
use it for compatibility reasons: I don't know how how to rewrite it
gracefully using the generic write method.
Edward.
What follows is a simple patch that I've currently applied to my own kernel
(seems to be the only significant vfs change affecting filesystems), however,
I fear that these code-paths are not generally used, so my "works for me"
isn't really representative. Could you please clarify the situation here?
From 81172835255a01718c2c256942d5887825a0cd7a Mon Sep 17 00:00:00 2001
From: Ivan Shapovalov <intelfx100@xxxxxxxxx>
Date: Tue, 19 Aug 2014 14:33:35 +0400
Subject: [PATCH] Adjust reiser4 to 3.16: ->{read,write}_iter of struct
file_operations.
1. ->aio_{read,write} of struct file_operations are being replaced with ->{read,write}_iter.
2. do_sync_{read,write} are being replaced with new_sync_{read,write}.
3. generic_file_splice_write is being replaced with iter_file_splice_write.
Signed-off-by: Ivan Shapovalov <intelfx100@xxxxxxxxx>
---
fs/reiser4/plugin/file/cryptcompress.c | 2 +-
fs/reiser4/plugin/file/file.c | 2 +-
fs/reiser4/plugin/object.c | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/fs/reiser4/plugin/file/cryptcompress.c b/fs/reiser4/plugin/file/cryptcompress.c
index 8af388d..b0109fb 100644
--- a/fs/reiser4/plugin/file/cryptcompress.c
+++ b/fs/reiser4/plugin/file/cryptcompress.c
@@ -2964,7 +2964,7 @@ ssize_t read_cryptcompress(struct file * file, char __user *buf, size_t size,
reiser4_exit_context(ctx);
return result;
}
- result = do_sync_read(file, buf, size, off);
+ result = new_sync_read(file, buf, size, off);
context_set_commit_async(ctx);
reiser4_exit_context(ctx);
diff --git a/fs/reiser4/plugin/file/file.c b/fs/reiser4/plugin/file/file.c
index 94029cd..e65c48d 100644
--- a/fs/reiser4/plugin/file/file.c
+++ b/fs/reiser4/plugin/file/file.c
@@ -1752,7 +1752,7 @@ ssize_t read_unix_file(struct file *file, char __user *buf,
switch (uf_info->container) {
case UF_CONTAINER_EXTENTS:
if (!reiser4_inode_get_flag(inode, REISER4_PART_MIXED)) {
- result = do_sync_read(file, buf, read_amount, off);
+ result = new_sync_read(file, buf, read_amount, off);
break;
}
case UF_CONTAINER_TAILS:
diff --git a/fs/reiser4/plugin/object.c b/fs/reiser4/plugin/object.c
index 553f1e2..e431e1f 100644
--- a/fs/reiser4/plugin/object.c
+++ b/fs/reiser4/plugin/object.c
@@ -188,7 +188,7 @@ static struct file_operations regular_file_f_ops = {
.llseek = generic_file_llseek,
.read = reiser4_read_dispatch,
.write = reiser4_write_dispatch,
- .aio_read = generic_file_aio_read,
+ .read_iter = generic_file_read_iter,
.unlocked_ioctl = reiser4_ioctl_dispatch,
#ifdef CONFIG_COMPAT
.compat_ioctl = reiser4_ioctl_dispatch,
@@ -198,7 +198,7 @@ static struct file_operations regular_file_f_ops = {
.release = reiser4_release_dispatch,
.fsync = reiser4_sync_file_common,
.splice_read = generic_file_splice_read,
- .splice_write = generic_file_splice_write
+ .splice_write = iter_file_splice_write
};
static struct address_space_operations regular_file_a_ops = {
.writepage = reiser4_writepage,
--
To unsubscribe from this list: send the line "unsubscribe reiserfs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html