aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--include/fuse_common.h5
-rw-r--r--include/fuse_kernel.h3
-rw-r--r--lib/fuse.c5
-rw-r--r--lib/fuse_lowlevel.c1
5 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index d3e629c..83438b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
* libfuse: add readdirplus support in fuse_lowlevel_ops. Patch by
Feng Shuo
+ * libfuse: add poll_events to fuse_file_info. Patch by Enke Chen
+
2013-02-06 Miklos Szeredi <miklos@szeredi.hu>
* libfuse: set close-on-exec flag on pipe file descriptors. Patch
diff --git a/include/fuse_common.h b/include/fuse_common.h
index c8a2409..cb2d8cf 100644
--- a/include/fuse_common.h
+++ b/include/fuse_common.h
@@ -84,6 +84,11 @@ struct fuse_file_info {
/** Lock owner id. Available in locking operations and flush */
uint64_t lock_owner;
+
+ /** Requested poll events. Available in ->poll. Only set on kernels
+ which support it. If unsupported, this field is set to zero.
+ Introduced in version 3.0 */
+ uint32_t poll_events;
};
/**
diff --git a/include/fuse_kernel.h b/include/fuse_kernel.h
index 28fefbb..baee03e 100644
--- a/include/fuse_kernel.h
+++ b/include/fuse_kernel.h
@@ -89,6 +89,7 @@
*
* 7.21
* - add FUSE_READDIRPLUS
+ * - send the requested events in POLL request
*/
#ifndef _LINUX_FUSE_H
@@ -620,7 +621,7 @@ struct fuse_poll_in {
__u64 fh;
__u64 kh;
__u32 flags;
- __u32 padding;
+ __u32 events;
};
struct fuse_poll_out {
diff --git a/lib/fuse.c b/lib/fuse.c
index 6e3c431..401a263 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -2196,8 +2196,9 @@ int fuse_fs_poll(struct fuse_fs *fs, const char *path,
int res;
if (fs->debug)
- fprintf(stderr, "poll[%llu] ph: %p\n",
- (unsigned long long) fi->fh, ph);
+ fprintf(stderr, "poll[%llu] ph: %p, events 0x%x\n",
+ (unsigned long long) fi->fh, ph,
+ fi->poll_events);
res = fs->op.poll(path, fi, ph, reventsp);
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index feaa076..2ac9aab 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -1746,6 +1746,7 @@ static void do_poll(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
memset(&fi, 0, sizeof(fi));
fi.fh = arg->fh;
fi.fh_old = fi.fh;
+ fi.poll_events = arg->events;
if (req->f->op.poll) {
struct fuse_pollhandle *ph = NULL;