diff options
author | 2011-12-06 21:56:34 +0100 | |
---|---|---|
committer | 2011-12-07 12:23:58 +0100 | |
commit | 5a44747054926c2683a28392869c4f8603f5e70a (patch) | |
tree | 04deb769cd2b48926abd77f8b617fa8680c45bc6 /lib | |
parent | 4b2157c44e6ad7e692fcffb7450143e83151d36b (diff) |
libfuse: Notifying the kernel of deletion.
libfuse part to allow a FUSE file-system to tell the kernel when a
file or directory is deleted. If the specified dentry has the
specified inode number, the kernel will unhash it.
Signed-off-by: John Muir <john@jmuir.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/fuse_lowlevel.c | 28 | ||||
-rw-r--r-- | lib/fuse_versionscript | 1 |
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index f69b2b1..3bfc993 100644 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -2054,6 +2054,34 @@ int fuse_lowlevel_notify_inval_entry(struct fuse_chan *ch, fuse_ino_t parent, return send_notify_iov(f, ch, FUSE_NOTIFY_INVAL_ENTRY, iov, 3); } +int fuse_lowlevel_notify_delete(struct fuse_chan *ch, + fuse_ino_t parent, fuse_ino_t child, + const char *name, size_t namelen) +{ + struct fuse_notify_delete_out outarg; + struct fuse_ll *f; + struct iovec iov[3]; + + if (!ch) + return -EINVAL; + + f = (struct fuse_ll *)fuse_session_data(fuse_chan_session(ch)); + if (!f) + return -ENODEV; + + outarg.parent = parent; + outarg.child = child; + outarg.namelen = namelen; + outarg.padding = 0; + + iov[1].iov_base = &outarg; + iov[1].iov_len = sizeof(outarg); + iov[2].iov_base = (void *)name; + iov[2].iov_len = namelen + 1; + + return send_notify_iov(f, ch, FUSE_NOTIFY_DELETE, iov, 3); +} + int fuse_lowlevel_notify_store(struct fuse_chan *ch, fuse_ino_t ino, off_t offset, struct fuse_bufvec *bufv, enum fuse_buf_copy_flags flags) diff --git a/lib/fuse_versionscript b/lib/fuse_versionscript index 1ee1c9d..95bc7d9 100644 --- a/lib/fuse_versionscript +++ b/lib/fuse_versionscript @@ -195,6 +195,7 @@ FUSE_2.9 { fuse_stop_cleanup_thread; fuse_clean_cache; fuse_reply_mmap; + fuse_lowlevel_notify_delete; local: *; |