On 13.07.2013 12:44, Gleb Kurtsou wrote:
On (12/07/2013 17:22), Pedro F. Giffuni wrote:
Author: pfg
Date: Fri Jul 12 17:22:59 2013
New Revision: 253276
URL: http://svnweb.freebsd.org/changeset/base/253276

Log:
   Add creation timestamp (birthtime) support for fuse.
This is based on similar support in MacFUSE.
Looks like it breaks backward compatibility, do we want to preserve it
taking into account that there was on fusefs official release as part of
base but we had fuse in ports for a while?
It's not really a compatibility issue, It's just a field that remains
unused on most fuse implementations.

For all purposes our upstream seems to be macfuse:

http://code.google.com/p/macfuse/source/detail?spec=svn1686&r=1360


fusefs-libs seems to have its own version of fuse_kernel.h.
That's bad, but not really under our control.
There are fuse file system implementations that skip libfuse entirely
(glusterfs? I'm not sure).

At least we should have bumped fuse version.

Make no illusions; we have no control over what the version
numbers actually mean, and the API has become dangerously
linux dependent. We could apply the attached patch
but I wonder if it makes any sense since we don't support
the changes.


Pedro.
Index: fs/fuse/fuse_kernel.h
===================================================================
--- fs/fuse/fuse_kernel.h       (revision 253276)
+++ fs/fuse/fuse_kernel.h       (working copy)
@@ -34,6 +34,19 @@
  * $FreeBSD$
  */
 
+/*
+ * This file defines the kernel interface of FUSE
+ *
+ * Protocol changelog:
+ *
+ * 7.9:
+ *  - new fuse_getattr_in input argument of GETATTR
+ *  - add lk_flags in fuse_lk_in
+ *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
+ *  - add blksize field to fuse_attr
+ *  - add file flags field to fuse_read_in and fuse_write_in
+ */
+
 #ifndef linux
 #include <sys/types.h>
 #define __u64 uint64_t
@@ -48,7 +61,7 @@
 #define FUSE_KERNEL_VERSION 7
 
 /** Minor version number of this interface */
-#define FUSE_KERNEL_MINOR_VERSION 8
+#define FUSE_KERNEL_MINOR_VERSION 9
 
 /** The node ID of the root inode */
 #define FUSE_ROOT_ID 1
@@ -70,19 +83,21 @@
        __u64   mtime;
        __u64   ctime;
 #ifdef __FreeBSD__
-       __u64   crtime;
+       __u64   crtime;
 #endif
        __u32   atimensec;
        __u32   mtimensec;
        __u32   ctimensec;
 #ifdef __FreeBSD__
-       __u32   crtimensec;
+       __u32   crtimensec;
 #endif
        __u32   mode;
        __u32   nlink;
        __u32   uid;
        __u32   gid;
        __u32   rdev;
+       __u32   blksize;
+       __u32   padding;
 };
 
 struct fuse_kstatfs {
@@ -115,6 +130,9 @@
 #define FATTR_ATIME    (1 << 4)
 #define FATTR_MTIME    (1 << 5)
 #define FATTR_FH       (1 << 6)
+#define FATTR_ATIME_NOW        (1 << 7)
+#define FATTR_MTIME_NOW        (1 << 8)
+#define FATTR_LOCKOWNER        (1 << 9)
 
 /**
  * Flags returned by the OPEN request
@@ -130,12 +148,39 @@
  */
 #define FUSE_ASYNC_READ                (1 << 0)
 #define FUSE_POSIX_LOCKS       (1 << 1)
+#define FUSE_FILE_OPS          (1 << 2)
+#define FUSE_ATOMIC_O_TRUNC    (1 << 3)
+#define FUSE_BIG_WRITES                (1 << 5)
 
 /**
  * Release flags
  */
 #define FUSE_RELEASE_FLUSH     (1 << 0)
 
+/**
+ * Getattr flags
+ */
+#define FUSE_GETATTR_FH                (1 << 0)
+
+/**
+ * Lock flags
+ */
+#define FUSE_LK_FLOCK          (1 << 0)
+
+/**
+ * WRITE flags
+ *
+ * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
+ * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
+ */
+#define FUSE_WRITE_CACHE       (1 << 0)
+#define FUSE_WRITE_LOCKOWNER   (1 << 1)
+
+/**
+ * Read flags
+ */
+#define FUSE_READ_LOCKOWNER    (1 << 1)
+
 enum fuse_opcode {
        FUSE_LOOKUP        = 1,
        FUSE_FORGET        = 2,  /* no reply */
@@ -178,6 +223,8 @@
 /* The read buffer is required to be at least 8k, but may be much larger */
 #define FUSE_MIN_READ_BUFFER 8192
 
+#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
+
 struct fuse_entry_out {
        __u64   nodeid;         /* Inode ID */
        __u64   generation;     /* Inode generation: nodeid:gen must
@@ -193,6 +240,14 @@
        __u64   nlookup;
 };
 
+struct fuse_getattr_in {
+       __u32   getattr_flags;
+       __u32   dummy;
+       __u64   fh;
+};
+
+#define FUSE_COMPAT_ATTR_OUT_SIZE 96
+
 struct fuse_attr_out {
        __u64   attr_valid;     /* Cache timeout for the attributes */
        __u32   attr_valid_nsec;
@@ -200,6 +255,11 @@
        struct fuse_attr attr;
 };
 
+struct fuse_mknod_in {
+       __u32   mode;
+       __u32   rdev;
+};
+
 struct fuse_mkdir_in {
        __u32   mode;
        __u32   padding;
@@ -218,7 +278,7 @@
        __u32   padding;
        __u64   fh;
        __u64   size;
-       __u64   unused1;
+       __u64   lock_owner;
        __u64   atime;
        __u64   mtime;
        __u64   unused2;
@@ -261,14 +321,22 @@
        __u64   fh;
        __u64   offset;
        __u32   size;
+       __u32   read_flags;
+       __u64   lock_owner;
+       __u32   flags;
        __u32   padding;
 };
 
+#define FUSE_COMPAT_WRITE_IN_SIZE 24
+
 struct fuse_write_in {
        __u64   fh;
        __u64   offset;
        __u32   size;
        __u32   write_flags;
+       __u64   lock_owner;
+       __u32   flags;
+       __u32   padding;
 };
 
 struct fuse_write_out {
@@ -307,6 +375,8 @@
        __u64   fh;
        __u64   owner;
        struct fuse_file_lock lk;
+       __u32   lk_flags;
+       __u32   padding;
 };
 
 struct fuse_lk_out {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to