[SCM] Samba Shared Repository - branch v3-6-test updated
Volker Lendecke
vlendec at samba.org
Fri Jan 21 04:58:06 MST 2011
The branch, v3-6-test has been updated
via d35fc97 s3: Fix a deadlock between smbd and ctdbd
from 1e67bf4 s3:vfs:shadow_copy2: fix indentation in _SHADOW2_NEXT_SMB_FNAME
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit d35fc973d966eebff204665a728a1639a19d198c
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jan 21 10:30:13 2011 +0100
s3: Fix a deadlock between smbd and ctdbd
Do the notification after we released the share mode lock. Inside notify_fname
we take out another tdb lock. With ctdb also accessing our databases, this can
lead to deadlocks. Putting this notify after the TALLOC_FREE(lck) above we
avoid locking two records simultaneously. Notifies are async and informational
only, so calling the notify_fname without holding the share mode lock should
not do any harm.
Autobuild-User: Volker Lendecke <vlendec at samba.org>
Autobuild-Date: Fri Jan 21 12:29:21 CET 2011 on sn-devel-104
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/close.c | 22 ++++++++++++++++++----
1 files changed, 18 insertions(+), 4 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index 00bcef0..a6610e5 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -473,10 +473,6 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
status = map_nt_error_from_unix(errno);
}
- notify_fname(conn, NOTIFY_ACTION_REMOVED,
- FILE_NOTIFY_CHANGE_FILE_NAME,
- fsp->fsp_name->base_name);
-
/* As we now have POSIX opens which can unlink
* with other open files we may have taken
* this code path with more than one share mode
@@ -495,6 +491,24 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
}
TALLOC_FREE(lck);
+
+ if (delete_file) {
+ /*
+ * Do the notification after we released the share
+ * mode lock. Inside notify_fname we take out another
+ * tdb lock. With ctdb also accessing our databases,
+ * this can lead to deadlocks. Putting this notify
+ * after the TALLOC_FREE(lck) above we avoid locking
+ * two records simultaneously. Notifies are async and
+ * informational only, so calling the notify_fname
+ * without holding the share mode lock should not do
+ * any harm.
+ */
+ notify_fname(conn, NOTIFY_ACTION_REMOVED,
+ FILE_NOTIFY_CHANGE_FILE_NAME,
+ fsp->fsp_name->base_name);
+ }
+
return status;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list