6 smb3 client fixes, most also for stable
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmRd3pcACgkQiiy9cAdy T1FrEAwAj6M0DnI13diLdjZVs9WAVRIiu5Fk1l8oA6bco74UepbJjZmTf8K8G0pM fQDTXZWDa5g11tbYuXFb4Ue9Dv7hu4RuUthWZCxoDnKcvH00VtAtYplE1LJstWBh mZwHm8iEBRPs2oB1YZ7KnQ8kFSjs2VgwV2PQAI24QDP0QWTT4jtw/nPqLxKLxyef Rr9YkOK0LZPhhGEAZ5ABwkPH97U5CUMMwRTqhGDO/mm91FZ8sD+vAsqM7GdLU73w wGHp3M1RKBVBubNCgNT0uRMlnlqBcvoThqhYgJ6PYnS4uE23a2uLDNI8vj9LlMRo csoYdM+Kltpvki8hFIWiFxfHFfECHD6h/QOpRMSv9InU0ly6o7zwnl9VtuWcRyrM vyz3xnlI6wG6TCy1HGezq3HSaEbEbVpwLCxyG/xFiAHV/VdkmjmRUb0RJV4X3X8M /KUT+1wj0MAMmVUTIpIHuotRikScAPnP/NDMorIsgEUp/2TFh2m+FQZ15o401sGv 96G8v+9I =ax5r -----END PGP SIGNATURE----- Merge tag '6.4-rc1-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6 Pull cifs client fixes from Steve French: - fix for copy_file_range bug for very large files that are multiples of rsize - do not ignore "isolated transport" flag if set on share - set rasize default better - three fixes related to shutdown and freezing (fixes 4 xfstests, and closes deferred handles faster in some places that were missed) * tag '6.4-rc1-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: release leases for deferred close handles when freezing smb3: fix problem remounting a share after shutdown SMB3: force unmount was failing to close deferred close files smb3: improve parallel reads of large files do not reuse connection if share marked as isolated cifs: fix pcchunk length type in smb2_copychunk_range
This commit is contained in:
commit
fd88f147cb
|
@ -246,7 +246,7 @@ cifs_read_super(struct super_block *sb)
|
|||
if (cifs_sb->ctx->rasize)
|
||||
sb->s_bdi->ra_pages = cifs_sb->ctx->rasize / PAGE_SIZE;
|
||||
else
|
||||
sb->s_bdi->ra_pages = cifs_sb->ctx->rsize / PAGE_SIZE;
|
||||
sb->s_bdi->ra_pages = 2 * (cifs_sb->ctx->rsize / PAGE_SIZE);
|
||||
|
||||
sb->s_blocksize = CIFS_MAX_MSGSIZE;
|
||||
sb->s_blocksize_bits = 14; /* default 2**14 = CIFS_MAX_MSGSIZE */
|
||||
|
@ -744,6 +744,7 @@ static void cifs_umount_begin(struct super_block *sb)
|
|||
spin_unlock(&tcon->tc_lock);
|
||||
spin_unlock(&cifs_tcp_ses_lock);
|
||||
|
||||
cifs_close_all_deferred_files(tcon);
|
||||
/* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
|
||||
/* cancel_notify_requests(tcon); */
|
||||
if (tcon->ses && tcon->ses->server) {
|
||||
|
@ -759,6 +760,20 @@ static void cifs_umount_begin(struct super_block *sb)
|
|||
return;
|
||||
}
|
||||
|
||||
static int cifs_freeze(struct super_block *sb)
|
||||
{
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||
struct cifs_tcon *tcon;
|
||||
|
||||
if (cifs_sb == NULL)
|
||||
return 0;
|
||||
|
||||
tcon = cifs_sb_master_tcon(cifs_sb);
|
||||
|
||||
cifs_close_all_deferred_files(tcon);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
static int cifs_show_stats(struct seq_file *s, struct dentry *root)
|
||||
{
|
||||
|
@ -797,6 +812,7 @@ static const struct super_operations cifs_super_ops = {
|
|||
as opens */
|
||||
.show_options = cifs_show_options,
|
||||
.umount_begin = cifs_umount_begin,
|
||||
.freeze_fs = cifs_freeze,
|
||||
#ifdef CONFIG_CIFS_STATS2
|
||||
.show_stats = cifs_show_stats,
|
||||
#endif
|
||||
|
|
|
@ -2709,6 +2709,13 @@ cifs_match_super(struct super_block *sb, void *data)
|
|||
|
||||
spin_lock(&cifs_tcp_ses_lock);
|
||||
cifs_sb = CIFS_SB(sb);
|
||||
|
||||
/* We do not want to use a superblock that has been shutdown */
|
||||
if (CIFS_MOUNT_SHUTDOWN & cifs_sb->mnt_cifs_flags) {
|
||||
spin_unlock(&cifs_tcp_ses_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
tlink = cifs_get_tlink(cifs_sb_master_tlink(cifs_sb));
|
||||
if (tlink == NULL) {
|
||||
/* can not match superblock if tlink were ever null */
|
||||
|
|
|
@ -1682,7 +1682,7 @@ smb2_copychunk_range(const unsigned int xid,
|
|||
pcchunk->SourceOffset = cpu_to_le64(src_off);
|
||||
pcchunk->TargetOffset = cpu_to_le64(dest_off);
|
||||
pcchunk->Length =
|
||||
cpu_to_le32(min_t(u32, len, tcon->max_bytes_chunk));
|
||||
cpu_to_le32(min_t(u64, len, tcon->max_bytes_chunk));
|
||||
|
||||
/* Request server copy to target from src identified by key */
|
||||
kfree(retbuf);
|
||||
|
|
|
@ -1947,6 +1947,9 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
|
|||
init_copy_chunk_defaults(tcon);
|
||||
if (server->ops->validate_negotiate)
|
||||
rc = server->ops->validate_negotiate(xid, tcon);
|
||||
if (rc == 0) /* See MS-SMB2 2.2.10 and 3.2.5.5 */
|
||||
if (tcon->share_flags & SMB2_SHAREFLAG_ISOLATED_TRANSPORT)
|
||||
server->nosharesock = true;
|
||||
tcon_exit:
|
||||
|
||||
free_rsp_buf(resp_buftype, rsp);
|
||||
|
|
Loading…
Reference in New Issue