History

Merge tag 'fuse-update-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse

Pull fuse updates from Miklos Szeredi: "As well as the usual bug fixes, this adds the following new features: - cached readdir and readlink - max I/O size increased from 128k to 1M - improved performance and scalability of request queues - copy_file_range support The only non-fuse bits are trivial cleanups of macros in <linux/bitops.h>" * tag 'fuse-update-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse: (31 commits) fuse: enable caching of symlinks fuse: only invalidate atime in direct read fuse: don't need GETATTR after every READ fuse: allow fine grained attr cache invaldation bitops: protect variables in bit_clear_unless() macro bitops: protect variables in set_mask_bits() macro fuse: realloc page array fuse: add max_pages to init_out fuse: allocate page array more efficiently fuse: reduce size of struct fuse_inode fuse: use iversion for readdir cache verification fuse: use mtime for readdir cache verification fuse: add readdir cache version fuse: allow using readdir cache fuse: allow caching readdir fuse: extract fuse_emit() helper fuse: add FOPEN_CACHE_DIR fuse: split out readdir.c fuse: Use hash table to link processing request fuse: kill req->intr_unique ...

Linus Torvalds committed 8 years ago

Commit 9b5cf822 parents 31990f0 5571f1e10 files · +1201 −490Browse files

Showing the changes to include/uapi/linux (1 of 10 files). Show all

Unified · Split

