All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] attr: fix utime for symlink
@ 2018-10-12  2:51 Rui Wang
  2018-10-12 11:12 ` Burton, Ross
  0 siblings, 1 reply; 4+ messages in thread
From: Rui Wang @ 2018-10-12  2:51 UTC (permalink / raw)
  To: openembedded-core

Signed-off-by: Rui Wang <rui.wang@windriver.com>

cherry-pick of fa191666b with context for SRC_URI addition
modified to apply to current recipe.

Signed-off-by: Joe Slater <joe.slater@windriver.com>
---
 .../unfs3/0001-attr-fix-utime-for-symlink.patch    | 85 ++++++++++++++++++++++
 meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb   |  3 +-
 2 files changed, 87 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch

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 0000000..6957d10
--- /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_0.9.22.r497.bb b/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
index 8127e4a..5a81a8f 100644
--- a/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
+++ b/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
@@ -29,7 +29,8 @@ SRC_URI = "http://downloads.yoctoproject.org/mirror/sources/unfs3-0.9.22.r497.ta
            file://relative_max_socket_path_len.patch \
            file://tcp_no_delay.patch \
            file://0001-daemon.c-Libtirpc-porting-fixes.patch \
-           "
+           file://0001-attr-fix-utime-for-symlink.patch \
+          "
 SRC_URI[md5sum] = "2e43e471c77ade0331901c40b8f8e9a3"
 SRC_URI[sha256sum] = "21009468a9ba07b72ea93780d025a63ab4e55bf8fc3127803c296f0900fe1bac"
 
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] attr: fix utime for symlink
  2018-10-12  2:51 [PATCH] attr: fix utime for symlink Rui Wang
@ 2018-10-12 11:12 ` Burton, Ross
  2018-10-12 11:35   ` Richard Purdie
  0 siblings, 1 reply; 4+ messages in thread
From: Burton, Ross @ 2018-10-12 11:12 UTC (permalink / raw)
  To: rui.wang; +Cc: OE-core

Please change the shortlog to say that the patch is to unfs3 and not attr.

Ross

On Fri, 12 Oct 2018 at 04:10, Rui Wang <rui.wang@windriver.com> wrote:
>
> Signed-off-by: Rui Wang <rui.wang@windriver.com>
>
> cherry-pick of fa191666b with context for SRC_URI addition
> modified to apply to current recipe.
>
> Signed-off-by: Joe Slater <joe.slater@windriver.com>
> ---
>  .../unfs3/0001-attr-fix-utime-for-symlink.patch    | 85 ++++++++++++++++++++++
>  meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb   |  3 +-
>  2 files changed, 87 insertions(+), 1 deletion(-)
>  create mode 100644 meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch
>
> 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 0000000..6957d10
> --- /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_0.9.22.r497.bb b/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
> index 8127e4a..5a81a8f 100644
> --- a/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
> +++ b/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
> @@ -29,7 +29,8 @@ SRC_URI = "http://downloads.yoctoproject.org/mirror/sources/unfs3-0.9.22.r497.ta
>             file://relative_max_socket_path_len.patch \
>             file://tcp_no_delay.patch \
>             file://0001-daemon.c-Libtirpc-porting-fixes.patch \
> -           "
> +           file://0001-attr-fix-utime-for-symlink.patch \
> +          "
>  SRC_URI[md5sum] = "2e43e471c77ade0331901c40b8f8e9a3"
>  SRC_URI[sha256sum] = "21009468a9ba07b72ea93780d025a63ab4e55bf8fc3127803c296f0900fe1bac"
>
> --
> 1.9.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] attr: fix utime for symlink
  2018-10-12 11:12 ` Burton, Ross
@ 2018-10-12 11:35   ` Richard Purdie
  0 siblings, 0 replies; 4+ messages in thread
From: Richard Purdie @ 2018-10-12 11:35 UTC (permalink / raw)
  To: Burton, Ross, rui.wang; +Cc: OE-core

On Fri, 2018-10-12 at 12:12 +0100, Burton, Ross wrote:
> Please change the shortlog to say that the patch is to unfs3 and not
> attr.

I tweaked it in master-next to say that and added a commit message
description.

Cheers,

Richard



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] attr: fix utime for symlink
@ 2018-10-12  1:56 Rui Wang
  0 siblings, 0 replies; 4+ messages in thread
From: Rui Wang @ 2018-10-12  1:56 UTC (permalink / raw)
  To: openembedded-core

Signed-off-by: Rui Wang <rui.wang@windriver.com>

cherry-pick of fa191666b with context for SRC_URI addition
modified to apply to current recipe.

Signed-off-by: Joe Slater <joe.slater@windriver.com>
---
 .../unfs3/0001-attr-fix-utime-for-symlink.patch    | 85 ++++++++++++++++++++++
 meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb   |  3 +-
 2 files changed, 87 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/unfs3/unfs3/0001-attr-fix-utime-for-symlink.patch

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 0000000..c32a484
--- /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.
+
+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
+--
+1.9.1
diff --git a/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb b/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
index 8127e4a..5a81a8f 100644
--- a/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
+++ b/meta/recipes-devtools/unfs3/unfs3_0.9.22.r497.bb
@@ -29,7 +29,8 @@ SRC_URI = "http://downloads.yoctoproject.org/mirror/sources/unfs3-0.9.22.r497.ta
            file://relative_max_socket_path_len.patch \
            file://tcp_no_delay.patch \
            file://0001-daemon.c-Libtirpc-porting-fixes.patch \
-           "
+           file://0001-attr-fix-utime-for-symlink.patch \
+          "
 SRC_URI[md5sum] = "2e43e471c77ade0331901c40b8f8e9a3"
 SRC_URI[sha256sum] = "21009468a9ba07b72ea93780d025a63ab4e55bf8fc3127803c296f0900fe1bac"
 
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-10-12 11:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-12  2:51 [PATCH] attr: fix utime for symlink Rui Wang
2018-10-12 11:12 ` Burton, Ross
2018-10-12 11:35   ` Richard Purdie
  -- strict thread matches above, loose matches on Subject: below --
2018-10-12  1:56 Rui Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.