aboutsummaryrefslogtreecommitdiffstats
path: root/lib/fuse.c
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2011-05-19 15:30:01 +0200
committerMiklos Szeredi <mszeredi@suse.cz>2011-05-19 15:30:01 +0200
commit7819846300dc036fb94569feff4f86cd33b459d9 (patch)
tree3952d289b0af4825d25121fce89927bdc7d7635b /lib/fuse.c
parentd915a6b4a84ae6e82f3756df9ca695395e5aacfe (diff)
downloadlibfuse-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.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/lib/fuse.c b/lib/fuse.c
index 02af677..b8cce23 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -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,