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 ...
Showing the changes to include/uapi/linux (1 of 10 files). Show all
Unified · Split
| @@ -116,6 +116,12 @@ · 115 unmodified lines | ||
| 116 | 116 | * |
| 117 | 117 | * 7.27 |
| 118 | 118 | * - 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 | |
| 119 | 125 | */ |
| 120 | 126 | |
| 121 | 127 | #ifndef _LINUX_FUSE_H |
| @@ -151,7 +157,7 @@ · 29 unmodified lines | ||
| 151 | 157 | #define FUSE_KERNEL_VERSION 7 |
| 152 | 158 | |
| 153 | 159 | /** Minor version number of this interface */ |
| 154 | −#define FUSE_KERNEL_MINOR_VERSION 27 | |
| 160 | +#define FUSE_KERNEL_MINOR_VERSION 28 | |
| 155 | 161 | |
| 156 | 162 | /** The node ID of the root inode */ |
| 157 | 163 | #define FUSE_ROOT_ID 1 |
| @@ -219,10 +225,12 @@ struct fuse_file_lock { · 61 unmodified lines | ||
| 219 | 225 | * FOPEN_DIRECT_IO: bypass page cache for this open file |
| 220 | 226 | * FOPEN_KEEP_CACHE: don't invalidate the data cache on open |
| 221 | 227 | * FOPEN_NONSEEKABLE: the file is not seekable |
| 228 | + * FOPEN_CACHE_DIR: allow caching this directory | |
| 222 | 229 | */ |
| 223 | 230 | #define FOPEN_DIRECT_IO (1 << 0) |
| 224 | 231 | #define FOPEN_KEEP_CACHE (1 << 1) |
| 225 | 232 | #define FOPEN_NONSEEKABLE (1 << 2) |
| 233 | +#define FOPEN_CACHE_DIR (1 << 3) | |
| 226 | 234 | |
| 227 | 235 | /** |
| 228 | 236 | * INIT request/reply flags |
| @@ -249,6 +257,8 @@ struct fuse_file_lock { · 20 unmodified lines | ||
| 249 | 257 | * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc |
| 250 | 258 | * FUSE_POSIX_ACL: filesystem supports posix acls |
| 251 | 259 | * 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 | |
| 252 | 262 | */ |
| 253 | 263 | #define FUSE_ASYNC_READ (1 << 0) |
| 254 | 264 | #define FUSE_POSIX_LOCKS (1 << 1) |
| @@ -272,6 +282,8 @@ struct fuse_file_lock { · 17 unmodified lines | ||
| 272 | 282 | #define FUSE_HANDLE_KILLPRIV (1 << 19) |
| 273 | 283 | #define FUSE_POSIX_ACL (1 << 20) |
| 274 | 284 | #define FUSE_ABORT_ERROR (1 << 21) |
| 285 | +#define FUSE_MAX_PAGES (1 << 22) | |
| 286 | +#define FUSE_CACHE_SYMLINKS (1 << 23) | |
| 275 | 287 | |
| 276 | 288 | /** |
| 277 | 289 | * CUSE INIT request/reply flags |
| @@ -337,53 +349,54 @@ struct fuse_file_lock { · 59 unmodified lines | ||
| 337 | 349 | #define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) |
| 338 | 350 | |
| 339 | 351 | 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, | |
| 384 | 397 | |
| 385 | 398 | /* CUSE specific operations */ |
| 386 | − CUSE_INIT = 4096, | |
| 399 | + CUSE_INIT = 4096, | |
| 387 | 400 | }; |
| 388 | 401 | |
| 389 | 402 | enum fuse_notify_code { |
| @@ -610,7 +623,9 @@ struct fuse_init_out { · 220 unmodified lines | ||
| 610 | 623 | uint16_t congestion_threshold; |
| 611 | 624 | uint32_t max_write; |
| 612 | 625 | uint32_t time_gran; |
| 613 | − uint32_t unused[9]; | |
| 626 | + uint16_t max_pages; | |
| 627 | + uint16_t padding; | |
| 628 | + uint32_t unused[8]; | |
| 614 | 629 | }; |
| 615 | 630 | |
| 616 | 631 | #define CUSE_INIT_INFO_MAX 4096 |
| @@ -792,4 +807,14 @@ struct fuse_lseek_out { · 175 unmodified lines | ||
| 792 | 807 | uint64_t offset; |
| 793 | 808 | }; |
| 794 | 809 | |
| 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 | + | |
| 795 | 820 | #endif /* _LINUX_FUSE_H */ |