Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
etercifs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
etercifs
Commits
eb3138e4
Commit
eb3138e4
authored
Dec 23, 2014
by
Pavel Shilovsky
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update 3.16 sources from stable (v3.16.7)
parent
0ad3dea7
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
53 additions
and
25 deletions
+53
-25
cifsglob.h
sources/3.16/cifsglob.h
+2
-5
file.c
sources/3.16/file.c
+3
-3
inode.c
sources/3.16/inode.c
+9
-0
link.c
sources/3.16/link.c
+6
-2
readdir.c
sources/3.16/readdir.c
+3
-3
smb1ops.c
sources/3.16/smb1ops.c
+8
-1
smb2file.c
sources/3.16/smb2file.c
+1
-1
smb2inode.c
sources/3.16/smb2inode.c
+1
-1
smb2maperror.c
sources/3.16/smb2maperror.c
+4
-2
smb2ops.c
sources/3.16/smb2ops.c
+10
-1
smb2pdu.c
sources/3.16/smb2pdu.c
+6
-6
No files found.
sources/3.16/cifsglob.h
View file @
eb3138e4
...
...
@@ -70,11 +70,6 @@
#define SERVER_NAME_LENGTH 40
#define SERVER_NAME_LEN_WITH_NULL (SERVER_NAME_LENGTH + 1)
/* used to define string lengths for reversing unicode strings */
/* (256+1)*2 = 514 */
/* (max path length + 1 for null) * 2 for unicode */
#define MAX_NAME 514
/* SMB echo "timeout" -- FIXME: tunable? */
#define SMB_ECHO_INTERVAL (60 * HZ)
...
...
@@ -404,6 +399,8 @@ struct smb_version_operations {
const
struct
cifs_fid
*
,
u32
*
);
int
(
*
set_acl
)(
struct
cifs_ntsd
*
,
__u32
,
struct
inode
*
,
const
char
*
,
int
);
/* check if we need to issue closedir */
bool
(
*
dir_needs_close
)(
struct
cifsFileInfo
*
);
};
struct
smb_version_values
{
...
...
sources/3.16/file.c
View file @
eb3138e4
...
...
@@ -770,7 +770,7 @@ int cifs_closedir(struct inode *inode, struct file *file)
cifs_dbg
(
FYI
,
"Freeing private data in close dir
\n
"
);
spin_lock
(
&
cifs_file_list_lock
);
if
(
!
cfile
->
srch_inf
.
endOfSearch
&&
!
cfile
->
invalidHandle
)
{
if
(
server
->
ops
->
dir_needs_close
(
cfile
)
)
{
cfile
->
invalidHandle
=
true
;
spin_unlock
(
&
cifs_file_list_lock
);
if
(
server
->
ops
->
close_dir
)
...
...
@@ -2831,7 +2831,7 @@ cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
total_read
+=
result
;
}
return
total_read
>
0
?
total_read
:
result
;
return
total_read
>
0
&&
result
!=
-
EAGAIN
?
total_read
:
result
;
}
ssize_t
cifs_user_readv
(
struct
kiocb
*
iocb
,
struct
iov_iter
*
to
)
...
...
@@ -3239,7 +3239,7 @@ cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
total_read
+=
result
;
}
return
total_read
>
0
?
total_read
:
result
;
return
total_read
>
0
&&
result
!=
-
EAGAIN
?
total_read
:
result
;
}
static
int
cifs_readpages
(
struct
file
*
file
,
struct
address_space
*
mapping
,
...
...
sources/3.16/inode.c
View file @
eb3138e4
...
...
@@ -1715,6 +1715,9 @@ cifs_rename(struct inode *source_dir, struct dentry *source_dentry,
unlink_target:
/* Try unlinking the target dentry if it's not negative */
if
(
target_dentry
->
d_inode
&&
(
rc
==
-
EACCES
||
rc
==
-
EEXIST
))
{
if
(
d_is_dir
(
target_dentry
))
tmprc
=
cifs_rmdir
(
target_dir
,
target_dentry
);
else
tmprc
=
cifs_unlink
(
target_dir
,
target_dentry
);
if
(
tmprc
)
goto
cifs_rename_exit
;
...
...
@@ -1722,6 +1725,12 @@ unlink_target:
target_dentry
,
to_name
);
}
/* force revalidate to go get info when needed */
CIFS_I
(
source_dir
)
->
time
=
CIFS_I
(
target_dir
)
->
time
=
0
;
source_dir
->
i_ctime
=
source_dir
->
i_mtime
=
target_dir
->
i_ctime
=
target_dir
->
i_mtime
=
current_fs_time
(
source_dir
->
i_sb
);
cifs_rename_exit:
kfree
(
info_buf_source
);
kfree
(
from_name
);
...
...
sources/3.16/link.c
View file @
eb3138e4
...
...
@@ -213,8 +213,12 @@ create_mf_symlink(const unsigned int xid, struct cifs_tcon *tcon,
if
(
rc
)
goto
out
;
rc
=
tcon
->
ses
->
server
->
ops
->
create_mf_symlink
(
xid
,
tcon
,
cifs_sb
,
fromName
,
buf
,
&
bytes_written
);
if
(
tcon
->
ses
->
server
->
ops
->
create_mf_symlink
)
rc
=
tcon
->
ses
->
server
->
ops
->
create_mf_symlink
(
xid
,
tcon
,
cifs_sb
,
fromName
,
buf
,
&
bytes_written
);
else
rc
=
-
EOPNOTSUPP
;
if
(
rc
)
goto
out
;
...
...
sources/3.16/readdir.c
View file @
eb3138e4
...
...
@@ -593,11 +593,11 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon, loff_t pos,
/* close and restart search */
cifs_dbg
(
FYI
,
"search backing up - close and restart search
\n
"
);
spin_lock
(
&
cifs_file_list_lock
);
if
(
!
cfile
->
srch_inf
.
endOfSearch
&&
!
cfile
->
invalidHandle
)
{
if
(
server
->
ops
->
dir_needs_close
(
cfile
)
)
{
cfile
->
invalidHandle
=
true
;
spin_unlock
(
&
cifs_file_list_lock
);
if
(
server
->
ops
->
close
)
server
->
ops
->
close
(
xid
,
tcon
,
&
cfile
->
fid
);
if
(
server
->
ops
->
close
_dir
)
server
->
ops
->
close
_dir
(
xid
,
tcon
,
&
cfile
->
fid
);
}
else
spin_unlock
(
&
cifs_file_list_lock
);
if
(
cfile
->
srch_inf
.
ntwrk_buf_start
)
{
...
...
sources/3.16/smb1ops.c
View file @
eb3138e4
...
...
@@ -587,7 +587,7 @@ cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
tmprc
=
CIFS_open
(
xid
,
&
oparms
,
&
oplock
,
NULL
);
if
(
tmprc
==
-
EOPNOTSUPP
)
*
symlink
=
true
;
else
else
if
(
tmprc
==
0
)
CIFSSMBClose
(
xid
,
tcon
,
fid
.
netfid
);
}
...
...
@@ -1012,6 +1012,12 @@ cifs_is_read_op(__u32 oplock)
return
oplock
==
OPLOCK_READ
;
}
static
bool
cifs_dir_needs_close
(
struct
cifsFileInfo
*
cfile
)
{
return
!
cfile
->
srch_inf
.
endOfSearch
&&
!
cfile
->
invalidHandle
;
}
struct
smb_version_operations
smb1_operations
=
{
.
send_cancel
=
send_nt_cancel
,
.
compare_fids
=
cifs_compare_fids
,
...
...
@@ -1081,6 +1087,7 @@ struct smb_version_operations smb1_operations = {
.
query_mf_symlink
=
cifs_query_mf_symlink
,
.
create_mf_symlink
=
cifs_create_mf_symlink
,
.
is_read_op
=
cifs_is_read_op
,
.
dir_needs_close
=
cifs_dir_needs_close
,
#ifdef CONFIG_CIFS_XATTR
.
query_all_EAs
=
CIFSSMBQAllEAs
,
.
set_EA
=
CIFSSMBSetEA
,
...
...
sources/3.16/smb2file.c
View file @
eb3138e4
...
...
@@ -50,7 +50,7 @@ smb2_open_file(const unsigned int xid, struct cifs_open_parms *oparms,
goto
out
;
}
smb2_data
=
kzalloc
(
sizeof
(
struct
smb2_file_all_info
)
+
MAX_NAME
*
2
,
smb2_data
=
kzalloc
(
sizeof
(
struct
smb2_file_all_info
)
+
PATH_MAX
*
2
,
GFP_KERNEL
);
if
(
smb2_data
==
NULL
)
{
rc
=
-
ENOMEM
;
...
...
sources/3.16/smb2inode.c
View file @
eb3138e4
...
...
@@ -132,7 +132,7 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
*
adjust_tz
=
false
;
*
symlink
=
false
;
smb2_data
=
kzalloc
(
sizeof
(
struct
smb2_file_all_info
)
+
MAX_NAME
*
2
,
smb2_data
=
kzalloc
(
sizeof
(
struct
smb2_file_all_info
)
+
PATH_MAX
*
2
,
GFP_KERNEL
);
if
(
smb2_data
==
NULL
)
return
-
ENOMEM
;
...
...
sources/3.16/smb2maperror.c
View file @
eb3138e4
...
...
@@ -214,7 +214,7 @@ static const struct status_to_posix_error smb2_error_map_table[] = {
{
STATUS_BREAKPOINT
,
-
EIO
,
"STATUS_BREAKPOINT"
},
{
STATUS_SINGLE_STEP
,
-
EIO
,
"STATUS_SINGLE_STEP"
},
{
STATUS_BUFFER_OVERFLOW
,
-
EIO
,
"STATUS_BUFFER_OVERFLOW"
},
{
STATUS_NO_MORE_FILES
,
-
E
IO
,
"STATUS_NO_MORE_FILES"
},
{
STATUS_NO_MORE_FILES
,
-
E
NODATA
,
"STATUS_NO_MORE_FILES"
},
{
STATUS_WAKE_SYSTEM_DEBUGGER
,
-
EIO
,
"STATUS_WAKE_SYSTEM_DEBUGGER"
},
{
STATUS_HANDLES_CLOSED
,
-
EIO
,
"STATUS_HANDLES_CLOSED"
},
{
STATUS_NO_INHERITANCE
,
-
EIO
,
"STATUS_NO_INHERITANCE"
},
...
...
@@ -256,6 +256,8 @@ static const struct status_to_posix_error smb2_error_map_table[] = {
{
STATUS_DLL_MIGHT_BE_INCOMPATIBLE
,
-
EIO
,
"STATUS_DLL_MIGHT_BE_INCOMPATIBLE"
},
{
STATUS_STOPPED_ON_SYMLINK
,
-
EOPNOTSUPP
,
"STATUS_STOPPED_ON_SYMLINK"
},
{
STATUS_IO_REPARSE_TAG_NOT_HANDLED
,
-
EOPNOTSUPP
,
"STATUS_REPARSE_NOT_HANDLED"
},
{
STATUS_DEVICE_REQUIRES_CLEANING
,
-
EIO
,
"STATUS_DEVICE_REQUIRES_CLEANING"
},
{
STATUS_DEVICE_DOOR_OPEN
,
-
EIO
,
"STATUS_DEVICE_DOOR_OPEN"
},
...
...
@@ -605,7 +607,7 @@ static const struct status_to_posix_error smb2_error_map_table[] = {
{
STATUS_MAPPED_FILE_SIZE_ZERO
,
-
EIO
,
"STATUS_MAPPED_FILE_SIZE_ZERO"
},
{
STATUS_TOO_MANY_OPENED_FILES
,
-
EMFILE
,
"STATUS_TOO_MANY_OPENED_FILES"
},
{
STATUS_CANCELLED
,
-
EIO
,
"STATUS_CANCELLED"
},
{
STATUS_CANNOT_DELETE
,
-
E
IO
,
"STATUS_CANNOT_DELETE"
},
{
STATUS_CANNOT_DELETE
,
-
E
ACCES
,
"STATUS_CANNOT_DELETE"
},
{
STATUS_INVALID_COMPUTER_NAME
,
-
EIO
,
"STATUS_INVALID_COMPUTER_NAME"
},
{
STATUS_FILE_DELETED
,
-
EIO
,
"STATUS_FILE_DELETED"
},
{
STATUS_SPECIAL_ACCOUNT
,
-
EIO
,
"STATUS_SPECIAL_ACCOUNT"
},
...
...
sources/3.16/smb2ops.c
View file @
eb3138e4
...
...
@@ -342,7 +342,7 @@ smb2_query_file_info(const unsigned int xid, struct cifs_tcon *tcon,
int
rc
;
struct
smb2_file_all_info
*
smb2_data
;
smb2_data
=
kzalloc
(
sizeof
(
struct
smb2_file_all_info
)
+
MAX_NAME
*
2
,
smb2_data
=
kzalloc
(
sizeof
(
struct
smb2_file_all_info
)
+
PATH_MAX
*
2
,
GFP_KERNEL
);
if
(
smb2_data
==
NULL
)
return
-
ENOMEM
;
...
...
@@ -1110,6 +1110,12 @@ smb3_parse_lease_buf(void *buf, unsigned int *epoch)
return
le32_to_cpu
(
lc
->
lcontext
.
LeaseState
);
}
static
bool
smb2_dir_needs_close
(
struct
cifsFileInfo
*
cfile
)
{
return
!
cfile
->
invalidHandle
;
}
struct
smb_version_operations
smb20_operations
=
{
.
compare_fids
=
smb2_compare_fids
,
.
setup_request
=
smb2_setup_request
,
...
...
@@ -1183,6 +1189,7 @@ struct smb_version_operations smb20_operations = {
.
create_lease_buf
=
smb2_create_lease_buf
,
.
parse_lease_buf
=
smb2_parse_lease_buf
,
.
clone_range
=
smb2_clone_range
,
.
dir_needs_close
=
smb2_dir_needs_close
,
};
struct
smb_version_operations
smb21_operations
=
{
...
...
@@ -1258,6 +1265,7 @@ struct smb_version_operations smb21_operations = {
.
create_lease_buf
=
smb2_create_lease_buf
,
.
parse_lease_buf
=
smb2_parse_lease_buf
,
.
clone_range
=
smb2_clone_range
,
.
dir_needs_close
=
smb2_dir_needs_close
,
};
struct
smb_version_operations
smb30_operations
=
{
...
...
@@ -1336,6 +1344,7 @@ struct smb_version_operations smb30_operations = {
.
parse_lease_buf
=
smb3_parse_lease_buf
,
.
clone_range
=
smb2_clone_range
,
.
validate_negotiate
=
smb3_validate_negotiate
,
.
dir_needs_close
=
smb2_dir_needs_close
,
};
struct
smb_version_values
smb20_values
=
{
...
...
sources/3.16/smb2pdu.c
View file @
eb3138e4
...
...
@@ -922,6 +922,7 @@ tcon_exit:
tcon_error_exit:
if
(
rsp
->
hdr
.
Status
==
STATUS_BAD_NETWORK_NAME
)
{
cifs_dbg
(
VFS
,
"BAD_NETWORK_NAME: %s
\n
"
,
tree
);
if
(
tcon
)
tcon
->
bad_network_name
=
true
;
}
goto
tcon_exit
;
...
...
@@ -1545,7 +1546,7 @@ SMB2_query_info(const unsigned int xid, struct cifs_tcon *tcon,
{
return
query_info
(
xid
,
tcon
,
persistent_fid
,
volatile_fid
,
FILE_ALL_INFORMATION
,
sizeof
(
struct
smb2_file_all_info
)
+
MAX_NAME
*
2
,
sizeof
(
struct
smb2_file_all_info
)
+
PATH_MAX
*
2
,
sizeof
(
struct
smb2_file_all_info
),
data
);
}
...
...
@@ -2141,6 +2142,10 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
rsp
=
(
struct
smb2_query_directory_rsp
*
)
iov
[
0
].
iov_base
;
if
(
rc
)
{
if
(
rc
==
-
ENODATA
&&
rsp
->
hdr
.
Status
==
STATUS_NO_MORE_FILES
)
{
srch_inf
->
endOfSearch
=
true
;
rc
=
0
;
}
cifs_stats_fail_inc
(
tcon
,
SMB2_QUERY_DIRECTORY_HE
);
goto
qdir_exit
;
}
...
...
@@ -2178,11 +2183,6 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
else
cifs_dbg
(
VFS
,
"illegal search buffer type
\n
"
);
if
(
rsp
->
hdr
.
Status
==
STATUS_NO_MORE_FILES
)
srch_inf
->
endOfSearch
=
1
;
else
srch_inf
->
endOfSearch
=
0
;
return
rc
;
qdir_exit:
...
...
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