You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6: CIFS: Cleanup demupltiplex thread exiting code CIFS: Move mid search to a separate function CIFS: Move RFC1002 check to a separate function CIFS: Simplify socket reading in demultiplex thread CIFS: Move buffer allocation to a separate function cifs: remove unneeded variable initialization in cifs_reconnect_tcon cifs: simplify refcounting for oplock breaks cifs: fix compiler warning in CIFSSMBQAllEAs cifs: fix name parsing in CIFSSMBQAllEAs cifs: don't start signing too early cifs: trivial: goto out here is unnecessary cifs: advertise the right receive buffer size to the server
This commit is contained in:
+14
-2
@@ -87,9 +87,15 @@ int cifs_sign_smb(struct smb_hdr *cifs_pdu, struct TCP_Server_Info *server,
|
||||
if ((cifs_pdu == NULL) || (server == NULL))
|
||||
return -EINVAL;
|
||||
|
||||
if ((cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) == 0)
|
||||
if (!(cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) ||
|
||||
server->tcpStatus == CifsNeedNegotiate)
|
||||
return rc;
|
||||
|
||||
if (!server->session_estab) {
|
||||
strncpy(cifs_pdu->Signature.SecuritySignature, "BSRSPYL", 8);
|
||||
return rc;
|
||||
}
|
||||
|
||||
cifs_pdu->Signature.Sequence.SequenceNumber =
|
||||
cpu_to_le32(server->sequence_number);
|
||||
cifs_pdu->Signature.Sequence.Reserved = 0;
|
||||
@@ -178,9 +184,15 @@ int cifs_sign_smb2(struct kvec *iov, int n_vec, struct TCP_Server_Info *server,
|
||||
if ((cifs_pdu == NULL) || (server == NULL))
|
||||
return -EINVAL;
|
||||
|
||||
if ((cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) == 0)
|
||||
if (!(cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) ||
|
||||
server->tcpStatus == CifsNeedNegotiate)
|
||||
return rc;
|
||||
|
||||
if (!server->session_estab) {
|
||||
strncpy(cifs_pdu->Signature.SecuritySignature, "BSRSPYL", 8);
|
||||
return rc;
|
||||
}
|
||||
|
||||
cifs_pdu->Signature.Sequence.SequenceNumber =
|
||||
cpu_to_le32(server->sequence_number);
|
||||
cifs_pdu->Signature.Sequence.Reserved = 0;
|
||||
|
||||
@@ -86,24 +86,6 @@ extern mempool_t *cifs_sm_req_poolp;
|
||||
extern mempool_t *cifs_req_poolp;
|
||||
extern mempool_t *cifs_mid_poolp;
|
||||
|
||||
void
|
||||
cifs_sb_active(struct super_block *sb)
|
||||
{
|
||||
struct cifs_sb_info *server = CIFS_SB(sb);
|
||||
|
||||
if (atomic_inc_return(&server->active) == 1)
|
||||
atomic_inc(&sb->s_active);
|
||||
}
|
||||
|
||||
void
|
||||
cifs_sb_deactive(struct super_block *sb)
|
||||
{
|
||||
struct cifs_sb_info *server = CIFS_SB(sb);
|
||||
|
||||
if (atomic_dec_and_test(&server->active))
|
||||
deactivate_super(sb);
|
||||
}
|
||||
|
||||
static int
|
||||
cifs_read_super(struct super_block *sb)
|
||||
{
|
||||
|
||||
@@ -41,10 +41,6 @@ extern struct file_system_type cifs_fs_type;
|
||||
extern const struct address_space_operations cifs_addr_ops;
|
||||
extern const struct address_space_operations cifs_addr_ops_smallbuf;
|
||||
|
||||
/* Functions related to super block operations */
|
||||
extern void cifs_sb_active(struct super_block *sb);
|
||||
extern void cifs_sb_deactive(struct super_block *sb);
|
||||
|
||||
/* Functions related to inodes */
|
||||
extern const struct inode_operations cifs_dir_inode_ops;
|
||||
extern struct inode *cifs_root_iget(struct super_block *);
|
||||
|
||||
@@ -942,8 +942,6 @@ GLOBAL_EXTERN spinlock_t siduidlock;
|
||||
GLOBAL_EXTERN spinlock_t sidgidlock;
|
||||
|
||||
void cifs_oplock_break(struct work_struct *work);
|
||||
void cifs_oplock_break_get(struct cifsFileInfo *cfile);
|
||||
void cifs_oplock_break_put(struct cifsFileInfo *cfile);
|
||||
|
||||
extern const struct slow_work_ops cifs_oplock_break_ops;
|
||||
|
||||
|
||||
+4
-2
@@ -107,7 +107,7 @@ static void mark_open_files_invalid(struct cifs_tcon *pTcon)
|
||||
static int
|
||||
cifs_reconnect_tcon(struct cifs_tcon *tcon, int smb_command)
|
||||
{
|
||||
int rc = 0;
|
||||
int rc;
|
||||
struct cifs_ses *ses;
|
||||
struct TCP_Server_Info *server;
|
||||
struct nls_table *nls_codepage;
|
||||
@@ -5720,6 +5720,7 @@ CIFSSMBQAllEAs(const int xid, struct cifs_tcon *tcon,
|
||||
char *temp_ptr;
|
||||
char *end_of_smb;
|
||||
__u16 params, byte_count, data_offset;
|
||||
unsigned int ea_name_len = ea_name ? strlen(ea_name) : 0;
|
||||
|
||||
cFYI(1, "In Query All EAs path %s", searchName);
|
||||
QAllEAsRetry:
|
||||
@@ -5837,7 +5838,8 @@ QAllEAsRetry:
|
||||
}
|
||||
|
||||
if (ea_name) {
|
||||
if (strncmp(ea_name, temp_ptr, name_len) == 0) {
|
||||
if (ea_name_len == name_len &&
|
||||
strncmp(ea_name, temp_ptr, name_len) == 0) {
|
||||
temp_ptr += name_len + 1;
|
||||
rc = value_len;
|
||||
if (buf_size == 0)
|
||||
|
||||
+370
-337
File diff suppressed because it is too large
Load Diff
+2
-25
@@ -314,6 +314,8 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
||||
}
|
||||
spin_unlock(&cifs_file_list_lock);
|
||||
|
||||
cancel_work_sync(&cifs_file->oplock_break);
|
||||
|
||||
if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
|
||||
int xid, rc;
|
||||
|
||||
@@ -2418,31 +2420,6 @@ void cifs_oplock_break(struct work_struct *work)
|
||||
cinode->clientCanCacheRead ? 1 : 0);
|
||||
cFYI(1, "Oplock release rc = %d", rc);
|
||||
}
|
||||
|
||||
/*
|
||||
* We might have kicked in before is_valid_oplock_break()
|
||||
* finished grabbing reference for us. Make sure it's done by
|
||||
* waiting for cifs_file_list_lock.
|
||||
*/
|
||||
spin_lock(&cifs_file_list_lock);
|
||||
spin_unlock(&cifs_file_list_lock);
|
||||
|
||||
cifs_oplock_break_put(cfile);
|
||||
}
|
||||
|
||||
/* must be called while holding cifs_file_list_lock */
|
||||
void cifs_oplock_break_get(struct cifsFileInfo *cfile)
|
||||
{
|
||||
cifs_sb_active(cfile->dentry->d_sb);
|
||||
cifsFileInfo_get(cfile);
|
||||
}
|
||||
|
||||
void cifs_oplock_break_put(struct cifsFileInfo *cfile)
|
||||
{
|
||||
struct super_block *sb = cfile->dentry->d_sb;
|
||||
|
||||
cifsFileInfo_put(cfile);
|
||||
cifs_sb_deactive(sb);
|
||||
}
|
||||
|
||||
const struct address_space_operations cifs_addr_ops = {
|
||||
|
||||
+2
-9
@@ -585,15 +585,8 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv)
|
||||
|
||||
cifs_set_oplock_level(pCifsInode,
|
||||
pSMB->OplockLevel ? OPLOCK_READ : 0);
|
||||
/*
|
||||
* cifs_oplock_break_put() can't be called
|
||||
* from here. Get reference after queueing
|
||||
* succeeded. cifs_oplock_break() will
|
||||
* synchronize using cifs_file_list_lock.
|
||||
*/
|
||||
if (queue_work(system_nrt_wq,
|
||||
&netfile->oplock_break))
|
||||
cifs_oplock_break_get(netfile);
|
||||
queue_work(system_nrt_wq,
|
||||
&netfile->oplock_break);
|
||||
netfile->oplock_break_cancelled = false;
|
||||
|
||||
spin_unlock(&cifs_file_list_lock);
|
||||
|
||||
+2
-1
@@ -124,7 +124,8 @@ static __u32 cifs_ssetup_hdr(struct cifs_ses *ses, SESSION_SETUP_ANDX *pSMB)
|
||||
/* that we use in next few lines */
|
||||
/* Note that header is initialized to zero in header_assemble */
|
||||
pSMB->req.AndXCommand = 0xFF;
|
||||
pSMB->req.MaxBufferSize = cpu_to_le16(ses->server->maxBuf);
|
||||
pSMB->req.MaxBufferSize = cpu_to_le16(min_t(u32, CIFSMaxBufSize - 4,
|
||||
USHRT_MAX));
|
||||
pSMB->req.MaxMpxCount = cpu_to_le16(ses->server->maxReq);
|
||||
pSMB->req.VcNumber = get_next_vcnum(ses);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user