Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 16 Aug 2014 09:10:53 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 192701] New: FOPEN_DIRECT_IO not honored by fuse module
Message-ID:  <bug-192701-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192701

            Bug ID: 192701
           Summary: FOPEN_DIRECT_IO not honored by fuse module
           Product: Base System
           Version: 10.0-RELEASE
          Hardware: Any
                OS: Any
            Status: Needs Triage
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: harsha@harshavardhana.net

Created attachment 145860
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=145860&action=edit
FUSE honor FOPEN_DIRECT_IO

FUSE module does not honor FOPEN_DIRECT_IO flags being set by the user space
filesystem for example here is 'glusterfs'


------- fuse_vnode_open() ------------
          * Funcation is called for every vnode open.
          * Merge fuse_open_flags it may be 0
          *
          * XXXIP: Handle FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE
--------------------------------------

Currently just ignores this option. 


The necessity for this comes from the point of view of GlusterFS, with in
GlusterFS there is a feature called 'meta' which provide meta information about
the mounted filesystem and provides largely fine grained statistics about the
the filesystem.

IT is necessary to have this feature available for consistency and also for
better portability on FreeBSD. 

The issue seems to be that VFS takes hint from the file size (returned in
lookup/stat) to limit itself from not read()ing beyond that offset. So if a
file size is returned 0 in lookup, read() is never received even by FUSE.

In meta all file sizes are 0 (since the contents of the inode are generated
dynamically on open()/read(), size is unknown during lookup() -- just like
/proc (on linux)). And therefore all meta file open()s are forced into
direct_io_mode  so that read() requests are sent straight to FUSE/glusterfs
bypassing VFS (size is ignored etc.)

It requires for read/write requests over a vnode to be sent directly to FUSE
not to VFS which would ignore a '0byte' file. 

Attaching a patch which fixes this and allows FreeBSD FUSE to honor
FOPEN_DIRECT_IO flag and also helps getting 'meta' module working.

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-192701-8>