[CIFS] Set copychunk defaults
authorSteve French <smfrench@gmail.com>
Fri, 15 Nov 2013 17:26:24 +0000 (11:26 -0600)
committerSteve French <smfrench@gmail.com>
Fri, 15 Nov 2013 21:27:22 +0000 (15:27 -0600)
Patch 2 of the copy chunk series (the final patch will
use these to handle copies of files larger than the chunk size.

We set the same defaults that Windows and Samba expect for
CopyChunk.

Signed-off-by: Steve French <smfrench@gmail.com>
Reviewed-by: David Disseldorp <ddiss@samba.org>
fs/cifs/cifsglob.h
fs/cifs/smb2pdu.c

index 50a6ca1bb521d768a1e97a1e433977c36f597cf7..d9ea7ada1378f95e48b08e286e38e2d080893993 100644 (file)
@@ -858,6 +858,9 @@ struct cifs_tcon {
        __le64 vol_create_time;
        __u32 ss_flags;         /* sector size flags */
        __u32 perf_sector_size; /* best sector size for perf */
+       __u32 max_chunks;
+       __u32 max_bytes_chunk;
+       __u32 max_bytes_copy;
 #endif /* CONFIG_CIFS_SMB2 */
 #ifdef CONFIG_CIFS_FSCACHE
        u64 resource_id;                /* server resource id */
index 8ab05b0d6778f99343d5740ff037ccbfad7bbef8..ca7f307ad97abc8d4a8e5c63174301a967527e0a 100644 (file)
@@ -717,6 +717,14 @@ static inline void cifs_stats_fail_inc(struct cifs_tcon *tcon, uint16_t code)
 
 #define MAX_SHARENAME_LENGTH (255 /* server */ + 80 /* share */ + 1 /* NULL */)
 
+/* These are similar values to what Windows uses */
+static inline void init_copy_chunk_defaults(struct cifs_tcon *tcon)
+{
+       tcon->max_chunks = 256;
+       tcon->max_bytes_chunk = 1048576;
+       tcon->max_bytes_copy = 16777216;
+}
+
 int
 SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
          struct cifs_tcon *tcon, const struct nls_table *cp)
@@ -818,7 +826,7 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
        if ((rsp->Capabilities & SMB2_SHARE_CAP_DFS) &&
            ((tcon->share_flags & SHI1005_FLAGS_DFS) == 0))
                cifs_dbg(VFS, "DFS capability contradicts DFS flag\n");
-
+       init_copy_chunk_defaults(tcon);
 tcon_exit:
        free_rsp_buf(resp_buftype, rsp);
        kfree(unc_path);