passthrough_ll: add forget_multi()
authorVivek Goyal <vgoyal@redhat.com>
Tue, 14 Aug 2018 19:37:02 +0000 (21:37 +0200)
committerNikolaus Rath <Nikolaus@rath.org>
Wed, 10 Oct 2018 09:49:48 +0000 (10:49 +0100)
Add method forget_multi() to forget multiple inodes in a single message.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
example/passthrough_ll.c

index 0c496dee51ceddbc969f4736f05c111df764afb3..1899e1ed81ea423a816544f39a49cdb14e25891a 100644 (file)
@@ -518,7 +518,7 @@ static void unref_inode(struct lo_data *lo, struct lo_inode *inode, uint64_t n)
        }
 }
 
-static void lo_forget(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup)
+static void lo_forget_one(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup)
 {
        struct lo_data *lo = lo_data(req);
        struct lo_inode *inode = lo_inode(req, ino);
@@ -531,7 +531,21 @@ static void lo_forget(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup)
        }
 
        unref_inode(lo, inode, nlookup);
+}
+
+static void lo_forget(fuse_req_t req, fuse_ino_t ino, uint64_t nlookup)
+{
+       lo_forget_one(req, ino, nlookup);
+       fuse_reply_none(req);
+}
+
+static void lo_forget_multi(fuse_req_t req, size_t count,
+                               struct fuse_forget_data *forgets)
+{
+       int i;
 
+       for (i = 0; i < count; i++)
+               lo_forget_one(req, forgets[i].ino, forgets[i].nlookup);
        fuse_reply_none(req);
 }
 
@@ -886,6 +900,7 @@ static struct fuse_lowlevel_ops lo_oper = {
        .rmdir          = lo_rmdir,
        .rename         = lo_rename,
        .forget         = lo_forget,
+       .forget_multi   = lo_forget_multi,
        .getattr        = lo_getattr,
        .setattr        = lo_setattr,
        .readlink       = lo_readlink,