[Cluster-devel] [[GFS2 PATCH] 3/3] gfs2: Large-filesystem fix for 32-bit systems
Steven Whitehouse
swhiteho at redhat.com
Thu Jun 16 15:48:13 UTC 2016
Hi,
Acked-by: Steven Whitehouse <swhiteho at redhat.com>
This is an obvious fix, so definitely needs to go in,
Steve.
On 15/06/16 15:46, Bob Peterson wrote:
> From: Andreas Gruenbacher <agruenba at redhat.com>
>
> Commit ff34245d switched from iget5_locked to iget_locked among other
> things, but iget_locked doesn't work for filesystems larger than 2^32
> blocks on 32-bit systems. Switch back to iget5_locked. Filesystems
> larger than 2^32 blocks are unrealistic to work well on 32-bit systems,
> so this is mostly a code cleanliness fix.
>
> Signed-off-by: Andreas Gruenbacher <agruenba at redhat.com>
> Signed-off-by: Bob Peterson <rpeterso at redhat.com>
> ---
> fs/gfs2/inode.c | 19 +++++++++++++++++--
> 1 file changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
> index ebff26e..481b649 100644
> --- a/fs/gfs2/inode.c
> +++ b/fs/gfs2/inode.c
> @@ -37,19 +37,34 @@
> #include "super.h"
> #include "glops.h"
>
> +static int iget_test(struct inode *inode, void *opaque)
> +{
> + u64 no_addr = *(u64 *)opaque;
> +
> + return GFS2_I(inode)->i_no_addr == no_addr;
> +}
> +
> +static int iget_set(struct inode *inode, void *opaque)
> +{
> + u64 no_addr = *(u64 *)opaque;
> +
> + GFS2_I(inode)->i_no_addr = no_addr;
> + inode->i_ino = no_addr;
> + return 0;
> +}
> +
> static struct inode *gfs2_iget(struct super_block *sb, u64 no_addr)
> {
> struct inode *inode;
>
> repeat:
> - inode = iget_locked(sb, no_addr);
> + inode = iget5_locked(sb, no_addr, iget_test, iget_set, &no_addr);
> if (!inode)
> return inode;
> if (is_bad_inode(inode)) {
> iput(inode);
> goto repeat;
> }
> - GFS2_I(inode)->i_no_addr = no_addr;
> return inode;
> }
>
More information about the Cluster-devel
mailing list