include/uapi/linux/fuse.h+72−47
@@ -116,6 +116,12 @@ · 115 unmodified lines
116116 *
117117 * 7.27
118118 * - add FUSE_ABORT_ERROR
119+ *
120+ * 7.28
121+ * - add FUSE_COPY_FILE_RANGE
122+ * - add FOPEN_CACHE_DIR
123+ * - add FUSE_MAX_PAGES, add max_pages to init_out
124+ * - add FUSE_CACHE_SYMLINKS
119125 */
120126
121127 #ifndef _LINUX_FUSE_H
@@ -151,7 +157,7 @@ · 29 unmodified lines
151157 #define FUSE_KERNEL_VERSION 7
152158
153159 /** Minor version number of this interface */
154−#define FUSE_KERNEL_MINOR_VERSION 27
160+#define FUSE_KERNEL_MINOR_VERSION 28
155161
156162 /** The node ID of the root inode */
157163 #define FUSE_ROOT_ID 1
@@ -219,10 +225,12 @@ struct fuse_file_lock { · 61 unmodified lines
219225 * FOPEN_DIRECT_IO: bypass page cache for this open file
220226 * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
221227 * FOPEN_NONSEEKABLE: the file is not seekable
228+ * FOPEN_CACHE_DIR: allow caching this directory
222229 */
223230 #define FOPEN_DIRECT_IO (1 << 0)
224231 #define FOPEN_KEEP_CACHE (1 << 1)
225232 #define FOPEN_NONSEEKABLE (1 << 2)
233+#define FOPEN_CACHE_DIR (1 << 3)
226234
227235 /**
228236 * INIT request/reply flags
@@ -249,6 +257,8 @@ struct fuse_file_lock { · 20 unmodified lines
249257 * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc
250258 * FUSE_POSIX_ACL: filesystem supports posix acls
251259 * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED
260+ * FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages
261+ * FUSE_CACHE_SYMLINKS: cache READLINK responses
252262 */
253263 #define FUSE_ASYNC_READ (1 << 0)
254264 #define FUSE_POSIX_LOCKS (1 << 1)
@@ -272,6 +282,8 @@ struct fuse_file_lock { · 17 unmodified lines
272282 #define FUSE_HANDLE_KILLPRIV (1 << 19)
273283 #define FUSE_POSIX_ACL (1 << 20)
274284 #define FUSE_ABORT_ERROR (1 << 21)
285+#define FUSE_MAX_PAGES (1 << 22)
286+#define FUSE_CACHE_SYMLINKS (1 << 23)
275287
276288 /**
277289 * CUSE INIT request/reply flags
@@ -337,53 +349,54 @@ struct fuse_file_lock { · 59 unmodified lines
337349 #define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
338350
339351 enum fuse_opcode {
340− FUSE_LOOKUP = 1,
341− FUSE_FORGET = 2, /* no reply */
342− FUSE_GETATTR = 3,
343− FUSE_SETATTR = 4,
344− FUSE_READLINK = 5,
345− FUSE_SYMLINK = 6,
346− FUSE_MKNOD = 8,
347− FUSE_MKDIR = 9,
348− FUSE_UNLINK = 10,
349− FUSE_RMDIR = 11,
350− FUSE_RENAME = 12,
351− FUSE_LINK = 13,
352− FUSE_OPEN = 14,
353− FUSE_READ = 15,
354− FUSE_WRITE = 16,
355− FUSE_STATFS = 17,
356− FUSE_RELEASE = 18,
357− FUSE_FSYNC = 20,
358− FUSE_SETXATTR = 21,
359− FUSE_GETXATTR = 22,
360− FUSE_LISTXATTR = 23,
361− FUSE_REMOVEXATTR = 24,
362− FUSE_FLUSH = 25,
363− FUSE_INIT = 26,
364− FUSE_OPENDIR = 27,
365− FUSE_READDIR = 28,
366− FUSE_RELEASEDIR = 29,
367− FUSE_FSYNCDIR = 30,
368− FUSE_GETLK = 31,
369− FUSE_SETLK = 32,
370− FUSE_SETLKW = 33,
371− FUSE_ACCESS = 34,
372− FUSE_CREATE = 35,
373− FUSE_INTERRUPT = 36,
374− FUSE_BMAP = 37,
375− FUSE_DESTROY = 38,
376− FUSE_IOCTL = 39,
377− FUSE_POLL = 40,
378− FUSE_NOTIFY_REPLY = 41,
379− FUSE_BATCH_FORGET = 42,
380− FUSE_FALLOCATE = 43,
381− FUSE_READDIRPLUS = 44,
382− FUSE_RENAME2 = 45,
383− FUSE_LSEEK = 46,
352+ FUSE_LOOKUP = 1,
353+ FUSE_FORGET = 2, /* no reply */
354+ FUSE_GETATTR = 3,
355+ FUSE_SETATTR = 4,
356+ FUSE_READLINK = 5,
357+ FUSE_SYMLINK = 6,
358+ FUSE_MKNOD = 8,
359+ FUSE_MKDIR = 9,
360+ FUSE_UNLINK = 10,
361+ FUSE_RMDIR = 11,
362+ FUSE_RENAME = 12,
363+ FUSE_LINK = 13,
364+ FUSE_OPEN = 14,
365+ FUSE_READ = 15,
366+ FUSE_WRITE = 16,
367+ FUSE_STATFS = 17,
368+ FUSE_RELEASE = 18,
369+ FUSE_FSYNC = 20,
370+ FUSE_SETXATTR = 21,
371+ FUSE_GETXATTR = 22,
372+ FUSE_LISTXATTR = 23,
373+ FUSE_REMOVEXATTR = 24,
374+ FUSE_FLUSH = 25,
375+ FUSE_INIT = 26,
376+ FUSE_OPENDIR = 27,
377+ FUSE_READDIR = 28,
378+ FUSE_RELEASEDIR = 29,
379+ FUSE_FSYNCDIR = 30,
380+ FUSE_GETLK = 31,
381+ FUSE_SETLK = 32,
382+ FUSE_SETLKW = 33,
383+ FUSE_ACCESS = 34,
384+ FUSE_CREATE = 35,
385+ FUSE_INTERRUPT = 36,
386+ FUSE_BMAP = 37,
387+ FUSE_DESTROY = 38,
388+ FUSE_IOCTL = 39,
389+ FUSE_POLL = 40,
390+ FUSE_NOTIFY_REPLY = 41,
391+ FUSE_BATCH_FORGET = 42,
392+ FUSE_FALLOCATE = 43,
393+ FUSE_READDIRPLUS = 44,
394+ FUSE_RENAME2 = 45,
395+ FUSE_LSEEK = 46,
396+ FUSE_COPY_FILE_RANGE = 47,
384397
385398 /* CUSE specific operations */
386− CUSE_INIT = 4096,
399+ CUSE_INIT = 4096,
387400 };
388401
389402 enum fuse_notify_code {
@@ -610,7 +623,9 @@ struct fuse_init_out { · 220 unmodified lines
610623 uint16_t congestion_threshold;
611624 uint32_t max_write;
612625 uint32_t time_gran;
613− uint32_t unused[9];
626+ uint16_t max_pages;
627+ uint16_t padding;
628+ uint32_t unused[8];
614629 };
615630
616631 #define CUSE_INIT_INFO_MAX 4096
@@ -792,4 +807,14 @@ struct fuse_lseek_out { · 175 unmodified lines
792807 uint64_t offset;
793808 };
794809
810+struct fuse_copy_file_range_in {
811+ uint64_t fh_in;
812+ uint64_t off_in;
813+ uint64_t nodeid_out;
814+ uint64_t fh_out;
815+ uint64_t off_out;
816+ uint64_t len;
817+ uint64_t flags;
818+};
819+
795820 #endif /* _LINUX_FUSE_H */