Commit 9f5596af authored by Al Viro's avatar Al Viro

take check for new events in namespace (guts of mounts_poll()) to namespace.c

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent e21e7095
...@@ -737,6 +737,21 @@ static void m_stop(struct seq_file *m, void *v) ...@@ -737,6 +737,21 @@ static void m_stop(struct seq_file *m, void *v)
up_read(&namespace_sem); up_read(&namespace_sem);
} }
int mnt_had_events(struct proc_mounts *p)
{
struct mnt_namespace *ns = p->ns;
int res = 0;
spin_lock(&vfsmount_lock);
if (p->event != ns->event) {
p->event = ns->event;
res = 1;
}
spin_unlock(&vfsmount_lock);
return res;
}
struct proc_fs_info { struct proc_fs_info {
int flag; int flag;
const char *str; const char *str;
......
...@@ -647,17 +647,11 @@ static int mounts_release(struct inode *inode, struct file *file) ...@@ -647,17 +647,11 @@ static int mounts_release(struct inode *inode, struct file *file)
static unsigned mounts_poll(struct file *file, poll_table *wait) static unsigned mounts_poll(struct file *file, poll_table *wait)
{ {
struct proc_mounts *p = file->private_data; struct proc_mounts *p = file->private_data;
struct mnt_namespace *ns = p->ns;
unsigned res = POLLIN | POLLRDNORM; unsigned res = POLLIN | POLLRDNORM;
poll_wait(file, &ns->poll, wait); poll_wait(file, &p->ns->poll, wait);
if (mnt_had_events(p))
spin_lock(&vfsmount_lock);
if (p->event != ns->event) {
p->event = ns->event;
res |= POLLERR | POLLPRI; res |= POLLERR | POLLPRI;
}
spin_unlock(&vfsmount_lock);
return res; return res;
} }
......
...@@ -35,6 +35,7 @@ static inline void get_mnt_ns(struct mnt_namespace *ns) ...@@ -35,6 +35,7 @@ static inline void get_mnt_ns(struct mnt_namespace *ns)
extern const struct seq_operations mounts_op; extern const struct seq_operations mounts_op;
extern const struct seq_operations mountinfo_op; extern const struct seq_operations mountinfo_op;
extern const struct seq_operations mountstats_op; extern const struct seq_operations mountstats_op;
extern int mnt_had_events(struct proc_mounts *);
#endif #endif
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment