diff options
author | HereThereBeDragons <HereThereBeDragons@users.noreply.github.com> | 2023-06-30 14:57:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-30 13:57:06 +0100 |
commit | 51bc827df873d9ff4069b83796cd32fcb6bd659e (patch) | |
tree | 157b5c7d6d300f6006d10d7c1676a8a0300ce524 /include/fuse_lowlevel.h | |
parent | 756726800683b22b9c4eb75bf56bcf30cb50cca1 (diff) | |
download | libfuse-51bc827df873d9ff4069b83796cd32fcb6bd659e.tar.gz |
Make expire only function fail if no kernel support (#789)
Diffstat (limited to 'include/fuse_lowlevel.h')
-rw-r--r-- | include/fuse_lowlevel.h | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/include/fuse_lowlevel.h b/include/fuse_lowlevel.h index b42447e..3ac97eb 100644 --- a/include/fuse_lowlevel.h +++ b/include/fuse_lowlevel.h @@ -139,11 +139,12 @@ struct fuse_custom_io { }; /** - * Flags for fuse_lowlevel_notify_expire_entry() + * Flags for fuse_lowlevel_notify_entry() * 0 = invalidate entry * FUSE_LL_EXPIRE_ONLY = expire entry */ -enum fuse_expire_flags { +enum fuse_notify_entry_flags { + FUSE_LL_INVALIDATE = 0, FUSE_LL_EXPIRE_ONLY = (1 << 0), }; @@ -1682,8 +1683,7 @@ int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino, off_t off, off_t len); /** - * Notify to invalidate parent attributes and the dentry matching - * parent/name + * Notify to invalidate parent attributes and the dentry matching parent/name * * To avoid a deadlock this function must not be called in the * execution path of a related filesystem operation or within any code @@ -1710,14 +1710,13 @@ int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent, const char *name, size_t namelen); /** - * Notify to expire or invalidate parent attributes and the dentry - * matching parent/name + * Notify to expire parent attributes and the dentry matching parent/name * - * Underlying function for fuse_lowlevel_notify_inval_entry(). + * Same restrictions apply as for fuse_lowlevel_notify_inval_entry() * - * In addition to invalidating an entry, it also allows to expire an entry. - * In that case, the entry is not forcefully removed from kernel cache - * but instead the next access to it forces a lookup from the filesystem. + * Compared to invalidating an entry, expiring the entry results not in a + * forceful removal of that entry from kernel cache but instead the next access + * to it forces a lookup from the filesystem. * * This makes a difference for overmounted dentries, where plain invalidation * would detach all submounts before dropping the dentry from the cache. @@ -1728,17 +1727,18 @@ int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent, * so invalidation will only be triggered for the non-overmounted case. * The dentry could also be mounted in a different mount instance, in which case * any submounts will still be detached. + * + * Added in FUSE protocol version 7.38. If the kernel does not support + * this (or a newer) version, the function will return -ENOSYS and do nothing. * * @param se the session object * @param parent inode number * @param name file name * @param namelen strlen() of file name - * @param flags flags to control if the entry should be expired or invalidated - * @return zero for success, -errno for failure + * @return zero for success, -errno for failure, -enosys if no kernel support */ int fuse_lowlevel_notify_expire_entry(struct fuse_session *se, fuse_ino_t parent, - const char *name, size_t namelen, - enum fuse_expire_flags flags); + const char *name, size_t namelen); /** * This function behaves like fuse_lowlevel_notify_inval_entry() with |