diff options
author | Jeremy Allison <jra@samba.org> | 2009-01-13 11:19:11 -0800 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2009-01-13 11:19:11 -0800 |
commit | 83c3b2809636cab704a54c2d699a907c6d07d199 (patch) | |
tree | 07eae5cb62d6d2e0c741ad8b63fce3099a94e4fa | |
parent | 4f079fe539ea3f41c5a9888279a6574760004098 (diff) | |
download | samba-83c3b2809636cab704a54c2d699a907c6d07d199.tar.gz samba-83c3b2809636cab704a54c2d699a907c6d07d199.tar.bz2 samba-83c3b2809636cab704a54c2d699a907c6d07d199.zip |
Fix bug #6019 File corruption in Clustered SMB/NFS environment managed via CTDB
Jeremy.
-rw-r--r-- | source3/lib/sendfile.c | 4 | ||||
-rw-r--r-- | source3/smbd/reply.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index d1b178577c..fb10cae2aa 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -65,7 +65,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of #endif } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) { - if (errno == ENOSYS) { + if (errno == ENOSYS || errno == EINVAL) { /* Ok - we're in a world of pain here. We just sent * the header, but the sendfile failed. We have to * emulate the sendfile at an upper layer before we @@ -143,7 +143,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of nwritten = sendfile(tofd, fromfd, &small_offset, small_total); } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) { - if (errno == ENOSYS) { + if (errno == ENOSYS || errno == EINVAL) { /* Ok - we're in a world of pain here. We just sent * the header, but the sendfile failed. We have to * emulate the sendfile at an upper layer before we diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 24f6cd30bd..96fb939e05 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -3179,9 +3179,9 @@ static void send_file_readX(connection_struct *conn, struct smb_request *req, setup_readX_header((char *)headerbuf, smb_maxcnt); if ((nread = SMB_VFS_SENDFILE(smbd_server_fd(), fsp, &header, startpos, smb_maxcnt)) == -1) { - /* Returning ENOSYS or EINVAL means no data at all was sent. + /* Returning ENOSYS means no data at all was sent. Do this as a normal read. */ - if (errno == ENOSYS || errno == EINVAL) { + if (errno == ENOSYS) { goto normal_read; } |