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

tridge at samba.org tridge at samba.org
Mon May 2 15:58:54 GMT 2005


Author: tridge
Date: 2005-05-02 15:58:54 +0000 (Mon, 02 May 2005)
New Revision: 6579

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=6579

Log:
improved the handling of lock timeouts and cancels in the pvfs locking
code. On lock cancel don't retry the lock.



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


Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_lock.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_lock.c	2005-05-02 15:58:03 UTC (rev 6578)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_lock.c	2005-05-02 15:58:54 UTC (rev 6579)
@@ -104,7 +104,6 @@
 	int i;
 	BOOL timed_out;
 
-	/* we consider a cancel to be a timeout */
 	timed_out = (reason != PVFS_WAIT_EVENT);
 
 	locks = lck->lockx.in.locks + lck->lockx.in.ulock_cnt;
@@ -117,16 +116,21 @@
 
 	DLIST_REMOVE(f->pending_list, pending);
 
-	status = brl_lock(pvfs->brl_context,
-			  &f->handle->brl_locking_key,
-			  req->smbpid,
-			  f->fnum,
-			  locks[pending->pending_lock].offset,
-			  locks[pending->pending_lock].count,
-			  rw, NULL);
-
+	/* we don't retry on a cancel */
+	if (reason == PVFS_WAIT_CANCEL) {
+		status = NT_STATUS_CANCELLED;
+	} else {
+		status = brl_lock(pvfs->brl_context,
+				  &f->handle->brl_locking_key,
+				  req->smbpid,
+				  f->fnum,
+				  locks[pending->pending_lock].offset,
+				  locks[pending->pending_lock].count,
+				  rw, NULL);
+	}
 	if (NT_STATUS_IS_OK(status)) {
 		f->lock_count++;
+		timed_out = False;
 	}
 
 	/* if we have failed and timed out, or succeeded, then we
@@ -153,14 +157,10 @@
 	}
 
 	/* if we haven't timed out yet, then we can do more pending locks */
-	if (timed_out) {
-		pending = NULL;
+	if (rw == READ_LOCK) {
+		rw = PENDING_READ_LOCK;
 	} else {
-		if (rw == READ_LOCK) {
-			rw = PENDING_READ_LOCK;
-		} else {
-			rw = PENDING_WRITE_LOCK;
-		}
+		rw = PENDING_WRITE_LOCK;
 	}
 
 	/* we've now got the pending lock. try and get the rest, which might



More information about the samba-cvs mailing list