diff options
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/fileio.c | 5 | ||||
-rw-r--r-- | source3/smbd/files.c | 5 | ||||
-rw-r--r-- | source3/smbd/reply.c | 30 |
3 files changed, 22 insertions, 18 deletions
diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c index 7ab13f33f4..1e16627515 100644 --- a/source3/smbd/fileio.c +++ b/source3/smbd/fileio.c @@ -128,10 +128,9 @@ ssize_t write_file(files_struct *fsp,char *data,size_t n) sync a file ********************************************************************/ -void sys_sync_file(struct connection_struct *conn, files_struct *fsp) +void sys_sync_file(int fd) { #ifdef HAVE_FSYNC - if(lp_strict_sync(SNUM(conn))) - fsync(fsp->fd_ptr->fd); + fsync(fd); #endif } diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 8aca336bf8..d366fa1e1a 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -340,8 +340,9 @@ void file_sync_all(connection_struct *conn) for (fsp=Files;fsp;fsp=next) { next=fsp->next; - if (fsp->open && (conn == fsp->conn) && (fsp->fd_ptr != NULL)){ - conn->vfs_ops.sync(conn, fsp); + if (fsp->open && (conn == fsp->conn) && (fsp->fd_ptr != NULL) + && lp_strict_sync(SNUM(conn))){ + conn->vfs_ops.sync(fsp->fd_ptr->fd); } } } diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 51d737a784..b20236d6f4 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -2200,8 +2200,9 @@ int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int dum_s SSVAL(outbuf,smb_err,ERRdiskfull); } - if (lp_syncalways(SNUM(conn)) || write_through) - conn->vfs_ops.sync(conn, fsp); + if ((lp_syncalways(SNUM(conn)) || write_through) && + lp_strict_sync(SNUM(conn))) + conn->vfs_ops.sync(fsp->fd_ptr->fd); DEBUG(3,("writebraw2 fnum=%d start=%.0f num=%d wrote=%d\n", fsp->fnum, (double)startpos, numtowrite, total_written)); @@ -2250,8 +2251,8 @@ int reply_writeunlock(connection_struct *conn, char *inbuf,char *outbuf, int dum else nwritten = write_file(fsp,data,numtowrite); - if (lp_syncalways(SNUM(conn))) - conn->vfs_ops.sync(conn, fsp); + if (lp_syncalways(SNUM(conn)) && lp_strict_sync(SNUM(conn))) + conn->vfs_ops.sync(fsp->fd_ptr->fd); if(((nwritten == 0) && (numtowrite != 0))||(nwritten < 0)) return(UNIXERROR(ERRDOS,ERRnoaccess)); @@ -2303,8 +2304,8 @@ int reply_write(connection_struct *conn, char *inbuf,char *outbuf,int dum_size,i else nwritten = write_file(fsp,data,numtowrite); - if (lp_syncalways(SNUM(conn))) - conn->vfs_ops.sync(conn, fsp); + if (lp_syncalways(SNUM(conn)) && lp_strict_sync(SNUM(conn))) + conn->vfs_ops.sync(fsp->fd_ptr->fd); if(((nwritten == 0) && (numtowrite != 0))||(nwritten < 0)) return(UNIXERROR(ERRDOS,ERRnoaccess)); @@ -2387,8 +2388,9 @@ int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int leng DEBUG(3,("writeX fnum=%d num=%d wrote=%d\n", fsp->fnum, numtowrite, nwritten)); - if (lp_syncalways(SNUM(conn)) || write_through) - conn->vfs_ops.sync(conn, fsp); + if ((lp_syncalways(SNUM(conn)) || write_through) && + lp_strict_sync(SNUM(conn))) + conn->vfs_ops.sync(fsp->fd_ptr->fd); return chain_reply(inbuf,outbuf,length,bufsize); } @@ -2450,7 +2452,7 @@ int reply_flush(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, if (!fsp) { file_sync_all(conn); } else { - conn->vfs_ops.sync(conn, fsp); + conn->vfs_ops.sync(fsp->fd_ptr->fd); } DEBUG(3,("flush\n")); @@ -3931,8 +3933,9 @@ int reply_writebmpx(connection_struct *conn, char *inbuf,char *outbuf, int dum_s nwritten = write_file(fsp,data,numtowrite); - if(lp_syncalways(SNUM(conn)) || write_through) - conn->vfs_ops.sync(conn, fsp); + if((lp_syncalways(SNUM(conn)) || write_through) && + lp_strict_sync(SNUM(conn))) + conn->vfs_ops.sync(fsp->fd_ptr->fd); if(nwritten < (ssize_t)numtowrite) return(UNIXERROR(ERRHRD,ERRdiskfull)); @@ -4044,8 +4047,9 @@ int reply_writebs(connection_struct *conn, char *inbuf,char *outbuf, int dum_siz nwritten = write_file(fsp,data,numtowrite); - if(lp_syncalways(SNUM(conn)) || write_through) - conn->vfs_ops.sync(conn, fsp); + if((lp_syncalways(SNUM(conn)) || write_through) && + lp_strict_sync(SNUM(conn))) + conn->vfs_ops.sync(fsp->fd_ptr->fd); if (nwritten < (ssize_t)numtowrite) { |