int rc = 0, stored_rc;
        struct cifsLockInfo *li, *tmp;
        struct cifs_tcon *tcon;
-       struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
        unsigned int num, max_num, max_buf;
        LOCKING_ANDX_RANGE *buf, *cur;
        int types[] = {LOCKING_ANDX_LARGE_FILES,
        xid = get_xid();
        tcon = tlink_tcon(cfile->tlink);
 
-       /* we are going to update can_cache_brlcks here - need a write access */
-       down_write(&cinode->lock_sem);
-       if (!cinode->can_cache_brlcks) {
-               up_write(&cinode->lock_sem);
-               free_xid(xid);
-               return rc;
-       }
-
        /*
         * Accessing maxBuf is racy with cifs_reconnect - need to store value
         * and check it for zero before using.
         */
        max_buf = tcon->ses->server->maxBuf;
        if (!max_buf) {
-               up_write(&cinode->lock_sem);
                free_xid(xid);
                return -EINVAL;
        }
                                                sizeof(LOCKING_ANDX_RANGE);
        buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
        if (!buf) {
-               up_write(&cinode->lock_sem);
                free_xid(xid);
                return -ENOMEM;
        }
                }
        }
 
-       cinode->can_cache_brlcks = false;
-       up_write(&cinode->lock_sem);
-
        kfree(buf);
        free_xid(xid);
        return rc;
 };
 
 static int
-cifs_push_posix_locks_locked(struct cifsFileInfo *cfile)
+cifs_push_posix_locks(struct cifsFileInfo *cfile)
 {
        struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
        struct file_lock *flock, **before;
 }
 
 static int
-cifs_push_posix_locks(struct cifsFileInfo *cfile)
+cifs_push_locks(struct cifsFileInfo *cfile)
 {
+       struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
        struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
+       struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
        int rc = 0;
 
        /* we are going to update can_cache_brlcks here - need a write access */
                up_write(&cinode->lock_sem);
                return rc;
        }
-       rc = cifs_push_posix_locks_locked(cfile);
-       cinode->can_cache_brlcks = false;
-       up_write(&cinode->lock_sem);
-       return rc;
-}
-
-static int
-cifs_push_locks(struct cifsFileInfo *cfile)
-{
-       struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
-       struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 
        if (cap_unix(tcon->ses) &&
            (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
            ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
-               return cifs_push_posix_locks(cfile);
+               rc = cifs_push_posix_locks(cfile);
+       else
+               rc = tcon->ses->server->ops->push_mand_locks(cfile);
 
-       return tcon->ses->server->ops->push_mand_locks(cfile);
+       cinode->can_cache_brlcks = false;
+       up_write(&cinode->lock_sem);
+       return rc;
 }
 
 static void
 
        struct cifs_fid_locks *fdlocks;
 
        xid = get_xid();
-       /* we are going to update can_cache_brlcks here - need a write access */
-       down_write(&cinode->lock_sem);
-       if (!cinode->can_cache_brlcks) {
-               up_write(&cinode->lock_sem);
-               free_xid(xid);
-               return rc;
-       }
 
        /*
         * Accessing maxBuf is racy with cifs_reconnect - need to store value
         */
        max_buf = tlink_tcon(cfile->tlink)->ses->server->maxBuf;
        if (!max_buf) {
-               up_write(&cinode->lock_sem);
                free_xid(xid);
                return -EINVAL;
        }
        max_num = max_buf / sizeof(struct smb2_lock_element);
        buf = kzalloc(max_num * sizeof(struct smb2_lock_element), GFP_KERNEL);
        if (!buf) {
-               up_write(&cinode->lock_sem);
                free_xid(xid);
                return -ENOMEM;
        }
                        rc = stored_rc;
        }
 
-       cinode->can_cache_brlcks = false;
        kfree(buf);
-
-       up_write(&cinode->lock_sem);
        free_xid(xid);
        return rc;
 }