vfs_glusterfs changes to get rid of mutex use.

Jeremy Allison jra at samba.org
Wed Jan 21 12:04:22 MST 2015


On Mon, Jan 19, 2015 at 11:17:08PM -0500, Ira Cooper wrote:
> This patch removes all of the posix mutexes used in the previous GlusterFS
> AIO patch in favor of using a standard POSIX pipe.  This also simplifies
> the actual code, and makes our fork safety issues more apparent.
> 
> As part of this changeset, there is a basic set of "rules" around fork use
> and VFS modules.  I expect they will be wordsmithed, but the basic ideas
> are sound.
> 
> 1. A child process should never interfere with a parent process.
> 2. If you call into the VFS after it has been initialized in a child
> process, the behavior is "undefined" and could be as mean as someone
> putting "abort" in every single call.  Calling it in the parent is totally
> legal.
> 
> These rules also echo the similar conventions we use around "tevent" which
> also apply so VFS modules can use tevent.   You don't reuse tevent contexts
> in the child process :).
> 
> Feel free to correct me, this patch is based on those assumptions, as were
> previous patches.

OK, mostly LGTM but I'd suggest one (minor) change.

Right now you're creating a pipe, then having the
gluster threads call:

        sts = sys_write (write_fd, &req, sizeof(struct tevent_req *));
        if (sts < 0) {
                DEBUG(0,("\nWrite to pipe failed (%s)", strerror(errno)));
        }

to write (on a 64-bit box) 8 bytes of pointer
data into it. And on the read side:

        sts = sys_read(read_fd, &req, sizeof(struct tevent_req *));
        if (sts < 0) {
                DEBUG(0,("\nRead from pipe failed (%s)", strerror(errno)));
        }

        if (req) {
                tevent_req_done(req);
        }

However sys_read()/sys_write() are signal-safe, but don't
guarentee the entire data being written in one chunk.

For that you should use write_data()/read_data() which
are blocking calls that will not return unless theres
an IO error, or the complete amount of data is written/read.

Now I know this is under the catagory of "this can't happen"
bugs :-), but in order to ensure complete paranoia safety
I'd feel happier if the sys_read/sys_write calls were
replaced by read_data/write_data calls.

Cheers,

	Jeremy.


More information about the samba-technical mailing list