[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