mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
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@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Fri Jan 23 20:58:51 CET 2015 on sn-devel-104
This commit is contained in:
parent
fba69f4a89
commit
3b2d8bdbb1
@ -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)));
|
||||
|
Loading…
Reference in New Issue
Block a user