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"