xfs
[Top] [All Lists]

Re: open_by_handle on a file ?

To: DENIEL Philippe <philippe.deniel@xxxxxx>
Subject: Re: open_by_handle on a file ?
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Thu, 13 May 2010 08:21:47 +1000
Cc: xfs@xxxxxxxxxxx
In-reply-to: <4BEACBC0.3080300@xxxxxx>
References: <4BEACBC0.3080300@xxxxxx>
User-agent: Mutt/1.5.20 (2009-06-14)
On Wed, May 12, 2010 at 05:39:44PM +0200, DENIEL Philippe wrote:
> Hi,
> 
> I start using libhandle.so from xfsprogs-3.0.3 package. I meet an
> issue here : I can get a handle from files or directory.
> When used on diretories, open_by_handle works fine : I can read
> entries in it by using getdents, create stuff / removing stuff by
> using the ATFILE_FUNCTION (mkdirat, renameat, ...)
> 
> Trouble start when I want to open a file with open_by_handle. I have
> a small test program that does this :
> 
>        rc = path_to_fshandle( path_dir,  (void **)(&fshandle),
>    &fshandlelen) ;
>      if( rc < 0 ) exit( -1)
>      rc = path_to_handle( path_dir,  (void **)(&filehandle), &handlelen) ;
>      if( rc < 0 ) exit( -1 )
> 
>      fd = open_by_handle( filehandle, handlelen, O_RDONLY ) ;
>      printf( "open_by_handle: fd=%d \n", fd ) ;
>      if( fd < 0 )
>           printf( "----> Error=%d | %s\n", errno, strerror( errno ) ) ;
> 
> The open_by_handle failed with errno=20 aka ENOTDIR, which is true,
> this is a file and no directory.

I think that is because the path_dir points to a regular file and
so path_to_fshandle() is generating a fshandle that points to a file
instead of a directory. This handle is cached inside libhandle, and
then use for subsequent handle calls like open_by_handle(). The
kernel rejects the request is the fshandle does not point to a
directory.

Try using the mount point or a directory within the mount for
the path_to_fshandle() call and see if that fixes the problem.

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>