2008-06-17 16:05:54

by Miklos Szeredi

[permalink] [raw]
Subject: [2.6.26 patch] fuse: fix thinko in max I/O size calucation

From: Miklos Szeredi <[email protected]>

Use max not min to enforce a lower limit on the max I/O size.

This bug was introduced by

commit e5d9a0df07484d6d191756878c974e4307fb24ce
Author: Miklos Szeredi <[email protected]>
Date: Wed Apr 30 00:54:44 2008 -0700

fuse: fix max i/o size calculation

Thanks to Brian Wang for noticing.

Reported-by: Brian Wang <[email protected]>
CC: Szabolcs Szakacsits <[email protected]>
Signed-off-by: Miklos Szeredi <[email protected]>
---
fs/fuse/inode.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Index: linux-2.6/fs/fuse/inode.c
===================================================================
--- linux-2.6.orig/fs/fuse/inode.c 2008-06-17 17:55:38.000000000 +0200
+++ linux-2.6/fs/fuse/inode.c 2008-06-17 17:55:48.000000000 +0200
@@ -591,7 +591,7 @@ static void process_init_reply(struct fu
fc->bdi.ra_pages = min(fc->bdi.ra_pages, ra_pages);
fc->minor = arg->minor;
fc->max_write = arg->minor < 5 ? 4096 : arg->max_write;
- fc->max_write = min_t(unsigned, 4096, fc->max_write);
+ fc->max_write = max_t(unsigned, 4096, fc->max_write);
fc->conn_init = 1;
}
fuse_put_request(fc, req);
@@ -667,7 +667,7 @@ static int fuse_fill_super(struct super_
fc->flags = d.flags;
fc->user_id = d.user_id;
fc->group_id = d.group_id;
- fc->max_read = min_t(unsigned, 4096, d.max_read);
+ fc->max_read = max_t(unsigned, 4096, d.max_read);

/* Used by get_root_inode() */
sb->s_fs_info = fc;


2008-06-17 17:03:06

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [2.6.26 patch] fuse: fix thinko in max I/O size calucation

> > From: Miklos Szeredi <[email protected]>
> >
> > Use max not min to enforce a lower limit on the max I/O size.
>
> Big write is ok now, thanks. NTFS-3G in-memory write performance seems to
> be 6x better on a T9300 and quick tests seem to show that it's at least as
> fast as ext3 in-memory writes (but this needs more testing, etc).
>
> However the max write size seems to be limited to 128kB. Is this
> intentional?

Yes, that's due to another limit (max 32 pages per request).

Miklos

2008-06-17 17:44:16

by Szabolcs Szakacsits

[permalink] [raw]
Subject: Re: [2.6.26 patch] fuse: fix thinko in max I/O size calucation


On Tue, 17 Jun 2008, Miklos Szeredi wrote:

> From: Miklos Szeredi <[email protected]>
>
> Use max not min to enforce a lower limit on the max I/O size.

Big write is ok now, thanks. NTFS-3G in-memory write performance seems to
be 6x better on a T9300 and quick tests seem to show that it's at least as
fast as ext3 in-memory writes (but this needs more testing, etc).

However the max write size seems to be limited to 128kB. Is this
intentional? If yes then

Acked-by: Szabolcs Szakacsits <[email protected]>

Szaka

> This bug was introduced by
>
> commit e5d9a0df07484d6d191756878c974e4307fb24ce
> Author: Miklos Szeredi <[email protected]>
> Date: Wed Apr 30 00:54:44 2008 -0700
>
> fuse: fix max i/o size calculation
>
> Thanks to Brian Wang for noticing.
>
> Reported-by: Brian Wang <[email protected]>
> CC: Szabolcs Szakacsits <[email protected]>
> Signed-off-by: Miklos Szeredi <[email protected]>
> ---
> fs/fuse/inode.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> Index: linux-2.6/fs/fuse/inode.c
> ===================================================================
> --- linux-2.6.orig/fs/fuse/inode.c 2008-06-17 17:55:38.000000000 +0200
> +++ linux-2.6/fs/fuse/inode.c 2008-06-17 17:55:48.000000000 +0200
> @@ -591,7 +591,7 @@ static void process_init_reply(struct fu
> fc->bdi.ra_pages = min(fc->bdi.ra_pages, ra_pages);
> fc->minor = arg->minor;
> fc->max_write = arg->minor < 5 ? 4096 : arg->max_write;
> - fc->max_write = min_t(unsigned, 4096, fc->max_write);
> + fc->max_write = max_t(unsigned, 4096, fc->max_write);
> fc->conn_init = 1;
> }
> fuse_put_request(fc, req);
> @@ -667,7 +667,7 @@ static int fuse_fill_super(struct super_
> fc->flags = d.flags;
> fc->user_id = d.user_id;
> fc->group_id = d.group_id;
> - fc->max_read = min_t(unsigned, 4096, d.max_read);
> + fc->max_read = max_t(unsigned, 4096, d.max_read);
>
> /* Used by get_root_inode() */
> sb->s_fs_info = fc;
>

--
NTFS-3G: http://ntfs-3g.org