[autofs] - some more upstream bug fixes.
Ian Kent
iankent at fedoraproject.org
Thu Oct 18 07:21:45 UTC 2012
commit a131fea5130da970c338fcf88f53becc7ec7ae44
Author: Ian Kent <ikent at redhat.com>
Date: Thu Oct 18 15:21:07 2012 +0800
- some more upstream bug fixes.
autofs-5.0.6-fix-recursive-mount-deadlock.patch | 78 ++++++++++++++++++++
...-5.0.6-increase-file-map-read-buffer-size.patch | 38 ++++++++++
autofs-5.0.7-handle-new-location-of-systemd.patch | 57 ++++++++++++++
autofs.spec | 13 +++-
4 files changed, 185 insertions(+), 1 deletions(-)
---
diff --git a/autofs-5.0.6-fix-recursive-mount-deadlock.patch b/autofs-5.0.6-fix-recursive-mount-deadlock.patch
new file mode 100644
index 0000000..e6549a7
--- /dev/null
+++ b/autofs-5.0.6-fix-recursive-mount-deadlock.patch
@@ -0,0 +1,78 @@
+autofs-5.0.6 - fix recursive mount deadlock
+
+From: Ian Kent <raven at themaw.net>
+
+Prior to the vfs-automount changes that went into 2.6.38
+and were finalized in 3.1 it was not possible to block
+path walks into multi-mounts whose root was covered by
+another mount. To deal with that a write lock was used
+to ensure the mount tree construction was completed. This
+restricts the types of recursively defined mount maps that
+can be used and can lead to a deadlock during lookup.
+
+Now that we can prevent processes walking into multi-mounts
+that are under construction we no longer need to use a
+write lock.
+
+Also, in the patch below, a cache writelock is changed to
+a read lock because a write lock isn't needed since the
+map cache entry isn't being updated.
+---
+
+ CHANGELOG | 1 +
+ daemon/direct.c | 14 ++++++++++++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 936c9ab..9cdad6e 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -12,6 +12,7 @@
+ - configure.in: allow cross compilation.
+ - README: update mailing list subscription info.
+ - allow non root user to check status.
++- fix recursive mount deadlock.
+
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/daemon/direct.c b/daemon/direct.c
+index 7e2f0d7..3e09c5d 100644
+--- a/daemon/direct.c
++++ b/daemon/direct.c
+@@ -1285,6 +1285,8 @@ int handle_packet_missing_direct(struct autofs_point *ap, autofs_packet_missing_
+ struct timespec wait;
+ struct timeval now;
+ int ioctlfd, len, state;
++ unsigned int kver_major = get_kver_major();
++ unsigned int kver_minor = get_kver_minor();
+
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &state);
+
+@@ -1297,8 +1299,16 @@ int handle_packet_missing_direct(struct autofs_point *ap, autofs_packet_missing_
+ * cache entry we will not be able to find the mapent. So
+ * we must take the source writelock to ensure the parent
+ * has mount is complete before we look for the entry.
++ *
++ * Since the vfs-automount kernel changes we can now block
++ * on covered mounts during mount tree construction so a
++ * write lock is no longer needed. So we now can handle a
++ * wider class of recursively define mount lookups.
+ */
+- master_source_writelock(ap->entry);
++ if (kver_major > 5 || (kver_major == 5 && kver_minor > 1))
++ master_source_readlock(ap->entry);
++ else
++ master_source_writelock(ap->entry);
+ map = ap->entry->maps;
+ while (map) {
+ /*
+@@ -1311,7 +1321,7 @@ int handle_packet_missing_direct(struct autofs_point *ap, autofs_packet_missing_
+ }
+
+ mc = map->mc;
+- cache_writelock(mc);
++ cache_readlock(mc);
+ me = cache_lookup_ino(mc, pkt->dev, pkt->ino);
+ if (me)
+ break;
diff --git a/autofs-5.0.6-increase-file-map-read-buffer-size.patch b/autofs-5.0.6-increase-file-map-read-buffer-size.patch
new file mode 100644
index 0000000..39b2221
--- /dev/null
+++ b/autofs-5.0.6-increase-file-map-read-buffer-size.patch
@@ -0,0 +1,38 @@
+autofs-5.0.6 - increase file map read buffer size
+
+From: Ian Kent <raven at themaw.net>
+
+The file map entry read buffer can be too small for larger
+multi-mount map entries so increase it.
+---
+
+ CHANGELOG | 1 +
+ include/automount.h | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 9cdad6e..3bdf8a4 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -13,6 +13,7 @@
+ - README: update mailing list subscription info.
+ - allow non root user to check status.
+ - fix recursive mount deadlock.
++- increase file map read buffer size.
+
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/include/automount.h b/include/automount.h
+index 561fcc2..37541f5 100644
+--- a/include/automount.h
++++ b/include/automount.h
+@@ -233,7 +233,7 @@ int rmdir_path(struct autofs_point *ap, const char *path, dev_t dev);
+ #define AUTOFS_LOOKUP_VERSION 5
+
+ #define KEY_MAX_LEN NAME_MAX
+-#define MAPENT_MAX_LEN 4095
++#define MAPENT_MAX_LEN 16384
+ #define PARSE_MAX_BUF KEY_MAX_LEN + MAPENT_MAX_LEN + 2
+
+ int lookup_nss_read_master(struct master *master, time_t age);
diff --git a/autofs-5.0.7-handle-new-location-of-systemd.patch b/autofs-5.0.7-handle-new-location-of-systemd.patch
new file mode 100644
index 0000000..1c26794
--- /dev/null
+++ b/autofs-5.0.7-handle-new-location-of-systemd.patch
@@ -0,0 +1,57 @@
+autofs-5.0.7 - Handle new location of systemd
+
+From: Frederic Crozat <fcrozat at suse.com>
+
+Some distributions are moving systemd unit files from /lib to
+/usr/lib, so we need to test both directories.
+
+edit: imk
+It occurs to me I've forgotten to check for the 64 bit variants
+of the directories, so add them as well.
+end edit: imk
+---
+
+ CHANGELOG | 1 +
+ aclocal.m4 | 2 +-
+ configure | 2 +-
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 3bdf8a4..8f6bb3a 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -14,6 +14,7 @@
+ - allow non root user to check status.
+ - fix recursive mount deadlock.
+ - increase file map read buffer size.
++- handle new location of systemd.
+
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/aclocal.m4 b/aclocal.m4
+index 1798c8b..47bca0c 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -234,7 +234,7 @@ AC_DEFUN([AF_WITH_SYSTEMD],
+ [if test "$withval" = yes; then
+ if test -z "$systemddir"; then
+ AC_MSG_CHECKING([location of the systemd unit files directory])
+- for systemd_d in /lib/systemd/system; do
++ for systemd_d in /usr/lib/systemd/system /usr/lib64/systemd/system /lib/systemd/system /lib64/systemd/system; do
+ if test -z "$systemddir"; then
+ if test -d "$systemd_d"; then
+ systemddir="$systemd_d"
+diff --git a/configure b/configure
+index ba3bba6..3722a46 100755
+--- a/configure
++++ b/configure
+@@ -2157,7 +2157,7 @@ if test "${with_systemd+set}" = set; then :
+ if test -z "$systemddir"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking location of the systemd unit files directory" >&5
+ $as_echo_n "checking location of the systemd unit files directory... " >&6; }
+- for systemd_d in /lib/systemd/system; do
++ for systemd_d in /usr/lib/systemd/system /usr/lib64/systemd/system /lib/systemd/system /lib64/systemd/system; do
+ if test -z "$systemddir"; then
+ if test -d "$systemd_d"; then
+ systemddir="$systemd_d"
diff --git a/autofs.spec b/autofs.spec
index bf34150..eeeef04 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -8,7 +8,7 @@
Summary: A tool for automatically mounting and unmounting filesystems
Name: autofs
Version: 5.0.7
-Release: 5%{?dist}
+Release: 6%{?dist}
Epoch: 1
License: GPLv2+
Group: System Environment/Daemons
@@ -27,6 +27,9 @@ Patch11: autofs-5.0.7-configure-in-allow-cross-compilation.patch
Patch12: autofs-5.0.7-README-update-mailing-list-subscription-info.patch
Patch13: autofs-5.0.7-allow-non-root-user-to-check-status.patch
Patch14: autofs-5.0.7-configure-allow-cross-compilation-update.patch
+Patch15: autofs-5.0.6-fix-recursive-mount-deadlock.patch
+Patch16: autofs-5.0.6-increase-file-map-read-buffer-size.patch
+Patch17: autofs-5.0.7-handle-new-location-of-systemd.patch
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%if %{with_systemd}
BuildRequires: systemd-units
@@ -97,6 +100,9 @@ echo %{version}-%{release} > .version
%patch12 -p1
%patch13 -p1
%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
%build
#CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
@@ -188,6 +194,11 @@ fi
%dir /etc/auto.master.d
%changelog
+* Thu Oct 18 2012 Ian Kent <ikent at redhat.com> - 1:5.0.7-6
+- fix recursive mount deadlock.
+- increase file map read buffer size.
+- handle new location of systemd.
+
* Tue Oct 15 2012 Ian Kent <ikent at redhat.com> - 1:5.0.7-5
- configure: allow cross compilation update.
- fix date in changelog entry.
More information about the scm-commits
mailing list