2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 22:05:36 +00:00

inotify: Use fast way of obtaining desired watch descriptor number

This patch makes restore_one_inotify() to request specific
watch descriptor number instead of iterating in (possible)
long-duration loop if system supports it.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
This commit is contained in:
Kirill Tkhai
2018-02-14 18:37:18 +03:00
committed by Andrei Vagin
parent 1cfb96956b
commit c66ce3095f

View File

@@ -35,6 +35,7 @@
#include "files-reg.h"
#include "file-ids.h"
#include "criu-log.h"
#include "kerndat.h"
#include "common/list.h"
#include "common/lock.h"
#include "irmap.h"
@@ -569,11 +570,13 @@ static int restore_one_inotify(int inotify_fd, struct fsnotify_mark_info *info)
iwe->mask, mask);
}
/*
* FIXME The kernel allocates wd-s sequentially,
* this is suboptimal, but the kernel doesn't
* provide and API for this yet :(
*/
if (kdat.has_inotify_setnextwd) {
if (ioctl(inotify_fd, INOTIFY_IOC_SETNEXTWD, iwe->wd)) {
pr_perror("Can't set next inotify wd");
return -1;
}
}
while (1) {
int wd;
@@ -589,6 +592,9 @@ static int restore_one_inotify(int inotify_fd, struct fsnotify_mark_info *info)
break;
}
if (kdat.has_inotify_setnextwd)
return -1;
inotify_rm_watch(inotify_fd, wd);
}