let it build even without statx around
OBS-URL: https://build.opensuse.org/package/show/Base:System/psmisc?expand=0&rev=111
This commit is contained in:
parent
2ae8b684df
commit
614e4d9285
@ -1,4 +1,4 @@
|
||||
From 7181b4125fc2a1057dffffaa643e6bcb549fd0eb Mon Sep 17 00:00:00 2001
|
||||
From f6e5c845e75ffda1381b3a72b068ce806d01d751 Mon Sep 17 00:00:00 2001
|
||||
From: Werner Fink <werner@suse.de>
|
||||
Date: Fri, 2 Nov 2018 14:27:00 +0100
|
||||
Subject: [PATCH] Use new statx(2) system call to avoid hangs on NFS
|
||||
@ -12,7 +12,7 @@ Signed-off-by: Werner Fink <werner@suse.de>
|
||||
src/statx.h | 66 +++++++++++
|
||||
src/timeout.c | 372 ----------------------------------------------------------
|
||||
src/timeout.h | 45 -------
|
||||
7 files changed, 247 insertions(+), 511 deletions(-)
|
||||
7 files changed, 248 insertions(+), 510 deletions(-)
|
||||
create mode 100644 src/statx.c
|
||||
create mode 100644 src/statx.h
|
||||
delete mode 100644 src/timeout.c
|
||||
@ -90,7 +90,7 @@ index d8d3366..81d3674 100644
|
||||
# Enable hardened compile and link flags
|
||||
AC_ARG_ENABLE([harden_flags],
|
||||
diff --git src/fuser.c src/fuser.c
|
||||
index 2681f74..c717e19 100644
|
||||
index 2681f74..92ffa37 100644
|
||||
--- src/fuser.c
|
||||
+++ src/fuser.c
|
||||
@@ -63,7 +63,7 @@
|
||||
@ -132,21 +132,22 @@ index 2681f74..c717e19 100644
|
||||
break;
|
||||
case 'k':
|
||||
opts |= OPT_KILL;
|
||||
@@ -1261,10 +1255,9 @@ int main(int argc, char *argv[])
|
||||
@@ -1261,10 +1255,11 @@ int main(int argc, char *argv[])
|
||||
continue;
|
||||
}
|
||||
|
||||
-#if defined(WITH_MOUNTINFO_LIST)
|
||||
- if ((opts & (OPT_MOUNTS|OPT_ALWAYSSTAT)) == OPT_MOUNTS)
|
||||
- thestat = mntstat;
|
||||
-#endif
|
||||
+#if defined(HAVE_DECL_SYS_STATX) && HAVE_DECL_SYS_STATX == 1
|
||||
+ if ((opts & OPT_ALWAYSSTAT))
|
||||
+ stat_flags = 0; /* Triggers sync with e.g. remote NFS server even on autofs */
|
||||
#endif
|
||||
+
|
||||
/* an option */
|
||||
/* Not an option, must be a file specification */
|
||||
if ((this_name = malloc(sizeof(struct names))) == NULL)
|
||||
@@ -1584,7 +1577,7 @@ static struct stat *get_pidstat(const pid_t pid, const char *filename, int *id)
|
||||
@@ -1584,7 +1579,7 @@ static struct stat *get_pidstat(const pid_t pid, const char *filename, int *id)
|
||||
if ((st = (struct stat *)malloc(sizeof(struct stat))) == NULL)
|
||||
return NULL;
|
||||
snprintf(pathname, 256, "/proc/%d/%s", pid, filename);
|
||||
@ -155,7 +156,7 @@ index 2681f74..c717e19 100644
|
||||
free(st);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1631,7 +1624,7 @@ check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head,
|
||||
@@ -1631,7 +1626,7 @@ check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head,
|
||||
snprintf(filepath, sizeof filepath - 1, "/proc/%d/%s/%s",
|
||||
pid, dirname, direntry->d_name);
|
||||
|
||||
@ -164,7 +165,7 @@ index 2681f74..c717e19 100644
|
||||
if (errno != ENOENT && errno != ENOTDIR) {
|
||||
fprintf(stderr, _("Cannot stat file %s: %s\n"),
|
||||
filepath, strerror(errno));
|
||||
@@ -1673,7 +1666,7 @@ check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head,
|
||||
@@ -1673,7 +1668,7 @@ check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head,
|
||||
if (thedev != ino_tmp->device)
|
||||
continue;
|
||||
if (!st.st_ino
|
||||
@ -173,7 +174,7 @@ index 2681f74..c717e19 100644
|
||||
fprintf(stderr,
|
||||
_("Cannot stat file %s: %s\n"),
|
||||
filepath, strerror(errno));
|
||||
@@ -1761,11 +1754,11 @@ static uid_t getpiduid(const pid_t pid)
|
||||
@@ -1761,11 +1756,11 @@ static uid_t getpiduid(const pid_t pid)
|
||||
|
||||
if (asprintf(&pathname, "/proc/%d", pid) < 0)
|
||||
return 0;
|
||||
@ -189,7 +190,7 @@ index 2681f74..c717e19 100644
|
||||
return st.st_uid;
|
||||
}
|
||||
|
||||
@@ -1803,7 +1796,7 @@ void fill_unix_cache(struct unixsocket_list **unixsocket_head)
|
||||
@@ -1803,7 +1798,7 @@ void fill_unix_cache(struct unixsocket_list **unixsocket_head)
|
||||
path = scanned_path;
|
||||
if (*scanned_path == '@')
|
||||
scanned_path++;
|
||||
@ -198,7 +199,7 @@ index 2681f74..c717e19 100644
|
||||
free(path);
|
||||
continue;
|
||||
}
|
||||
@@ -1938,7 +1931,7 @@ static dev_t find_net_dev(void)
|
||||
@@ -1938,7 +1933,7 @@ static dev_t find_net_dev(void)
|
||||
fprintf(stderr, _("Cannot open a network socket.\n"));
|
||||
return -1;
|
||||
}
|
||||
@ -207,7 +208,7 @@ index 2681f74..c717e19 100644
|
||||
fprintf(stderr, _("Cannot find socket's device number.\n"));
|
||||
close(skt);
|
||||
return -1;
|
||||
@@ -1971,7 +1964,7 @@ scan_knfsd(struct names *names_head, struct inode_list *ino_head,
|
||||
@@ -1971,7 +1966,7 @@ scan_knfsd(struct names *names_head, struct inode_list *ino_head,
|
||||
if ((find_space = strpbrk(line, " \t")) == NULL)
|
||||
continue;
|
||||
*find_space = '\0';
|
||||
@ -216,7 +217,7 @@ index 2681f74..c717e19 100644
|
||||
continue;
|
||||
}
|
||||
/* Scan the devices */
|
||||
@@ -2006,7 +1999,7 @@ scan_mounts(struct names *names_head, struct inode_list *ino_head,
|
||||
@@ -2006,7 +2001,7 @@ scan_mounts(struct names *names_head, struct inode_list *ino_head,
|
||||
mntinfo_t *mnt = list_entry(ptr, mntinfo_t);
|
||||
const char *find_mountp = mnt->mpoint;
|
||||
|
||||
@ -225,7 +226,7 @@ index 2681f74..c717e19 100644
|
||||
continue;
|
||||
|
||||
/* Scan the devices */
|
||||
@@ -2053,7 +2046,7 @@ scan_swaps(struct names *names_head, struct inode_list *ino_head,
|
||||
@@ -2053,7 +2048,7 @@ scan_swaps(struct names *names_head, struct inode_list *ino_head,
|
||||
if (*find_space == '\0')
|
||||
continue;
|
||||
}
|
||||
@ -234,7 +235,7 @@ index 2681f74..c717e19 100644
|
||||
continue;
|
||||
}
|
||||
/* Scan the devices */
|
||||
@@ -2209,7 +2202,7 @@ out:
|
||||
@@ -2209,7 +2204,7 @@ out:
|
||||
struct stat lst;
|
||||
|
||||
snprintf(pathname, 256, "/proc/%d/fd/%s", pid, fd);
|
||||
@ -243,7 +244,7 @@ index 2681f74..c717e19 100644
|
||||
if (lst.st_mode & S_IWUSR)
|
||||
info->flags |= O_WRONLY;
|
||||
ret++;
|
||||
@@ -2352,49 +2345,6 @@ out:
|
||||
@@ -2352,49 +2347,6 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -448,7 +449,7 @@ index 0000000..2554da7
|
||||
+}
|
||||
diff --git src/statx.h src/statx.h
|
||||
new file mode 100644
|
||||
index 0000000..548583d
|
||||
index 0000000..bc9eda7
|
||||
--- /dev/null
|
||||
+++ src/statx.h
|
||||
@@ -0,0 +1,66 @@
|
||||
@ -488,19 +489,19 @@ index 0000000..548583d
|
||||
+extern int lstatn(const char*, unsigned int, struct stat*);
|
||||
+#else
|
||||
+extern inline int
|
||||
+statn(const char *path, unsigned int mask __atribute__((unused)), struct stat *st)
|
||||
+statn(const char *path, unsigned int mask __attribute__((unused)), struct stat *st)
|
||||
+{
|
||||
+ return stat(path, st);
|
||||
+}
|
||||
+extern inline int
|
||||
+fstatn(int fd, unsigned int mask __atribute__((unused)), struct stat *st)
|
||||
+fstatn(int fd, unsigned int mask __attribute__((unused)), struct stat *st)
|
||||
+{
|
||||
+ return fstat(fd, st);
|
||||
+}
|
||||
+extern inline int
|
||||
+lstatn(const char *path, unsigned int mask __atribute__((unused)), struct stat *st)
|
||||
+lstatn(const char *path, unsigned int mask __attribute__((unused)), struct stat *st)
|
||||
+{
|
||||
+ lstat(path, st);
|
||||
+ return lstat(path, st);
|
||||
+}
|
||||
+#define STATX_TYPE 0
|
||||
+#define STATX_MODE 0
|
||||
|
Loading…
Reference in New Issue
Block a user