assert(mn);
assert(me);
- me->enable = enable ? 1 : 0;
- me->changed = 0;
+ me->enabled = enable ? 1 : 0;
+ me->active = 0;
if (mn->fd < 0)
return 0; /* no epoll, ignore request */
DBG(MONITOR, ul_debugobj(mn, "adding monitor entries to epoll (fd=%d)", mn->fd));
while (monitor_next_entry(mn, &itr, &me) == 0) {
- if (!me->enable)
+ if (!me->enabled)
continue;
rc = monitor_modify_epoll(mn, me, TRUE);
if (rc)
if (!me)
return -EINVAL;
- if (me->opers->op_event_verify == NULL ||
- me->opers->op_event_verify(mn, me) == 1) {
- me->changed = 1;
+ if (me->opers->op_process_event == NULL ||
+ me->opers->op_process_event(mn, me) == 1) {
+ me->active = 1;
break;
}
} while (1);
}
-static struct monitor_entry *get_changed(struct libmnt_monitor *mn)
+static struct monitor_entry *get_active(struct libmnt_monitor *mn)
{
struct libmnt_iter itr;
struct monitor_entry *me;
mnt_reset_iter(&itr, MNT_ITER_FORWARD);
while (monitor_next_entry(mn, &itr, &me) == 0) {
- if (me->changed)
+ if (me->active)
return me;
}
return NULL;
*
* If we get nothing, then ask kernel.
*/
- me = get_changed(mn);
+ me = get_active(mn);
while (!me) {
struct epoll_event events[1];
if (!me)
return -EINVAL;
- if (me->opers->op_event_verify != NULL &&
- me->opers->op_event_verify(mn, me) != 1)
+ if (me->opers->op_process_event != NULL &&
+ me->opers->op_process_event(mn, me) != 1)
me = NULL;
}
- me->changed = 0;
+ me->active = 0;
if (filename)
*filename = me->path;
#ifndef _MNTMONITOR_PRIVATE_H
#define _MNTMONITOR_PRIVATE_H
+#include "c.h"
+#include <stdbool.h>
+
struct monitor_opers;
struct monitor_entry {
const struct monitor_opers *opers;
void *data; /* private type-specific data */
- unsigned int enable : 1,
- changed : 1;
+ bool enabled, /* monitoring fd */
+ active; /* ready for mnt_monitor_next_change() */
struct list_head ents;
};
struct list_head ents;
- unsigned int kernel_veiled: 1;
+ bool kernel_veiled;
};
struct monitor_opers {
int (*op_get_fd)(struct libmnt_monitor *, struct monitor_entry *);
int (*op_close_fd)(struct libmnt_monitor *, struct monitor_entry *);
int (*op_free_data)(struct monitor_entry *);
- int (*op_event_verify)(struct libmnt_monitor *, struct monitor_entry *);
+ int (*op_process_event)(struct libmnt_monitor *, struct monitor_entry *);
};
int monitor_modify_epoll(struct libmnt_monitor *mn, struct monitor_entry *me, int enable);
{
int rc;
- if (!me || me->enable == 0) /* not-initialized or disabled */
+ if (!me || me->enabled == 0) /* not-initialized or disabled */
return -EINVAL;
if (me->fd >= 0)
return me->fd; /* already initialized */
return rc;
}
-static int kernel_event_verify(struct libmnt_monitor *mn,
- struct monitor_entry *me)
+static int kernel_process_event(struct libmnt_monitor *mn,
+ struct monitor_entry *me)
{
int status = 1;
static const struct monitor_opers kernel_opers = {
.op_get_fd = kernel_monitor_get_fd,
.op_close_fd = kernel_monitor_close_fd,
- .op_event_verify = kernel_event_verify
+ .op_process_event = kernel_process_event
};
/**
{
int rc;
- if (!me || me->enable == 0) /* not-initialized or disabled */
+ if (!me || me->enabled == 0) /* not-initialized or disabled */
return -EINVAL;
if (me->fd >= 0)
return me->fd; /* already initialized */
/*
* verify and drain inotify buffer
*/
-static int userspace_event_verify(struct libmnt_monitor *mn,
+static int userspace_process_event(struct libmnt_monitor *mn,
struct monitor_entry *me)
{
char buf[sizeof(struct inotify_event) + NAME_MAX + 1];
if (!me || me->fd < 0)
return 0;
- DBG(MONITOR, ul_debugobj(mn, "drain and verify userspace monitor inotify"));
+ DBG(MONITOR, ul_debugobj(mn, "process utab event"));
/* the me->fd is non-blocking */
do {
static const struct monitor_opers userspace_opers = {
.op_get_fd = userspace_monitor_get_fd,
.op_close_fd = userspace_monitor_close_fd,
- .op_event_verify = userspace_event_verify
+ .op_process_event = userspace_process_event
};
/**