summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/unfs3/unfs3
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/unfs3/unfs3')
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch54
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch85
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch37
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/fix_warnings.patch53
-rw-r--r--meta/recipes-devtools/unfs3/unfs3/no-yywrap.patch14
5 files changed, 190 insertions, 53 deletions
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch b/meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch
new file mode 100644
index 0000000000..e9b9d3df46
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-Add-listen-action-for-a-tcp-socket.patch
@@ -0,0 +1,54 @@
+From b42ab8e1aca951dd06c113159491b3fd5cf06f2e Mon Sep 17 00:00:00 2001
+From: Haiqing Bai <Haiqing.Bai@windriver.com>
+Date: Thu, 24 Oct 2019 09:39:04 +0800
+Subject: [PATCH] Add "listen" action for a tcp socket which does not call
+ 'listen' after 'bind'
+
+It is found that /usr/bin/unfsd customus 100% cpu after starting qemu with 'nfs'
+option, and below lots of error messages shows when strace the process:
+
+poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND},{fd=4, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND},
+{fd=5, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND},{fd=6, events =POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}],
+4, 2000) = 2 ([{fd=4, revents=POLLHUP},{fd=6, revents=POLLHUP}])
+accept(4, 0x7ffd5e6dddc0, [128]) = -1 EINVAL (Invalid argument)
+accept(6, 0x7ffd5e6dddc0, [128]) = -1 EINVAL (Invalid argument)
+
+% time seconds usecs/call calls errors syscall
+------ ----------- ----------- --------- --------- ----------------
+ 70.87 0.005392 0 513886 513886 accept
+ 29.13 0.002216 0 256943 poll
+ 0.00 0.000000 0 4 read
+
+The root cause is that 'listen' is not called for the binded
+socket. The depended libtipc does not call 'listen' if found
+the incomming socket is binded, so 'accept' reports the error
+in the 'for' loop and cpu consumed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ daemon.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/daemon.c b/daemon.c
+index 028a181..4c85903 100644
+--- a/daemon.c
++++ b/daemon.c
+@@ -814,6 +814,13 @@ static SVCXPRT *create_tcp_transport(unsigned int port)
+ fprintf(stderr, "Couldn't bind to tcp port %d\n", port);
+ exit(1);
+ }
++
++ if (listen(sock, SOMAXCONN) < 0) {
++ perror("listen");
++ fprintf(stderr, "Couldn't listen on the address \n");
++ close(sock);
++ exit(1);
++ }
+ }
+
+ transp = svctcp_create(sock, 0, 0);
+--
+1.9.1
+
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch b/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch
new file mode 100644
index 0000000000..6957d102b8
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch
@@ -0,0 +1,85 @@
+From 3f4fcb62661059bad77a2e957b4621137797bc2f Mon Sep 17 00:00:00 2001
+From: Rui Wang <rui.wang@windriver.com>
+Date: Fri, 15 Jun 2018 14:19:10 +0800
+Subject: [PATCH] attr: fix utime for symlink
+
+unfs3 has an old defect that it can not change the timestamps of a
+symlink file because it only uses utime(), which will follow the
+symlink. This will not cause an error if the symlink points to an
+existent file. But under some special situation, such as installing
+a rpm package, rpm tool will create the symlink first and try to
+modify the timestamps of it, when the target file is non-existent.
+This will cause an ESTALE error. Making rpm tool ignore this error
+is a solution, but not the best one. An acceptable approach is
+Making unfs3 support lutimes(), which can modify the symlink file
+itself. Considering not every system support this function, so a
+function checking is necessary.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/unfs3/bugs/12/]
+
+Signed-off-by: Rui Wang <rui.wang@windriver.com>
+---
+ attr.c | 15 +++++++++++----
+ backend_unix.h | 2 ++
+ configure.ac | 1 +
+ 3 files changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/attr.c b/attr.c
+index 73e5c75..427d0e2 100644
+--- a/attr.c
++++ b/attr.c
+@@ -280,7 +280,7 @@ post_op_attr get_post_cached(struct svc_req * req)
+ static nfsstat3 set_time(const char *path, backend_statstruct buf, sattr3 new)
+ {
+ time_t new_atime, new_mtime;
+- struct utimbuf utim;
++ struct timeval stamps[2];
+ int res;
+
+ /* set atime and mtime */
+@@ -302,10 +302,17 @@ static nfsstat3 set_time(const char *path, backend_statstruct buf, sattr3 new)
+ else /* DONT_CHANGE */
+ new_mtime = buf.st_mtime;
+
+- utim.actime = new_atime;
+- utim.modtime = new_mtime;
++ stamps[0].tv_sec = new_atime;
++ stamps[0].tv_usec = 0;
++ stamps[1].tv_sec = new_mtime;
++ stamps[1].tv_usec = 0;
++
++#if HAVE_LUTIMES
++ res = backend_lutimes(path, stamps);
++#else
++ res = backend_utimes(path, stamps);
++#endif
+
+- res = backend_utime(path, &utim);
+ if (res == -1)
+ return setattr_err();
+ }
+diff --git a/backend_unix.h b/backend_unix.h
+index fbc2af3..813ffd3 100644
+--- a/backend_unix.h
++++ b/backend_unix.h
+@@ -61,6 +61,8 @@
+ #define backend_symlink symlink
+ #define backend_truncate truncate
+ #define backend_utime utime
++#define backend_utimes utimes
++#define backend_lutimes lutimes
+ #define backend_statstruct struct stat
+ #define backend_dirstream DIR
+ #define backend_statvfsstruct struct statvfs
+diff --git a/configure.ac b/configure.ac
+index aeec598..ea7f167 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -37,6 +37,7 @@ AC_CHECK_FUNCS(setresuid setresgid)
+ AC_CHECK_FUNCS(vsyslog)
+ AC_CHECK_FUNCS(lchown)
+ AC_CHECK_FUNCS(setgroups)
++AC_CHECK_FUNCS(lutimes)
+ UNFS3_SOLARIS_RPC
+ UNFS3_PORTMAP_DEFINE
+ UNFS3_COMPILE_WARNINGS
diff --git a/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch b/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch
new file mode 100644
index 0000000000..6eee6748f9
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/0001-daemon.c-Libtirpc-porting-fixes.patch
@@ -0,0 +1,37 @@
+From c7a2a65d6c2a433312540c207860740d6e4e7629 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 11 Mar 2018 17:32:54 -0700
+Subject: [PATCH] daemon.c: Libtirpc porting fixes
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ daemon.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/daemon.c b/daemon.c
+index 22f30f6..028a181 100644
+--- a/daemon.c
++++ b/daemon.c
+@@ -117,7 +117,7 @@ void logmsg(int prio, const char *fmt, ...)
+ */
+ struct in_addr get_remote(struct svc_req *rqstp)
+ {
+- return (svc_getcaller(rqstp->rq_xprt))->sin_addr;
++ return ((struct sockaddr_in*)svc_getcaller(rqstp->rq_xprt))->sin_addr;
+ }
+
+ /*
+@@ -125,7 +125,7 @@ struct in_addr get_remote(struct svc_req *rqstp)
+ */
+ short get_port(struct svc_req *rqstp)
+ {
+- return (svc_getcaller(rqstp->rq_xprt))->sin_port;
++ return ((struct sockaddr_in*)svc_getcaller(rqstp->rq_xprt))->sin_port;
+ }
+
+ /*
+--
+2.16.2
+
diff --git a/meta/recipes-devtools/unfs3/unfs3/fix_warnings.patch b/meta/recipes-devtools/unfs3/unfs3/fix_warnings.patch
deleted file mode 100644
index cda8655b96..0000000000
--- a/meta/recipes-devtools/unfs3/unfs3/fix_warnings.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-exports.*: fix warnings.
-
-Fix these warnings:
-lex.yy.c:1207: warning: 'yyunput' defined but not used
-lex.yy.c:1248: warning: 'input' defined but not used
-exports.y: In function 'set_hostname':
-exports.y:334: warning: large integer implicitly truncated to unsigned type
-exports.y: In function 'set_ipaddr':
-exports.y:350: warning: large integer implicitly truncated to unsigned type
-
-Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-
-Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
-
----
- Config/exports.l | 3 +++
- Config/exports.y | 6 ++++--
- 2 files changed, 7 insertions(+), 2 deletions(-)
-
---- a/Config/exports.l
-+++ b/Config/exports.l
-@@ -48,6 +48,9 @@ NETCOMP [0-9]{1,2}
- NET {IP}"/"{NETCOMP}
- OLDNET {IP}"/"{IP}
-
-+%option nounput
-+%option noinput
-+
- %%
-
- ^{WHITE}*\n { /* eat empty line */ }
---- a/Config/exports.y
-+++ b/Config/exports.y
-@@ -331,7 +331,8 @@ static void set_hostname(const char *nam
- if (ent) {
- memcpy(&cur_host.addr, ent->h_addr_list[0],
- sizeof(struct in_addr));
-- cur_host.mask.s_addr = ~0UL;
-+ cur_host.mask.s_addr = 0;
-+ cur_host.mask.s_addr = ~cur_host.mask.s_addr;
- } else {
- logmsg(LOG_CRIT, "could not resolve hostname '%s'", name);
- e_error = TRUE;
-@@ -347,7 +348,8 @@ static void set_ipaddr(const char *addr)
-
- if (!inet_aton(addr, &cur_host.addr))
- e_error = TRUE;
-- cur_host.mask.s_addr = ~0UL;
-+ cur_host.mask.s_addr = 0;
-+ cur_host.mask.s_addr = ~cur_host.mask.s_addr;
- }
-
- /*
diff --git a/meta/recipes-devtools/unfs3/unfs3/no-yywrap.patch b/meta/recipes-devtools/unfs3/unfs3/no-yywrap.patch
new file mode 100644
index 0000000000..e3496814d8
--- /dev/null
+++ b/meta/recipes-devtools/unfs3/unfs3/no-yywrap.patch
@@ -0,0 +1,14 @@
+Upstream-Status: Backport [https://github.com/unfs3/unfs3/commit/3fa0568e6ef96e045286afe18444bc28fe93962b]
+
+diff --git a/Config/exports.l b/Config/exports.l
+index 662603c..7e7c4fc 100644
+--- a/Config/exports.l
++++ b/Config/exports.l
+@@ -50,6 +50,7 @@ OLDNET {IP}"/"{IP}
+
+ %option nounput
+ %option noinput
++%option noyywrap
+
+ %%
+