[CRIU] [PATCH] cr-dump: call stat for /proc/pid/fd/X directly
Andrey Vagin
avagin at openvz.org
Sat Jan 19 09:55:29 EST 2013
This patch can be committed instead of:
[PATCH 1/6] cr-dump: move parasite_drain_fds_seized out of dump_task_files
[PATCH 2/6] cr-dump: fix dumping file locks in a mount namespace
readlink is not required here and a file can be unavailable,
if a process is in another mnt namespace
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
cr-dump.c | 23 +++++------------------
1 file changed, 5 insertions(+), 18 deletions(-)
diff --git a/cr-dump.c b/cr-dump.c
index e94aa51..6a274f3 100644
--- a/cr-dump.c
+++ b/cr-dump.c
@@ -694,36 +694,23 @@ err:
static int get_fd_by_ino(unsigned long i_no, struct parasite_drain_fd *dfds,
pid_t pid)
{
- int i, ret = -1;
- char path[PATH_MAX];
- char buf[40];
+ int i;
+ char buf[PATH_MAX];
struct stat fd_stat;
- i = 0;
- while (i < dfds->nr_fds) {
+ for (i = 0; i < dfds->nr_fds; i++) {
snprintf(buf, sizeof(buf), "/proc/%d/fd/%d", pid,
dfds->fds[i]);
- buf[39] = '\0';
-
- memset(path, 0, sizeof(path));
- ret = readlink(buf, path, sizeof(path));
- if (ret < 0) {
- pr_err("Read link %s failed!\n", buf);
- goto err;
- }
- if (stat(path, &fd_stat) == -1) {
- i++;
- pr_msg("Could not get %s stat!\n", path);
+ if (stat(buf, &fd_stat) == -1) {
+ pr_msg("Could not get %s stat!\n", buf);
continue;
}
if (fd_stat.st_ino == i_no)
return dfds->fds[i];
- i++;
}
-err:
return -1;
}
--
1.7.11.7
More information about the CRIU
mailing list