Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
0ae0efad
Commit
0ae0efad
authored
Oct 10, 2005
by
Steve French
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[CIFS] Fix rsize calculation so that large readx flag is checked.
Signed-off-by: Steve French (sfrench@us.ibm.com)
parent
68058e75
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
8 deletions
+28
-8
fs/cifs/cifs_debug.c
fs/cifs/cifs_debug.c
+1
-1
fs/cifs/connect.c
fs/cifs/connect.c
+24
-5
fs/cifs/file.c
fs/cifs/file.c
+3
-2
No files found.
fs/cifs/cifs_debug.c
View file @
0ae0efad
...
...
@@ -267,7 +267,7 @@ cifs_stats_read(char *buf, char **beginBuffer, off_t offset,
atomic_read
(
&
tcon
->
num_oplock_brks
));
buf
+=
item_length
;
length
+=
item_length
;
item_length
=
sprintf
(
buf
,
"
\n
Reads: %d Bytes %lld"
,
item_length
=
sprintf
(
buf
,
"
\n
Reads: %d Bytes
:
%lld"
,
atomic_read
(
&
tcon
->
num_reads
),
(
long
long
)(
tcon
->
bytes_read
));
buf
+=
item_length
;
...
...
fs/cifs/connect.c
View file @
0ae0efad
...
...
@@ -30,6 +30,7 @@
#include <linux/mempool.h>
#include <linux/delay.h>
#include <linux/completion.h>
#include <linux/pagevec.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
#include "cifspdu.h"
...
...
@@ -188,6 +189,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
server
->
server_RFC1001_name
);
}
if
(
rc
)
{
cERROR
(
1
,(
"reconnect error %d"
,
rc
));
msleep
(
3000
);
}
else
{
atomic_inc
(
&
tcpSesReconnectCount
);
...
...
@@ -469,6 +471,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
}
else
{
/* give server a second to
clean up before reconnect attempt */
cERROR
(
1
,(
"sleep before reconnect"
));
msleep
(
1000
);
/* always try 445 first on reconnect
since we get NACK on some if we ever
...
...
@@ -556,6 +559,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
dump_smb
(
smb_buffer
,
length
);
if
(
checkSMB
(
smb_buffer
,
smb_buffer
->
Mid
,
total_read
+
4
))
{
cERROR
(
1
,
(
"Bad SMB Received "
));
cifs_dump_mem
(
"smb: "
,
smb_buffer
,
48
);
continue
;
}
...
...
@@ -1383,7 +1387,9 @@ ipv4_connect(struct sockaddr_in *psin_server, struct socket **csocket,
the default. sock_setsockopt not used because it expects
user space buffer */
(
*
csocket
)
->
sk
->
sk_rcvtimeo
=
7
*
HZ
;
cERROR
(
1
,(
"sndbuf %d rcvbuf %d reset to 200K each"
,(
*
csocket
)
->
sk
->
sk_sndbuf
,
(
*
csocket
)
->
sk
->
sk_rcvbuf
));
(
*
csocket
)
->
sk
->
sk_sndbuf
=
300
*
1024
;
(
*
csocket
)
->
sk
->
sk_rcvbuf
=
200
*
1024
;
/* send RFC1001 sessinit */
if
(
psin_server
->
sin_port
==
htons
(
RFC1001_PORT
))
{
...
...
@@ -1736,11 +1742,20 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
/* search for existing tcon to this server share */
if
(
!
rc
)
{
if
((
volume_info
.
rsize
)
&&
(
volume_info
.
rsize
<=
CIFSMaxBufSize
))
if
(
volume_info
.
rsize
>
CIFSMaxBufSize
)
{
cERROR
(
1
,(
"rsize %d too large, using MaxBufSize"
,
volume_info
.
rsize
));
cifs_sb
->
rsize
=
CIFSMaxBufSize
;
}
else
if
((
volume_info
.
rsize
)
&&
(
volume_info
.
rsize
<=
CIFSMaxBufSize
))
cifs_sb
->
rsize
=
volume_info
.
rsize
;
else
cifs_sb
->
rsize
=
srvTcp
->
maxBuf
-
MAX_CIFS_HDR_SIZE
;
/* default */
if
(
volume_info
.
wsize
)
else
/* default */
cifs_sb
->
rsize
=
CIFSMaxBufSize
;
if
(
volume_info
.
wsize
>
PAGEVEC_SIZE
*
PAGE_CACHE_SIZE
)
{
cERROR
(
1
,(
"wsize %d too large using 4096 instead"
,
volume_info
.
wsize
));
cifs_sb
->
wsize
=
4096
;
}
else
if
(
volume_info
.
wsize
)
cifs_sb
->
wsize
=
volume_info
.
wsize
;
else
cifs_sb
->
wsize
=
CIFSMaxBufSize
;
/* default */
...
...
@@ -1895,6 +1910,10 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
cifs_sb
->
wsize
=
min
(
cifs_sb
->
wsize
,
(
tcon
->
ses
->
server
->
maxBuf
-
MAX_CIFS_HDR_SIZE
));
if
(
!
(
tcon
->
ses
->
capabilities
&
CAP_LARGE_READ_X
))
cifs_sb
->
rsize
=
min
(
cifs_sb
->
rsize
,
(
tcon
->
ses
->
server
->
maxBuf
-
MAX_CIFS_HDR_SIZE
));
}
/* volume_info.password is freed above when existing session found
...
...
fs/cifs/file.c
View file @
0ae0efad
...
...
@@ -855,7 +855,7 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
struct
kvec
iov
[
2
];
unsigned
int
len
;
len
=
min
(
cifs_sb
->
wsize
,
len
=
min
(
(
size_t
)
cifs_sb
->
wsize
,
write_size
-
total_written
);
/* iov[0] is reserved for smb header */
iov
[
1
].
iov_base
=
(
char
*
)
write_data
+
...
...
@@ -920,7 +920,8 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode)
((
open_file
->
pfile
->
f_flags
&
O_RDWR
)
||
(
open_file
->
pfile
->
f_flags
&
O_WRONLY
)))
{
read_unlock
(
&
GlobalSMBSeslock
);
if
(
open_file
->
invalidHandle
)
{
if
((
open_file
->
invalidHandle
)
&&
(
!
open_file
->
closePend
))
{
rc
=
cifs_reopen_file
(
&
cifs_inode
->
vfs_inode
,
open_file
->
pfile
,
FALSE
);
/* if it fails, try another handle - might be */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment