aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlm/dlmfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ocfs2/dlm/dlmfs.c')
-rw-r--r--fs/ocfs2/dlm/dlmfs.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c
index 77d0df42fe02..ddf55dafba2d 100644
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -43,6 +43,7 @@
43#include <linux/init.h> 43#include <linux/init.h>
44#include <linux/string.h> 44#include <linux/string.h>
45#include <linux/backing-dev.h> 45#include <linux/backing-dev.h>
46#include <linux/poll.h>
46 47
47#include <asm/uaccess.h> 48#include <asm/uaccess.h>
48 49
@@ -98,8 +99,12 @@ static const struct dlm_protocol_version user_locking_protocol = {
98 * The ABI features are local to this machine's dlmfs mount. This is 99 * The ABI features are local to this machine's dlmfs mount. This is
99 * distinct from the locking protocol, which is concerned with inter-node 100 * distinct from the locking protocol, which is concerned with inter-node
100 * interaction. 101 * interaction.
102 *
103 * Capabilities:
104 * - bast : POLLIN against the file descriptor of a held lock
105 * signifies a bast fired on the lock.
101 */ 106 */
102#define DLMFS_CAPABILITIES "" 107#define DLMFS_CAPABILITIES "bast"
103extern int param_set_dlmfs_capabilities(const char *val, 108extern int param_set_dlmfs_capabilities(const char *val,
104 struct kernel_param *kp) 109 struct kernel_param *kp)
105{ 110{
@@ -215,6 +220,22 @@ static int dlmfs_file_release(struct inode *inode,
215 return 0; 220 return 0;
216} 221}
217 222
223static unsigned int dlmfs_file_poll(struct file *file, poll_table *wait)
224{
225 int event = 0;
226 struct inode *inode = file->f_path.dentry->d_inode;
227 struct dlmfs_inode_private *ip = DLMFS_I(inode);
228
229 poll_wait(file, &ip->ip_lockres.l_event, wait);
230
231 spin_lock(&ip->ip_lockres.l_lock);
232 if (ip->ip_lockres.l_flags & USER_LOCK_BLOCKED)
233 event = POLLIN | POLLRDNORM;
234 spin_unlock(&ip->ip_lockres.l_lock);
235
236 return event;
237}
238
218static ssize_t dlmfs_file_read(struct file *filp, 239static ssize_t dlmfs_file_read(struct file *filp,
219 char __user *buf, 240 char __user *buf,
220 size_t count, 241 size_t count,
@@ -585,6 +606,7 @@ static int dlmfs_fill_super(struct super_block * sb,
585static const struct file_operations dlmfs_file_operations = { 606static const struct file_operations dlmfs_file_operations = {
586 .open = dlmfs_file_open, 607 .open = dlmfs_file_open,
587 .release = dlmfs_file_release, 608 .release = dlmfs_file_release,
609 .poll = dlmfs_file_poll,
588 .read = dlmfs_file_read, 610 .read = dlmfs_file_read,
589 .write = dlmfs_file_write, 611 .write = dlmfs_file_write,
590}; 612};