diff options
author | Jeremy Allison <jra@samba.org> | 2002-09-11 01:05:22 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-09-11 01:05:22 +0000 |
commit | 99928976ea8994f1e759b652e6f06fdd86ffe853 (patch) | |
tree | 595ff4a1069aeb92accf4556fb3e25f65820b680 | |
parent | 6b956c8c1e55723788ede2cf9307456b38165a3b (diff) | |
download | samba-99928976ea8994f1e759b652e6f06fdd86ffe853.tar.gz samba-99928976ea8994f1e759b652e6f06fdd86ffe853.tar.bz2 samba-99928976ea8994f1e759b652e6f06fdd86ffe853.zip |
Ensure we've failed a lock with a lock denied message before automatically
pushing it onto the blocking queue.
Jeremy.
(This used to be commit 237e36124cedf0485deaff81f34688fa862c3317)
-rw-r--r-- | source3/include/smb_macros.h | 15 | ||||
-rw-r--r-- | source3/smbd/reply.c | 6 |
2 files changed, 12 insertions, 9 deletions
diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h index ccf151fab2..71d4bac795 100644 --- a/source3/include/smb_macros.h +++ b/source3/include/smb_macros.h @@ -80,17 +80,20 @@ #define FNUM_OK(fsp,c) (OPEN_FSP(fsp) && (c)==(fsp)->conn) #define CHECK_FSP(fsp,conn) if (!FNUM_OK(fsp,conn)) \ - return(ERROR_DOS(ERRDOS,ERRbadfid)); \ - else if((fsp)->fd == -1) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadfid)); \ + else if((fsp)->fd == -1) \ + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_READ(fsp) if (!(fsp)->can_read) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_WRITE(fsp) if (!(fsp)->can_write) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_ERROR(fsp) if (HAS_CACHED_ERROR(fsp)) \ - return(CACHED_ERROR(fsp)) + return(CACHED_ERROR(fsp)) + +#define ERROR_WAS_LOCK_DENIED(status) (NT_STATUS_EQUAL((status), NT_STATUS_LOCK_NOT_GRANTED) || \ + NT_STATUS_EQUAL((status), NT_STATUS_FILE_LOCK_CONFLICT) ) /* translates a connection number into a service number */ #define SNUM(conn) ((conn)?(conn)->service:-1) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 36f7c3a883..3fc9cf21fd 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1603,7 +1603,7 @@ int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length (SMB_BIG_UINT)numtoread, (SMB_BIG_UINT)startpos, WRITE_LOCK); if (NT_STATUS_V(status)) { - if (lp_blocking_locks(SNUM(conn))) { + if (lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it @@ -2425,7 +2425,7 @@ int reply_lock(connection_struct *conn, status = do_lock_spin(fsp, conn, SVAL(inbuf,smb_pid), count, offset, WRITE_LOCK); if (NT_STATUS_V(status)) { - if (lp_blocking_locks(SNUM(conn))) { + if (lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it @@ -3860,7 +3860,7 @@ no oplock granted on this file (%s).\n", fsp->fnum, fsp->fsp_name)); status = do_lock_spin(fsp,conn,lock_pid, count,offset, ((locktype & 1) ? READ_LOCK : WRITE_LOCK)); if (NT_STATUS_V(status)) { - if ((lock_timeout != 0) && lp_blocking_locks(SNUM(conn))) { + if ((lock_timeout != 0) && lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it |