journal: add inotify watches by-fd instead of by-path
This is slightly nicer, since we actually watch the directories we opened and enumerate. However, primarily this is preparation for adding support for opening journal files by fd without specifying any path, to be added in a later commit.
This commit is contained in:
parent
4f4d6ee4be
commit
430fbf8e7f
|
@ -38,6 +38,7 @@
|
|||
#include "mkdir.h"
|
||||
#include "parse-util.h"
|
||||
#include "path-util.h"
|
||||
#include "stdio-util.h"
|
||||
#include "string-util.h"
|
||||
#include "strv.h"
|
||||
#include "time-util.h"
|
||||
|
@ -493,3 +494,17 @@ int get_files_in_directory(const char *path, char ***list) {
|
|||
|
||||
return n;
|
||||
}
|
||||
|
||||
int inotify_add_watch_fd(int fd, int what, uint32_t mask) {
|
||||
char path[strlen("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
|
||||
int r;
|
||||
|
||||
/* This is like inotify_add_watch(), except that the file to watch is not referenced by a path, but by an fd */
|
||||
xsprintf(path, "/proc/self/fd/%i", what);
|
||||
|
||||
r = inotify_add_watch(fd, path, mask);
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -72,3 +72,5 @@ union inotify_event_buffer {
|
|||
struct inotify_event ev;
|
||||
uint8_t raw[INOTIFY_EVENT_MAX];
|
||||
};
|
||||
|
||||
int inotify_add_watch_fd(int fd, int what, uint32_t mask);
|
||||
|
|
|
@ -1420,10 +1420,10 @@ static int add_directory(sd_journal *j, const char *prefix, const char *dirname)
|
|||
|
||||
if (m->wd <= 0 && j->inotify_fd >= 0) {
|
||||
|
||||
m->wd = inotify_add_watch(j->inotify_fd, m->path,
|
||||
IN_CREATE|IN_MOVED_TO|IN_MODIFY|IN_ATTRIB|IN_DELETE|
|
||||
IN_DELETE_SELF|IN_MOVE_SELF|IN_UNMOUNT|IN_MOVED_FROM|
|
||||
IN_ONLYDIR);
|
||||
m->wd = inotify_add_watch_fd(j->inotify_fd, dirfd(d),
|
||||
IN_CREATE|IN_MOVED_TO|IN_MODIFY|IN_ATTRIB|IN_DELETE|
|
||||
IN_DELETE_SELF|IN_MOVE_SELF|IN_UNMOUNT|IN_MOVED_FROM|
|
||||
IN_ONLYDIR);
|
||||
|
||||
if (m->wd > 0 && hashmap_put(j->directories_by_wd, INT_TO_PTR(m->wd), m) < 0)
|
||||
inotify_rm_watch(j->inotify_fd, m->wd);
|
||||
|
@ -1505,7 +1505,7 @@ static int add_root_directory(sd_journal *j, const char *p, bool missing_ok) {
|
|||
|
||||
if (m->wd <= 0 && j->inotify_fd >= 0) {
|
||||
|
||||
m->wd = inotify_add_watch(j->inotify_fd, m->path,
|
||||
m->wd = inotify_add_watch_fd(j->inotify_fd, dirfd(d),
|
||||
IN_CREATE|IN_MOVED_TO|IN_MODIFY|IN_ATTRIB|IN_DELETE|
|
||||
IN_ONLYDIR);
|
||||
|
||||
|
|
Loading…
Reference in New Issue