[Gluster-devel] GlusterFS API to manipulate open file descriptor - glfs_fcntl?

Anoop C S anoopcs at cryptolab.net
Tue Oct 15 12:03:11 UTC 2019

On Tue, 2019-10-15 at 12:36 +0200, Niels de Vos wrote:
> On Tue, Oct 15, 2019 at 12:20:54PM +0530, Anoop C S wrote:
> > Hi all,
> > 
> > This is to check and confirm whether we have an API(or an internal
> > implementation which can be exposed as API) to perform operations
> > on an
> > open file descriptor as a wrapper around existing fcntl() system
> > call.
> > We do have specific APIs for locks(glfs_posix_lock) and file
> > descriptor
> > duplication(glfs_dup) which are important among those operations
> > listed
> > as per man fcntl(2).
> > 
> > At present we have a requirement(very recent) from Samba to set
> > file
> > descriptor flags through its VFS layer which would need a
> > corresponding
> > mechanism inside GlusterFS. Due to its absence, VFS module for
> > GlusterFS inside Samba will have to workaround with the hack of
> > creating fake local file descriptors outside GlusterFS.
> > 
> > Thoughts and suggestions are welcome.
> The fcntl() operations are split when FUSE is used. There in direct
> fcntl() call that FUSE passes on, instead it calls lock() and similar
> interfaces. I think you refer to F_GETFD and F_SETFD commands for
> fcntl(). For all I can see, these do not exist in FUSE, and have not
> been added to gfapi either. Not sure if the single supported flag
> FD_CLOEXEC can have a benefit on Gluster, as glfs_fini() is expected
> to
> cleanup everything that gfapi allocates.
> Can you explain your use-case a little more?

Quoting the response from my other reply..

> During open/create code path Samba tries to set blocking
> flag(O_NONBLOCK on Linux) on open file descriptor through its VFS
> layer. Comparing to fcntl() call command would be F_SETFL with
> required
> flag(O_NONBLOCK). It is an expectation that backend file system(in
> this
> case GlusterFS) executes this operation and return the result. VFS
> module for GlusterFS inside Samba can extract required file
> descriptor
> but would require a way to set the flag on it.

So to be specific, it is F_GETFL and F_SETFL commands that we are
looking for to be consumed.

More information about the Gluster-devel mailing list