[Gluster-devel] [PATCH] fuse: ignore entry-timeout on LOOKUP_REVAL
Miklos Szeredi
miklos at szeredi.hu
Thu Jul 3 12:07:54 UTC 2014
On Fri, Jun 27, 2014 at 9:59 AM, Niels de Vos <ndevos at redhat.com> wrote:
> On Thu, Jun 26, 2014 at 08:21:57PM -0400, Anand Avati wrote:
>> The following test case demonstrates the bug:
>>
>> sh# mount -t glusterfs localhost:meta-test /mnt/one
>>
>> sh# mount -t glusterfs localhost:meta-test /mnt/two
>>
>> sh# echo stuff > /mnt/one/file; rm -f /mnt/two/file; echo stuff > /mnt/one/file
>> bash: /mnt/one/file: Stale file handle
>>
>> sh# echo stuff > /mnt/one/file; rm -f /mnt/two/file; sleep 1; echo stuff > /mnt/one/file
>>
>> On the second open() on /mnt/one, FUSE would have used the old
>> nodeid (file handle) trying to re-open it. Gluster is returning
>> -ESTALE. The ESTALE propagates back to namei.c:filename_lookup()
>> where lookup is re-attempted with LOOKUP_REVAL. The right
>> behavior now, would be for FUSE to ignore the entry-timeout and
>> and do the up-call revalidation. Instead FUSE is ignoring
>> LOOKUP_REVAL, succeeding the revalidation (because entry-timeout
>> has not passed), and open() is again retried on the old file
>> handle and finally the ESTALE is going back to the application.
>>
>> Fix: if revalidation is happening with LOOKUP_REVAL, then ignore
>> entry-timeout and always do the up-call.
>>
>> Signed-off-by: Anand Avati <avati at redhat.com>
>
> Looks good to me.
>
> Reviewed-by: Niels de Vos <ndevos at redhat.com>
Thanks, queued.
Miklos
More information about the Gluster-devel
mailing list