Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 574
b: refs/heads/master
c: cd63499
h: refs/heads/master
v: v3
  • Loading branch information
Steve French authored and Linus Torvalds committed Apr 29, 2005
1 parent 7ce6d88 commit 1aec0ec
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 275cde1a1f3880601509c851d72c82bb8d3ee67c
refs/heads/master: cd63499cbe37e53e6cc084c8a35d911a4613c797
2 changes: 2 additions & 0 deletions trunk/fs/cifs/CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Fix caching problem, in which readdir of directory containing a file
which was cached could cause the file's time stamp to be updated
without invalidating the readahead data (so we could get stale
file data on the client for that file even as the server copy changed).
Cleanup response processing so cifsd can not loop when abnormally
terminated.


Version 1.32
Expand Down
22 changes: 11 additions & 11 deletions trunk/fs/cifs/cifssmb.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ CIFSSMBTDis(const int xid, struct cifsTconInfo *tcon)
return rc;
} else {
smb_buffer_response = smb_buffer; /* BB removeme BB */
}
}
rc = SendReceive(xid, tcon->ses, smb_buffer, smb_buffer_response,
&length, 0);
if (rc)
Expand Down Expand Up @@ -2517,9 +2517,6 @@ CIFSFindFirst(const int xid, struct cifsTconInfo *tcon,
psrch_inf->srch_entries_start =
(char *) &pSMBr->hdr.Protocol +
le16_to_cpu(pSMBr->t2.DataOffset);
/* if(le16_to_cpu(pSMBr->t2.DataCount) != le16_to_cpu(pSMBr->t2.TotalDataCount)) {
cERROR(1,("DC: %d TDC: %d",pSMBr->t2.DataCount,pSMBr->t2.TotalDataCount));
} */ /* BB removeme BB */
parms = (T2_FFIRST_RSP_PARMS *)((char *) &pSMBr->hdr.Protocol +
le16_to_cpu(pSMBr->t2.ParameterOffset));

Expand All @@ -2531,7 +2528,6 @@ CIFSFindFirst(const int xid, struct cifsTconInfo *tcon,
psrch_inf->entries_in_buffer = le16_to_cpu(parms->SearchCount);
psrch_inf->index_of_last_entry =
psrch_inf->entries_in_buffer;
/*cFYI(1,("entries in buf %d index_of_last %d",psrch_inf->entries_in_buffer,psrch_inf->index_of_last_entry)); */ /* BB removeme BB */
*pnetfid = parms->SearchHandle;
} else {
cifs_buf_release(pSMB);
Expand Down Expand Up @@ -3451,11 +3447,13 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size,

cFYI(1, ("SetFileSize (via SetFileInfo) %lld",
(long long)size));
rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
(void **) &pSMBr);
rc = small_smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB);

if (rc)
return rc;

pSMBr = (struct smb_com_transaction2_sfi_rsp *)pSMB;

pSMB->hdr.Pid = cpu_to_le16((__u16)pid_of_opener);
pSMB->hdr.PidHigh = cpu_to_le16((__u16)(pid_of_opener >> 16));

Expand Down Expand Up @@ -3515,7 +3513,7 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size,
}

if (pSMB)
cifs_buf_release(pSMB);
cifs_small_buf_release(pSMB);

/* Note: On -EAGAIN error only caller can retry on handle based calls
since file handle passed in no longer valid */
Expand All @@ -3541,11 +3539,13 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, const FILE_BASIC_I
__u16 params, param_offset, offset, byte_count, count;

cFYI(1, ("Set Times (via SetFileInfo)"));
rc = smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB,
(void **) &pSMBr);
rc = small_smb_init(SMB_COM_TRANSACTION2, 15, tcon, (void **) &pSMB);

if (rc)
return rc;

pSMBr = (struct smb_com_transaction2_sfi_rsp *)pSMB;

/* At this point there is no need to override the current pid
with the pid of the opener, but that could change if we someday
use an existing handle (rather than opening one on the fly) */
Expand Down Expand Up @@ -3591,7 +3591,7 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon, const FILE_BASIC_I
cFYI(1,("Send error in Set Time (SetFileInfo) = %d",rc));
}

cifs_buf_release(pSMB);
cifs_small_buf_release(pSMB);

/* Note: On -EAGAIN error only caller can retry on handle based calls
since file handle passed in no longer valid */
Expand Down
19 changes: 10 additions & 9 deletions trunk/fs/cifs/connect.c
Original file line number Diff line number Diff line change
Expand Up @@ -544,15 +544,13 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
if ((mid_entry->mid == smb_buffer->Mid) &&
(mid_entry->midState == MID_REQUEST_SUBMITTED) &&
(mid_entry->command == smb_buffer->Command)) {
cFYI(1,("Found Mid 0x%x wake", mid_entry->mid));

if(check2ndT2(smb_buffer,server->maxBuf) > 0) {
/* We have a multipart transact2 resp */
isMultiRsp = TRUE;
if(mid_entry->resp_buf) {
/* merge response - fix up 1st*/
if(coalesce_t2(smb_buffer,
mid_entry->resp_buf)) {
isMultiRsp = TRUE;
break;
} else {
/* all parts received */
Expand All @@ -564,10 +562,10 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
/* BB maybe we can fix this up, switch
to already allocated large buffer? */
} else {
/* Have first buffer */
mid_entry->resp_buf =
smb_buffer;
mid_entry->largeBuf = 1;
isMultiRsp = TRUE;
bigbuf = NULL;
}
}
Expand All @@ -586,11 +584,14 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
}
spin_unlock(&GlobalMid_Lock);
if (task_to_wake) {
if(isLargeBuf)
bigbuf = NULL;
else
smallbuf = NULL;
/* smb buffer freed by user thread when done */
/* Was previous buf put in mpx struct for multi-rsp? */
if(!isMultiRsp) {
/* smb buffer will be freed by user thread */
if(isLargeBuf) {
bigbuf = NULL;
} else
smallbuf = NULL;
}
wake_up_process(task_to_wake);
} else if ((is_valid_oplock_break(smb_buffer) == FALSE)
&& (isMultiRsp == FALSE)) {
Expand Down

0 comments on commit 1aec0ec

Please sign in to comment.