lkml.org 
[lkml]   [2018]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 183/328] smb3: check for and properly advertise directory lease support
    3.16.62-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Steve French <stfrench@microsoft.com>

    commit f801568332321e2b1e7a8bd26c3e4913a312a2ec upstream.

    Although servers will typically ignore unsupported features,
    we should advertise the support for directory leases (as
    Windows e.g. does) in the negotiate protocol capabilities we
    pass to the server, and should check for the server capability
    (CAP_DIRECTORY_LEASING) before sending a lease request for an
    open of a directory. This will prevent us from accidentally
    sending directory leases to SMB2.1 or SMB2 server for example.

    Signed-off-by: Steve French <stfrench@microsoft.com>
    Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
    [bwh: Backported to 3.16:
    - Drop changes to smb3any_values, smbdefault_values, smb311_values
    - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    --- a/fs/cifs/smb2ops.c
    +++ b/fs/cifs/smb2ops.c
    @@ -1433,7 +1433,7 @@ struct smb_version_values smb21_values =
    struct smb_version_values smb30_values = {
    .version_string = SMB30_VERSION_STRING,
    .protocol_id = SMB30_PROT_ID,
    - .req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU,
    + .req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_DIRECTORY_LEASING,
    .large_lock_type = 0,
    .exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
    .shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
    @@ -1453,7 +1453,7 @@ struct smb_version_values smb30_values =
    struct smb_version_values smb302_values = {
    .version_string = SMB302_VERSION_STRING,
    .protocol_id = SMB302_PROT_ID,
    - .req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU,
    + .req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_DIRECTORY_LEASING,
    .large_lock_type = 0,
    .exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,
    .shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,
    --- a/fs/cifs/smb2pdu.c
    +++ b/fs/cifs/smb2pdu.c
    @@ -1211,6 +1211,9 @@ SMB2_open(const unsigned int xid, struct
    if (!(server->capabilities & SMB2_GLOBAL_CAP_LEASING) ||
    *oplock == SMB2_OPLOCK_LEVEL_NONE)
    req->RequestedOplockLevel = *oplock;
    + else if (!(server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING) &&
    + (oparms->create_options & CREATE_NOT_FILE))
    + req->RequestedOplockLevel = *oplock; /* no srv lease support */
    else {
    rc = add_lease_context(server, iov, &num_iovecs,
    oparms->fid->lease_key, oplock);
    \
     
     \ /
      Last update: 2018-12-09 23:26    [W:3.726 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site