rpms/autofs/devel autofs-5.0.3-add-missing-uris-list-locking.patch, NONE, 1.1 autofs-5.0.3-fix-rootless-direct-multi-mount-expire.patch, NONE, 1.1 autofs-5.0.3-wait-submount-expire-complete.patch, NONE, 1.1 autofs.spec, 1.253, 1.254
Ian Kent
iankent at fedoraproject.org
Thu Oct 23 03:24:47 UTC 2008
- Previous message (by thread): rpms/ghc/devel .cvsignore, 1.13, 1.14 ghc-rpm-macros.ghc, 1.5, 1.6 ghc.spec, 1.52, 1.53
- Next message (by thread): rpms/nspr/devel .cvsignore, 1.16, 1.17 nspr.spec, 1.37, 1.38 sources, 1.17, 1.18
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: iankent
Update of /cvs/pkgs/rpms/autofs/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv27234
Modified Files:
autofs.spec
Added Files:
autofs-5.0.3-add-missing-uris-list-locking.patch
autofs-5.0.3-fix-rootless-direct-multi-mount-expire.patch
autofs-5.0.3-wait-submount-expire-complete.patch
Log Message:
* Thu Oct 23 2008 Ian Kent <ikent at redhat.com> - 5.0.3-28
- don't close file handle for rootless direct mounti-mount at mount.
- wait submount expire thread completion when expire successful.
- add inadvertantly ommitted server list locking in LDAP module.
autofs-5.0.3-add-missing-uris-list-locking.patch:
--- NEW FILE autofs-5.0.3-add-missing-uris-list-locking.patch ---
autofs-5.0.3 - add missing uris list locking
From: Ian Kent <raven at themaw.net>
Add inadvertantly ommitted server list locking in LDAP module.
---
include/lookup_ldap.h | 1 +
modules/lookup_ldap.c | 39 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 1 deletion(-)
--- autofs-5.0.3.orig/include/lookup_ldap.h
+++ autofs-5.0.3/include/lookup_ldap.h
@@ -54,6 +54,7 @@ struct lookup_context {
* sdns is the list of basdns to check, done in the order
* given in configuration.
*/
+ pthread_mutex_t uris_mutex;
struct list_head *uri;
char *cur_host;
struct ldap_searchdn *sdns;
--- autofs-5.0.3.orig/modules/lookup_ldap.c
+++ autofs-5.0.3/modules/lookup_ldap.c
@@ -122,6 +122,22 @@ int ldap_parse_page_control(LDAP *ldap,
}
#endif /* HAVE_LDAP_PARSE_PAGE_CONTROL */
+static void uris_mutex_lock(struct lookup_context *ctxt)
+{
+ int status = pthread_mutex_lock(&ctxt->uris_mutex);
+ if (status)
+ fatal(status);
+ return;
+}
+
+static void uris_mutex_unlock(struct lookup_context *ctxt)
+{
+ int status = pthread_mutex_unlock(&ctxt->uris_mutex);
+ if (status)
+ fatal(status);
+ return;
+}
+
int bind_ldap_anonymous(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt)
{
int rv;
@@ -627,16 +643,20 @@ static LDAP *find_server(unsigned logopt
LIST_HEAD(tmp);
/* Try each uri in list, add connect fails to tmp list */
+ uris_mutex_lock(ctxt);
p = ctxt->uri->next;
while(p != ctxt->uri) {
this = list_entry(p, struct ldap_uri, list);
- p = p->next;
+ uris_mutex_unlock(ctxt);
debug(logopt, "trying server %s", this->uri);
ldap = connect_to_server(logopt, this->uri, ctxt);
if (ldap) {
info(logopt, "connected to uri %s", this->uri);
+ uris_mutex_lock(ctxt);
break;
}
+ uris_mutex_lock(ctxt);
+ p = p->next;
list_del_init(&this->list);
list_add_tail(&this->list, &tmp);
}
@@ -648,6 +668,7 @@ static LDAP *find_server(unsigned logopt
list_splice(ctxt->uri, &tmp);
INIT_LIST_HEAD(ctxt->uri);
list_splice(&tmp, ctxt->uri);
+ uris_mutex_unlock(ctxt);
return ldap;
}
@@ -662,14 +683,18 @@ static LDAP *do_reconnect(unsigned logop
return ldap;
}
+ uris_mutex_lock(ctxt);
this = list_entry(ctxt->uri->next, struct ldap_uri, list);
+ uris_mutex_unlock(ctxt);
ldap = do_connect(logopt, this->uri, ctxt);
if (ldap)
return ldap;
/* Failed to connect, put at end of list */
+ uris_mutex_lock(ctxt);
list_del_init(&this->list);
list_add_tail(&this->list, ctxt->uri);
+ uris_mutex_unlock(ctxt);
#ifdef WITH_SASL
autofs_sasl_dispose(ctxt);
@@ -1203,6 +1228,8 @@ done:
static void free_context(struct lookup_context *ctxt)
{
+ int ret;
+
if (ctxt->schema) {
free(ctxt->schema->map_class);
free(ctxt->schema->map_attr);
@@ -1235,6 +1262,9 @@ static void free_context(struct lookup_c
free(ctxt->base);
if (ctxt->uri)
defaults_free_uris(ctxt->uri);
+ ret = pthread_mutex_destroy(&ctxt->uris_mutex);
+ if (ret)
+ fatal(ret);
if (ctxt->sdns)
defaults_free_searchdns(ctxt->sdns);
free(ctxt);
@@ -1286,6 +1316,13 @@ int lookup_init(const char *mapfmt, int
}
memset(ctxt, 0, sizeof(struct lookup_context));
+ ret = pthread_mutex_init(&ctxt->uris_mutex, NULL);
+ if (ret) {
+ error(LOGOPT_ANY, MODPREFIX "failed to init uris mutex");
+ free(ctxt);
+ return 1;
+ }
+
/* If a map type isn't explicitly given, parse it like sun entries. */
if (mapfmt == NULL)
mapfmt = MAPFMT_DEFAULT;
autofs-5.0.3-fix-rootless-direct-multi-mount-expire.patch:
--- NEW FILE autofs-5.0.3-fix-rootless-direct-multi-mount-expire.patch ---
autofs-5.0.3 - don't close direct root
From: Ian Kent <raven at themaw.net>
For direct mount multi-mounts with no real mount at their base we
need to leave the file handle open so they will be expired. This
patch corrects the check done at mount completion to do this so
they will be expired.
---
daemon/direct.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
--- autofs-5.0.3.orig/daemon/direct.c
+++ autofs-5.0.3/daemon/direct.c
@@ -1311,8 +1311,17 @@ static void *do_mount_direct(void *arg)
!master_find_submount(ap, mt.name)))
close_fd = 1;
cache_writelock(mt.mc);
- if (!close_fd && (me = cache_lookup_distinct(mt.mc, mt.name)))
- me->ioctlfd = mt.ioctlfd;
+ if ((me = cache_lookup_distinct(mt.mc, mt.name))) {
+ /*
+ * Careful here, we need to leave the file handle open
+ * for direct mount multi-mounts with no real mount at
+ * their base so they will be expired.
+ */
+ if (close_fd && me == me->multi)
+ close_fd = 0;
+ if (!close_fd)
+ me->ioctlfd = mt.ioctlfd;
+ }
send_ready(ap->logopt, mt.ioctlfd, mt.wait_queue_token);
cache_unlock(mt.mc);
if (close_fd)
autofs-5.0.3-wait-submount-expire-complete.patch:
--- NEW FILE autofs-5.0.3-wait-submount-expire-complete.patch ---
autofs-5.0.3 - wait submount expire complete
From: Ian Kent <raven at themaw.net>
When expiring a submount expires away and proceeds to shutdown we
can reach the end of the expire of the parent before the submount
goes away. This can cause an incomplete expire during shutdown in
some cases so, for the case the submount goes to state ST_SHUTDOWN,
we need to wait until the submount either goes away or fails to
shutdown before continuing.
---
lib/master.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
--- autofs-5.0.3.orig/lib/master.c
+++ autofs-5.0.3/lib/master.c
@@ -870,6 +870,29 @@ int master_notify_submount(struct autofs
st_wait_task(this, state, 0);
+ /*
+ * If our submount gets to state ST_SHUTDOWN we need to
+ * wait until it goes away or changes to ST_READY.
+ */
+ mounts_mutex_lock(ap);
+ st_mutex_lock();
+ while ((this = __master_find_submount(ap, path))) {
+ struct timespec t = { 0, 300000000 };
+ struct timespec r;
+
+ if (this->state != ST_SHUTDOWN)
+ break;
+
+ st_mutex_unlock();
+ mounts_mutex_unlock(ap);
+ while (nanosleep(&t, &r) == -1 && errno == EINTR)
+ memcpy(&t, &r, sizeof(struct timespec));
+ mounts_mutex_lock(ap);
+ st_mutex_lock();
+ }
+ st_mutex_unlock();
+ mounts_mutex_unlock(ap);
+
return ret;
}
Index: autofs.spec
===================================================================
RCS file: /cvs/pkgs/rpms/autofs/devel/autofs.spec,v
retrieving revision 1.253
retrieving revision 1.254
diff -u -r1.253 -r1.254
--- autofs.spec 10 Oct 2008 08:55:18 -0000 1.253
+++ autofs.spec 23 Oct 2008 03:24:17 -0000 1.254
@@ -4,7 +4,7 @@
Summary: A tool for automatically mounting and unmounting filesystems
Name: autofs
Version: 5.0.3
-Release: 26
+Release: 28
Epoch: 1
License: GPLv2+
Group: System Environment/Daemons
@@ -62,6 +62,9 @@
Patch50: autofs-5.0.3-map-type-in-map-name-fix.patch
Patch51: autofs-5.0.3-dont-readmap-on-hup-for-new-mount.patch
Patch52: autofs-5.0.3-nisplus-partial-and-free.patch
+Patch53: autofs-5.0.3-fix-rootless-direct-multi-mount-expire.patch
+Patch54: autofs-5.0.3-wait-submount-expire-complete.patch
+Patch55: autofs-5.0.3-add-missing-uris-list-locking.patch
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, libxml2-devel, cyrus-sasl-devel, openssl-devel module-init-tools util-linux nfs-utils e2fsprogs
Requires: kernel >= 2.6.17
@@ -155,6 +158,9 @@
%patch50 -p1
%patch51 -p1
%patch52 -p1
+%patch53 -p1
+%patch54 -p1
+%patch55 -p1
%build
#CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
@@ -207,6 +213,11 @@
%{_libdir}/autofs/
%changelog
+* Thu Oct 23 2008 Ian Kent <ikent at redhat.com> - 5.0.3-28
+- don't close file handle for rootless direct mounti-mount at mount.
+- wait submount expire thread completion when expire successful.
+- add inadvertantly ommitted server list locking in LDAP module.
+
* Fri Oct 10 2008 Ian Kent <ikent at redhat.com> - 5.0.3-26
- add map-type-in-map-name fix patch to sync with upstream and RHEL.
- don't readmap on HUP for new mount.
- Previous message (by thread): rpms/ghc/devel .cvsignore, 1.13, 1.14 ghc-rpm-macros.ghc, 1.5, 1.6 ghc.spec, 1.52, 1.53
- Next message (by thread): rpms/nspr/devel .cvsignore, 1.16, 1.17 nspr.spec, 1.37, 1.38 sources, 1.17, 1.18
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list