gluster-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gluster-devel] Fuse mount option: enable-ino32


From: Niels de Vos
Subject: Re: [Gluster-devel] Fuse mount option: enable-ino32
Date: Tue, 18 Sep 2012 10:16:44 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.6esrpre) Gecko/20120714 Thunderbird/10.0.6

On 09/18/2012 01:18 AM, Anand Avati wrote:
The right place to do it is in fuse_readdir_cbk, based on
priv->enable_ino32 (see c13823bd16b26bc471d3efb15f63b76fbfdf0309)

Yeah, it seems that fuse_readdir_cbk uses d_ino directly. Could you try the attached patch? I probably won't have the time to test this in the next days, but if you can confirm this works for you I can post it for review.


On Mon, Sep 17, 2012 at 4:13 PM, Steve Bakke<address@hidden>  wrote:
Found a temporary solution.  We patched
xlators/protocol/client/src/client-helpers.c ~ line 159
was:     entry->d_ino = trav->d_ino
now:     entry->d_ino = GF_FUSE_SQUASH_INO(trav->d_info);

This will work, but does not take the mount-option in consideration. When you test the attached patch, please revert the above change.

Thanks,
Niels


All the 32 bit apps that did not work before, now work.  Need both the
original enable-ino32 patch and this one.

Not sure what the actual patch should be, but this does work at least for
our running only 32 bit apps on a Gluster mount.

Steve

   ------------------------------
*From:* Steve Bakke<address@hidden>
*To:* "address@hidden"<address@hidden>
*Sent:* Monday, September 17, 2012 11:42 AM
*Subject:* Re: [Gluster-devel] Fuse mount option: enable-ino32

Yes we are running the patched version on client.  We modified the print
line in our test program to display the inode values and compiled the
program for 64 bit mode, so it will run.
    printf("inode:%016lx file:%s\n", dirEntry.d_ino, dirEntry.d_name );


Also to make sure client was working correctly we added logging calls to
gf_fuse_stat2attr() in fuse-helpers.c, at line 444 added:

    fprintf( mylogfile, "ino32: %i st:%lx fuse:%lx \n", enable_ino32,
st->ia_ino, fa->ino );



When the test program was run, it printed this out:

inode:a2bdc7aeaee47329 file:steve.txt
inode:821222a0edf18a37 file:george.txt
inode:0000000000000001 file:.
inode:a7f29365717fb464 file:testnfs
inode:ffffffffffffffff file:..
inode:9aa3f33d3c366b4e file:fred.txt


The log file contained:

ino32: 1 st:1 fuse:1
ino32: 1 st:1 fuse:1
ino32: 1 st:1 fuse:1
ino32: 1 st:a2bdc7aeaee47329 fuse:c59b487
ino32: 1 st:821222a0edf18a37 fuse:6fe3a897
ino32: 1 st:a7f29365717fb464 fuse:d68d2701
ino32: 1 st:9aa3f33d3c366b4e fuse:a6959873
ino32: 1 st:1 fuse:1
ino32: 1 st:1 fuse:1
ino32: 1 st:1 fuse:1
ino32: 1 st:1 fuse:1
ino32: 1 st:1 fuse:1


As the inode values return to the test program are>  32 bits, seems like
there is some path that the inodes are not getting adjusted?

When we compile the test program in 32 bit mode, we get error 75, which is
EOVERFLOW. Looking at the 32bit Getdents (called by readdir) EOVERFLOW is
returned when inode values are>  32 bits.

Steve


   ------------------------------
*From:* Niels de Vos<address@hidden>
*To:* Steve Bakke<address@hidden>
*Cc:* "address@hidden"<address@hidden>
*Sent:* Monday, September 17, 2012 3:49 AM
*Subject:* Re: [Gluster-devel] Fuse mount option: enable-ino32

On 09/15/2012 11:15 PM, Steve Bakke wrote:
All,

Just compiled and installed the Sept 15 git which includes the fuse
mount option enable-ino32 patch.

Then on the server:
gluster volume fred set enable-ino32 on
Note: volume info prints out nfs.enable-ino32: on, which I guess is ok???

The volume option is for the NFS-server only. It does not affect the
GlusterFS-native mount, therefore there is no need to set this option for
the
volume.

On client:
mount -t glusterfs -o enable-ino32 1.2.3.4:/fred mntfs

This is the correct usage.

Mounts, but still returns wrong entries, using the test program below.
This program works fine with using nfs mount, and with nfs.enable-ino32 on
server.  However for other reasons must use native client.

Do I need to do something else??

Are you using the version with the patch on the client? The conversion of
the
64-bit to 32-bit inodes is done client-side, not server-side. This makes
it
possible for clients to choose if they want/need 32- or 64-bit inodes.

Cheers,
Niels


Steve



#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>

int main()
{
    DIR* hDir = opendir(".");
    if (hDir==NULL)
      return 1;

    struct dirent dirEntry;
    struct dirent * pOut;
    int err = readdir_r(hDir,&dirEntry,&pOut);
    while(err==0&&   pOut!=NULL)
    {
      printf("%s ", dirEntry.d_name);
      err = readdir_r(hDir,&dirEntry,&pOut);
    }

    printf("\nLast Error: %d\n", err);

    return 0;
}


Attachment: glusterfs-fuse-readddir_enable-ino32.patch
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]