[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Fri Jan 23 12:59:03 MST 2015


The branch, master has been updated
       via  3b2d8bd vfs_glusterfs: Add comments to the pipe(2) code.
      from  fba69f4 selftest: Run krb5.kdc test against users with a UPN

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 3b2d8bdbb1851961536241d3aaaf6ac936964517
Author: Ira Cooper <ira at samba.org>
Date:   Thu Jan 22 17:14:31 2015 -0500

    vfs_glusterfs: Add comments to the pipe(2) code.
    
    The guarantees around read(2) and write(2) and pipes are critical
    to understanding this code.  Hopefully these comments will help.
    
    Signed-off-by: Ira Cooper <ira at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Fri Jan 23 20:58:51 CET 2015 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/vfs_glusterfs.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c
index 04314f2..e0cc85c 100644
--- a/source3/modules/vfs_glusterfs.c
+++ b/source3/modules/vfs_glusterfs.c
@@ -521,6 +521,13 @@ static void aio_glusterfs_done(glfs_fd_t *fd, ssize_t ret, void *data)
 	 * be called here, as it is not designed to be executed
 	 * in the multithread environment, tevent_req_done() must be
 	 * executed from the smbd main thread.
+	 *
+	 * write(2) on pipes with sizes under _POSIX_PIPE_BUF
+	 * in size is atomic, without this, the use op pipes in this
+	 * code would not work.
+	 *
+	 * sys_write is a thin enough wrapper around write(2)
+	 * that we can trust it here.
 	 */
 
 	sts = sys_write(write_fd, &req, sizeof(struct tevent_req *));
@@ -541,6 +548,16 @@ static void aio_tevent_fd_done(struct tevent_context *event_ctx,
 	struct tevent_req *req = NULL;
 	int sts = 0;
 
+	/*
+	 * read(2) on pipes is atomic if the needed data is available
+	 * in the pipe, per SUS and POSIX.  Because we always write
+	 * to the pipe in sizeof(struct tevent_req *) chunks, we can
+	 * always read in those chunks, atomically.
+	 *
+	 * sys_read is a thin enough wrapper around read(2) that we
+	 * can trust it here.
+	 */
+
 	sts = sys_read(read_fd, &req, sizeof(struct tevent_req *));
 	if (sts < 0) {
 		DEBUG(0,("\nRead from pipe failed (%s)", strerror(errno)));


-- 
Samba Shared Repository


More information about the samba-cvs mailing list