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
nexedi
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
Show 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,
...
@@ -267,7 +267,7 @@ cifs_stats_read(char *buf, char **beginBuffer, off_t offset,
atomic_read
(
&
tcon
->
num_oplock_brks
));
atomic_read
(
&
tcon
->
num_oplock_brks
));
buf
+=
item_length
;
buf
+=
item_length
;
length
+=
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
),
atomic_read
(
&
tcon
->
num_reads
),
(
long
long
)(
tcon
->
bytes_read
));
(
long
long
)(
tcon
->
bytes_read
));
buf
+=
item_length
;
buf
+=
item_length
;
...
...
fs/cifs/connect.c
View file @
0ae0efad
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#include <linux/mempool.h>
#include <linux/mempool.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/completion.h>
#include <linux/completion.h>
#include <linux/pagevec.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
#include <asm/processor.h>
#include "cifspdu.h"
#include "cifspdu.h"
...
@@ -188,6 +189,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
...
@@ -188,6 +189,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
server
->
server_RFC1001_name
);
server
->
server_RFC1001_name
);
}
}
if
(
rc
)
{
if
(
rc
)
{
cERROR
(
1
,(
"reconnect error %d"
,
rc
));
msleep
(
3000
);
msleep
(
3000
);
}
else
{
}
else
{
atomic_inc
(
&
tcpSesReconnectCount
);
atomic_inc
(
&
tcpSesReconnectCount
);
...
@@ -469,6 +471,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
...
@@ -469,6 +471,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
}
else
{
}
else
{
/* give server a second to
/* give server a second to
clean up before reconnect attempt */
clean up before reconnect attempt */
cERROR
(
1
,(
"sleep before reconnect"
));
msleep
(
1000
);
msleep
(
1000
);
/* always try 445 first on reconnect
/* always try 445 first on reconnect
since we get NACK on some if we ever
since we get NACK on some if we ever
...
@@ -556,6 +559,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
...
@@ -556,6 +559,7 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)
dump_smb
(
smb_buffer
,
length
);
dump_smb
(
smb_buffer
,
length
);
if
(
checkSMB
(
smb_buffer
,
smb_buffer
->
Mid
,
total_read
+
4
))
{
if
(
checkSMB
(
smb_buffer
,
smb_buffer
->
Mid
,
total_read
+
4
))
{
cERROR
(
1
,
(
"Bad SMB Received "
));
cERROR
(
1
,
(
"Bad SMB Received "
));
cifs_dump_mem
(
"smb: "
,
smb_buffer
,
48
);
continue
;
continue
;
}
}
...
@@ -1383,7 +1387,9 @@ ipv4_connect(struct sockaddr_in *psin_server, struct socket **csocket,
...
@@ -1383,7 +1387,9 @@ ipv4_connect(struct sockaddr_in *psin_server, struct socket **csocket,
the default. sock_setsockopt not used because it expects
the default. sock_setsockopt not used because it expects
user space buffer */
user space buffer */
(
*
csocket
)
->
sk
->
sk_rcvtimeo
=
7
*
HZ
;
(
*
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 */
/* send RFC1001 sessinit */
if
(
psin_server
->
sin_port
==
htons
(
RFC1001_PORT
))
{
if
(
psin_server
->
sin_port
==
htons
(
RFC1001_PORT
))
{
...
@@ -1736,11 +1742,20 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
...
@@ -1736,11 +1742,20 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
/* search for existing tcon to this server share */
/* search for existing tcon to this server share */
if
(
!
rc
)
{
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
;
cifs_sb
->
rsize
=
volume_info
.
rsize
;
else
else
/* default */
cifs_sb
->
rsize
=
srvTcp
->
maxBuf
-
MAX_CIFS_HDR_SIZE
;
/* default */
cifs_sb
->
rsize
=
CIFSMaxBufSize
;
if
(
volume_info
.
wsize
)
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
;
cifs_sb
->
wsize
=
volume_info
.
wsize
;
else
else
cifs_sb
->
wsize
=
CIFSMaxBufSize
;
/* default */
cifs_sb
->
wsize
=
CIFSMaxBufSize
;
/* default */
...
@@ -1895,6 +1910,10 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
...
@@ -1895,6 +1910,10 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
cifs_sb
->
wsize
=
min
(
cifs_sb
->
wsize
,
cifs_sb
->
wsize
=
min
(
cifs_sb
->
wsize
,
(
tcon
->
ses
->
server
->
maxBuf
-
(
tcon
->
ses
->
server
->
maxBuf
-
MAX_CIFS_HDR_SIZE
));
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
/* 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,
...
@@ -855,7 +855,7 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
struct
kvec
iov
[
2
];
struct
kvec
iov
[
2
];
unsigned
int
len
;
unsigned
int
len
;
len
=
min
(
cifs_sb
->
wsize
,
len
=
min
(
(
size_t
)
cifs_sb
->
wsize
,
write_size
-
total_written
);
write_size
-
total_written
);
/* iov[0] is reserved for smb header */
/* iov[0] is reserved for smb header */
iov
[
1
].
iov_base
=
(
char
*
)
write_data
+
iov
[
1
].
iov_base
=
(
char
*
)
write_data
+
...
@@ -920,7 +920,8 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode)
...
@@ -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_RDWR
)
||
(
open_file
->
pfile
->
f_flags
&
O_WRONLY
)))
{
(
open_file
->
pfile
->
f_flags
&
O_WRONLY
)))
{
read_unlock
(
&
GlobalSMBSeslock
);
read_unlock
(
&
GlobalSMBSeslock
);
if
(
open_file
->
invalidHandle
)
{
if
((
open_file
->
invalidHandle
)
&&
(
!
open_file
->
closePend
))
{
rc
=
cifs_reopen_file
(
&
cifs_inode
->
vfs_inode
,
rc
=
cifs_reopen_file
(
&
cifs_inode
->
vfs_inode
,
open_file
->
pfile
,
FALSE
);
open_file
->
pfile
,
FALSE
);
/* if it fails, try another handle - might be */
/* 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