svn commit: samba r3241 - in branches/SAMBA_4_0/source/ntvfs/posix: .

tridge at samba.org tridge at samba.org
Tue Oct 26 06:17:52 GMT 2004


Author: tridge
Date: 2004-10-26 06:17:52 +0000 (Tue, 26 Oct 2004)
New Revision: 3241

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/ntvfs/posix&rev=3241&nolog=1

Log:
don't skip the read completely for a zero-length read, as it could give a lock conflict

Modified:
   branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c


Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c	2004-10-26 05:39:54 UTC (rev 3240)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c	2004-10-26 06:17:52 UTC (rev 3241)
@@ -33,6 +33,7 @@
 	ssize_t ret;
 	struct pvfs_file *f;
 	NTSTATUS status;
+	uint32_t maxcnt;
 
 	if (rd->generic.level != RAW_READ_READX) {
 		return ntvfs_map_read(req, rd, ntvfs);
@@ -51,15 +52,14 @@
 		return NT_STATUS_ACCESS_VIOLATION;
 	}
 
-	/* this matches w2k3 behaviour for attempted large reads */
-	if (rd->readx.in.maxcnt > UINT16_MAX) {
-		ret = 0;
-		goto done_read;
+	maxcnt = rd->readx.in.maxcnt;
+	if (maxcnt > UINT16_MAX) {
+		maxcnt = 0;
 	}
-	
+
 	status = pvfs_check_lock(pvfs, f, req->smbpid, 
 				 rd->readx.in.offset,
-				 rd->readx.in.maxcnt,
+				 maxcnt,
 				 READ_LOCK);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
@@ -67,13 +67,12 @@
 
 	ret = pread(f->fd, 
 		    rd->readx.out.data, 
-		    rd->readx.in.maxcnt,
+		    maxcnt,
 		    rd->readx.in.offset);
 	if (ret == -1) {
 		return pvfs_map_errno(pvfs, errno);
 	}
 
-done_read:
 	f->position = f->seek_offset = rd->readx.in.offset + ret;
 
 	rd->readx.out.nread = ret;



More information about the samba-cvs mailing list