On 12/02/2011 02:35 PM, Pavel Shilovsky wrote: > 2011/12/2 Suresh Jayaraman <sjayaraman@xxxxxxxx>: >>>> fs/cifs/misc.c | 3 +++ >>>> 1 files changed, 3 insertions(+), 0 deletions(-) >>>> >>>> diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c >>>> index d27d4ec..7055827 100644 >>>> --- a/fs/cifs/misc.c >>>> +++ b/fs/cifs/misc.c >>>> @@ -584,6 +584,9 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv) >>>> pCifsInode->clientCanCacheAll = false; >>>> if (pSMB->OplockLevel == 0) >>>> pCifsInode->clientCanCacheRead = false; >>>> + else if (pSMB->OplockLevel == OPLOCK_READ) >>> pSMB->OplockLevel can either be 0 or 1 here but OPLOCK_READ is 3 - >>> this should be: >>> "else if (pSMB->OplockLevel)" >>> >>>> + pCifsInode->clientCanCacheRead = true; >>>> + >> >> Hmm.. if OplockLevel is OPLOCK_EXCLUSIVE, the we should set both >> clientCanCacheAll and clientCanCacheRead, no? > > OplockLevel field in the oplock break request (SMB_COM_LOCKING_ANDX > command) can be: > 0 - oplock downgrades to None > 1 - oplock downgrades to READ. > > (see http://msdn.microsoft.com/en-us/library/ee442004(v=PROT.13).aspx > for further details) > Ok thanks. Here's the updated patch. Greg, could you please consider this patch for next 2.6.32.y From: Suresh Jayaraman <sjayaraman@xxxxxxxx> The stable release 2.6.32.32 added the upstream commit 12fed00de963433128b5366a21a55808fab2f756. However, one of the hunks of the original patch seems missing from the stable backport which can be found here: http://permalink.gmane.org/gmane.linux.kernel.stable/5676 This hunk corresponds to the change in is_valid_oplock_break() at fs/cifs/misc.c. This patch backports the missing hunk and is against linux-2.6.32.y stable kernel. Cc: Steve French <sfrench@xxxxxxxxxx> Signed-off-by: Pavel Shilovsky <piastry@xxxxxxxxxxx> Signed-off-by: Suresh Jayaraman <sjayaraman@xxxxxxxx> --- fs/cifs/misc.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c index d27d4ec..95b82e8 100644 --- a/fs/cifs/misc.c +++ b/fs/cifs/misc.c @@ -584,6 +584,9 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv) pCifsInode->clientCanCacheAll = false; if (pSMB->OplockLevel == 0) pCifsInode->clientCanCacheRead = false; + else if (pSMB->OplockLevel) + pCifsInode->clientCanCacheRead = true; + rc = slow_work_enqueue(&netfile->oplock_break); if (rc) { cERROR(1, ("failed to enqueue oplock " -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html