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

Steve Bakke sbakke at netzyn.com
Tue Sep 18 11:47:26 UTC 2012


Removed the client-helpers.c temp patch and implemented Anand's fuse-bridge.c patch and works perfect.

Steve


________________________________
 From: Niels de Vos <ndevos at redhat.com>
To: Steve Bakke <sbakke at netzyn.com> 
Cc: "gluster-devel at nongnu.org" <gluster-devel at nongnu.org> 
Sent: Tuesday, September 18, 2012 3:16 AM
Subject: Re: [Gluster-devel] Fuse mount option: enable-ino32
 
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<sbakke at netzyn.com>  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<sbakke at netzyn.com>
>> *To:* "gluster-devel at nongnu.org"<gluster-devel at nongnu.org>
>> *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<ndevos at redhat.com>
>> *To:* Steve Bakke<sbakke at netzyn.com>
>> *Cc:* "gluster-devel at nongnu.org"<gluster-devel at nongnu.org>
>> *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;
>>> }
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://supercolony.gluster.org/pipermail/gluster-devel/attachments/20120918/1644273b/attachment-0001.html>


More information about the Gluster-devel mailing list