[Cluster-devel] [GFS2 Patch] pass formal ino in do_filldir_main
Steven Whitehouse
swhiteho at redhat.com
Wed Feb 7 10:49:30 UTC 2007
Hi,
I'm not sure that this is the right fix. no_formal_ino is used only as a
hash value in the lookup, the "real" lookup is always via no_addr. So we
can alter that hash if required to just use no_addr, but I'd rather not
have to return no_formal_ino here since we have no way to map that back
to the disk location of the inode in general. In fact given a maximum
sized GFS2 filesystem and enough nodes to fill it with inodes in a
reasonable time (yes, I know thats a lot and a long time!), its not even
certain to be unique,
Steve.
On Tue, 2007-02-06 at 23:51 -0500, Wendy Cheng wrote:
> Lookup failure found in '07 NFS connectathon. The nfsd is in the middle
> of readdirplus procedure call where it builds the file handles
> associated with the directory. GFS2 lookup code has been expected the
> first 64 bit of gfs2 inode number (formal inode number) but
> do_filldir_main() wrongly passes on-disk address inode number (no_addr).
> This patch fixes this.
>
> Signed-off-by: S. Wendy Cheng <wcheng at redhat.com>
>
> dir.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletion(-)
>
> --- linux-git/fs/gfs2/dir.c 2007-02-06 01:07:26.000000000 -0500
> +++ linux/fs/gfs2/dir.c 2007-02-06 20:50:16.000000000 -0500
> @@ -1241,8 +1241,9 @@ static int do_filldir_main(struct gfs2_i
>
> error = filldir(opaque, (const char *)(dent + 1),
> be16_to_cpu(dent->de_name_len),
> - off, be64_to_cpu(dent->de_inum.no_addr),
> + off, be64_to_cpu(dent->de_inum.no_formal_ino),
> be16_to_cpu(dent->de_type));
> +
> if (error)
> return 1;
>
>
>
More information about the Cluster-devel
mailing list