From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Thu, 16 Jun 2016 16:48:13 +0100 Subject: [Cluster-devel] [[GFS2 PATCH] 3/3] gfs2: Large-filesystem fix for 32-bit systems In-Reply-To: <1466002012-12115-4-git-send-email-rpeterso@redhat.com> References: <1466002012-12115-1-git-send-email-rpeterso@redhat.com> <1466002012-12115-4-git-send-email-rpeterso@redhat.com> Message-ID: <5762CA3D.7020504@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Acked-by: Steven Whitehouse This is an obvious fix, so definitely needs to go in, Steve. On 15/06/16 15:46, Bob Peterson wrote: > From: Andreas Gruenbacher > > 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 > Signed-off-by: Bob Peterson > --- > 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; > } >