Ensure we don't prematurely clean out the bytes read.
authorJeremy Allison <jra@samba.org>
Wed, 31 Oct 2007 00:42:02 +0000 (17:42 -0700)
committerJeremy Allison <jra@samba.org>
Wed, 31 Oct 2007 00:42:02 +0000 (17:42 -0700)
Jeremy.
(This used to be commit 247675695dfbff503b5792de62f8bb1567ea2327)

source3/smbd/vfs.c

index c1c1939153db957bf32f81a0823f2e2ab3d7e3a5..21a12ae766a21b2ef248e9ef89951b577731fc3c 100644 (file)
@@ -428,12 +428,15 @@ ssize_t vfs_write_data(struct smb_request *req,
 
        if (req && req->unread_bytes) {
                SMB_ASSERT(req->unread_bytes == N);
-               req->unread_bytes = 0;
-               return SMB_VFS_RECVFILE(smbd_server_fd(),
+               ret = SMB_VFS_RECVFILE(smbd_server_fd(),
                                        fsp,
                                        fsp->fh->fd,
                                        (SMB_OFF_T)-1,
                                        N);
+               if (ret != -1) {
+                       req->unread_bytes = 0;
+               }
+               return ret;
        }
 
        while (total < N) {
@@ -460,12 +463,15 @@ ssize_t vfs_pwrite_data(struct smb_request *req,
 
        if (req && req->unread_bytes) {
                SMB_ASSERT(req->unread_bytes == N);
-               req->unread_bytes = 0;
-               return SMB_VFS_RECVFILE(smbd_server_fd(),
+               ret = SMB_VFS_RECVFILE(smbd_server_fd(),
                                        fsp,
                                        fsp->fh->fd,
                                        offset,
                                        N);
+               if (ret != -1) {
+                       req->unread_bytes = 0;
+               }
+               return ret;
        }
 
        while (total < N) {