diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2011-05-19 15:30:01 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2011-05-19 15:30:01 +0200 |
commit | 7819846300dc036fb94569feff4f86cd33b459d9 (patch) | |
tree | 3952d289b0af4825d25121fce89927bdc7d7635b /lib/fuse.c | |
parent | d915a6b4a84ae6e82f3756df9ca695395e5aacfe (diff) | |
download | libfuse-7819846300dc036fb94569feff4f86cd33b459d9.tar.gz |
Add ->forget_multi() operation
Add ->forget_multi() operation to the lowlevel API. The filesystem
may implement this to process multiple forget requests in one call
Diffstat (limited to 'lib/fuse.c')
-rw-r--r-- | lib/fuse.c | 26 |
1 files changed, 22 insertions, 4 deletions
@@ -2493,17 +2493,34 @@ static void fuse_lib_lookup(fuse_req_t req, fuse_ino_t parent, reply_entry(req, &e, err); } +static void do_forget(struct fuse *f, fuse_ino_t ino, uint64_t nlookup) +{ + if (f->conf.debug) + fprintf(stderr, "FORGET %llu/%llu\n", (unsigned long long)ino, + (unsigned long long) nlookup); + forget_node(f, ino, nlookup); +} + static void fuse_lib_forget(fuse_req_t req, fuse_ino_t ino, unsigned long nlookup) { + do_forget(req_fuse(req), ino, nlookup); + fuse_reply_none(req); +} + +static void fuse_lib_forget_multi(fuse_req_t req, size_t count, + struct fuse_forget_data *forgets) +{ struct fuse *f = req_fuse(req); - if (f->conf.debug) - fprintf(stderr, "FORGET %llu/%lu\n", (unsigned long long)ino, - nlookup); - forget_node(f, ino, nlookup); + size_t i; + + for (i = 0; i < count; i++) + do_forget(f, forgets[i].ino, forgets[i].nlookup); + fuse_reply_none(req); } + static void fuse_lib_getattr(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) { @@ -3820,6 +3837,7 @@ static struct fuse_lowlevel_ops fuse_path_ops = { .destroy = fuse_lib_destroy, .lookup = fuse_lib_lookup, .forget = fuse_lib_forget, + .forget_multi = fuse_lib_forget_multi, .getattr = fuse_lib_getattr, .setattr = fuse_lib_setattr, .access = fuse_lib_access, |