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
1dc1f94e
Commit
1dc1f94e
authored
Oct 14, 2009
by
Evgeny Sinelnikov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed fd duplicate problem with locks for 2.6.30
parent
77b1f340
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
45 additions
and
26 deletions
+45
-26
cifs_dfs_ref.c
sources/2.6.30/cifs_dfs_ref.c
+9
-3
cifsfs.c
sources/2.6.30/cifsfs.c
+3
-1
cifsglob.h
sources/2.6.30/cifsglob.h
+3
-2
cifsproto.h
sources/2.6.30/cifsproto.h
+3
-3
cifssmb.c
sources/2.6.30/cifssmb.c
+4
-4
connect.c
sources/2.6.30/connect.c
+10
-3
file.c
sources/2.6.30/file.c
+10
-8
misc.c
sources/2.6.30/misc.c
+1
-1
transport.c
sources/2.6.30/transport.c
+2
-1
No files found.
sources/2.6.30/cifs_dfs_ref.c
View file @
1dc1f94e
...
...
@@ -55,7 +55,7 @@ void cifs_dfs_release_automount_timer(void)
* i.e. strips from UNC trailing path that is not part of share
* name and fixup missing '\' in the begining of DFS node refferal
* if neccessary.
* Returns pointer to share name on success or
NULL
on error.
* Returns pointer to share name on success or
ERR_PTR
on error.
* Caller is responsible for freeing returned string.
*/
static
char
*
cifs_get_share_name
(
const
char
*
node_name
)
...
...
@@ -68,7 +68,7 @@ static char *cifs_get_share_name(const char *node_name)
UNC
=
kmalloc
(
len
+
2
/*for term null and additional \ if it's missed */
,
GFP_KERNEL
);
if
(
!
UNC
)
return
NULL
;
return
ERR_PTR
(
-
ENOMEM
)
;
/* get share name and server name */
if
(
node_name
[
1
]
!=
'\\'
)
{
...
...
@@ -87,7 +87,7 @@ static char *cifs_get_share_name(const char *node_name)
cERROR
(
1
,
(
"%s: no server name end in node name: %s"
,
__func__
,
node_name
));
kfree
(
UNC
);
return
NULL
;
return
ERR_PTR
(
-
EINVAL
)
;
}
/* find sharename end */
...
...
@@ -133,6 +133,12 @@ char *cifs_compose_mount_options(const char *sb_mountdata,
return
ERR_PTR
(
-
EINVAL
);
*
devname
=
cifs_get_share_name
(
ref
->
node_name
);
if
(
IS_ERR
(
*
devname
))
{
rc
=
PTR_ERR
(
*
devname
);
*
devname
=
NULL
;
goto
compose_mount_options_err
;
}
rc
=
dns_resolve_server_name_to_ip
(
*
devname
,
&
srvIP
);
if
(
rc
!=
0
)
{
cERROR
(
1
,
(
"%s: Failed to resolve server part of %s to IP: %d"
,
...
...
sources/2.6.30/cifsfs.c
View file @
1dc1f94e
...
...
@@ -970,6 +970,7 @@ static int cifs_oplock_thread(void *dummyarg)
struct
cifsTconInfo
*
pTcon
;
struct
inode
*
inode
;
__u16
netfid
;
__u32
netpid
;
int
rc
,
waitrc
=
0
;
set_freezable
();
...
...
@@ -989,6 +990,7 @@ static int cifs_oplock_thread(void *dummyarg)
pTcon
=
oplock_item
->
tcon
;
inode
=
oplock_item
->
pinode
;
netfid
=
oplock_item
->
netfid
;
netpid
=
oplock_item
->
netpid
;
spin_unlock
(
&
GlobalMid_Lock
);
DeleteOplockQEntry
(
oplock_item
);
/* can not grab inode sem here since it would
...
...
@@ -1026,7 +1028,7 @@ static int cifs_oplock_thread(void *dummyarg)
to server still is disconnected since oplock
already released by the server in that case */
if
(
!
pTcon
->
need_reconnect
)
{
rc
=
CIFSSMBLock
(
0
,
pTcon
,
netfid
,
rc
=
CIFSSMBLock
(
0
,
pTcon
,
netfid
,
netpid
,
0
/* len */
,
0
/* offset */
,
0
,
0
,
LOCKING_ANDX_OPLOCK_RELEASE
,
false
/* wait flag */
);
...
...
sources/2.6.30/cifsglob.h
View file @
1dc1f94e
...
...
@@ -448,6 +448,7 @@ struct oplock_q_entry {
struct
inode
*
pinode
;
struct
cifsTconInfo
*
tcon
;
__u16
netfid
;
__u32
netpid
;
};
/* for pending dnotify requests */
...
...
@@ -545,9 +546,9 @@ require use of the stronger protocol */
#define CIFSSEC_MUST_LANMAN 0x10010
#define CIFSSEC_MUST_PLNTXT 0x20020
#ifdef CONFIG_CIFS_UPCALL
#define CIFSSEC_MASK 0x
AF0A
F
/* allows weak security but also krb5 */
#define CIFSSEC_MASK 0x
BF0B
F
/* allows weak security but also krb5 */
#else
#define CIFSSEC_MASK 0x
A70A
7
/* current flags supported if weak */
#define CIFSSEC_MASK 0x
B70B
7
/* current flags supported if weak */
#endif
/* UPCALL */
#else
/* do not allow weak pw hash */
#ifdef CONFIG_CIFS_UPCALL
...
...
sources/2.6.30/cifsproto.h
View file @
1dc1f94e
...
...
@@ -86,7 +86,7 @@ extern int CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses,
const
int
stage
,
const
struct
nls_table
*
nls_cp
);
extern
__u16
GetNextMid
(
struct
TCP_Server_Info
*
server
);
extern
struct
oplock_q_entry
*
AllocOplockQEntry
(
struct
inode
*
,
u16
,
extern
struct
oplock_q_entry
*
AllocOplockQEntry
(
struct
inode
*
,
u16
,
__u32
,
struct
cifsTconInfo
*
);
extern
void
DeleteOplockQEntry
(
struct
oplock_q_entry
*
);
extern
void
DeleteTconOplockQEntries
(
struct
cifsTconInfo
*
);
...
...
@@ -310,12 +310,12 @@ extern int cifsConvertToUCS(__le16 *target, const char *source, int maxlen,
const
struct
nls_table
*
cp
,
int
mapChars
);
extern
int
CIFSSMBLock
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
const
__u16
netfid
,
const
__u64
len
,
const
__u16
netfid
,
const
__u
32
netpid
,
const
__u
64
len
,
const
__u64
offset
,
const
__u32
numUnlock
,
const
__u32
numLock
,
const
__u8
lockType
,
const
bool
waitFlag
);
extern
int
CIFSSMBPosixLock
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
const
__u16
smb_file_id
,
const
int
get_flag
,
const
__u16
smb_file_id
,
const
__u32
netpid
,
const
int
get_flag
,
const
__u64
len
,
struct
file_lock
*
,
const
__u16
lock_type
,
const
bool
waitFlag
);
extern
int
CIFSSMBTDis
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
);
...
...
sources/2.6.30/cifssmb.c
View file @
1dc1f94e
...
...
@@ -1689,7 +1689,7 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
int
CIFSSMBLock
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
const
__u16
smb_file_id
,
const
__u64
len
,
const
__u16
smb_file_id
,
const
__u
32
net_pid
,
const
__u
64
len
,
const
__u64
offset
,
const
__u32
numUnlock
,
const
__u32
numLock
,
const
__u8
lockType
,
const
bool
waitFlag
)
{
...
...
@@ -1723,7 +1723,7 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
pSMB
->
Fid
=
smb_file_id
;
/* netfid stays le */
if
((
numLock
!=
0
)
||
(
numUnlock
!=
0
))
{
pSMB
->
Locks
[
0
].
Pid
=
cpu_to_le16
(
current
->
tg
id
);
pSMB
->
Locks
[
0
].
Pid
=
cpu_to_le16
(
net_p
id
);
/* BB where to store pid high? */
pSMB
->
Locks
[
0
].
LengthLow
=
cpu_to_le32
((
u32
)
len
);
pSMB
->
Locks
[
0
].
LengthHigh
=
cpu_to_le32
((
u32
)(
len
>>
32
));
...
...
@@ -1757,7 +1757,7 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
int
CIFSSMBPosixLock
(
const
int
xid
,
struct
cifsTconInfo
*
tcon
,
const
__u16
smb_file_id
,
const
int
get_flag
,
const
__u64
len
,
const
__u16
smb_file_id
,
const
__u32
net_pid
,
const
int
get_flag
,
const
__u64
len
,
struct
file_lock
*
pLockData
,
const
__u16
lock_type
,
const
bool
waitFlag
)
{
...
...
@@ -1817,7 +1817,7 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
}
else
pSMB
->
Timeout
=
0
;
parm_data
->
pid
=
cpu_to_le32
(
current
->
tg
id
);
parm_data
->
pid
=
cpu_to_le32
(
net_p
id
);
parm_data
->
start
=
cpu_to_le64
(
pLockData
->
fl_start
);
parm_data
->
length
=
cpu_to_le64
(
len
);
/* normalize negative numbers */
...
...
sources/2.6.30/connect.c
View file @
1dc1f94e
...
...
@@ -2569,11 +2569,20 @@ remote_path_check:
if
(
mount_data
!=
mount_data_global
)
kfree
(
mount_data
);
mount_data
=
cifs_compose_mount_options
(
cifs_sb
->
mountdata
,
full_path
+
1
,
referrals
,
&
fake_devname
);
kfree
(
fake_devname
);
free_dfs_info_array
(
referrals
,
num_referrals
);
kfree
(
fake_devname
);
kfree
(
full_path
);
if
(
IS_ERR
(
mount_data
))
{
rc
=
PTR_ERR
(
mount_data
);
mount_data
=
NULL
;
goto
mount_fail_check
;
}
if
(
tcon
)
cifs_put_tcon
(
tcon
);
...
...
@@ -2581,8 +2590,6 @@ remote_path_check:
cifs_put_smb_ses
(
pSesInfo
);
cleanup_volume_info
(
&
volume_info
);
FreeXid
(
xid
);
kfree
(
full_path
);
referral_walks_count
++
;
goto
try_mount_again
;
}
...
...
sources/2.6.30/file.c
View file @
1dc1f94e
...
...
@@ -798,6 +798,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
bool
wait_flag
=
false
;
struct
cifs_sb_info
*
cifs_sb
;
struct
cifsTconInfo
*
tcon
;
__u32
netpid
;
__u16
netfid
;
__u8
lockType
=
LOCKING_ANDX_LARGE_FILES
;
bool
posix_locking
=
0
;
...
...
@@ -857,6 +858,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
FreeXid
(
xid
);
return
-
EBADF
;
}
netpid
=
((
struct
cifsFileInfo
*
)
file
->
private_data
)
->
pid
;
netfid
=
((
struct
cifsFileInfo
*
)
file
->
private_data
)
->
netfid
;
if
((
tcon
->
ses
->
capabilities
&
CAP_UNIX
)
&&
...
...
@@ -873,7 +875,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
posix_lock_type
=
CIFS_RDLCK
;
else
posix_lock_type
=
CIFS_WRLCK
;
rc
=
CIFSSMBPosixLock
(
xid
,
tcon
,
netfid
,
1
/* get */
,
rc
=
CIFSSMBPosixLock
(
xid
,
tcon
,
netfid
,
netpid
,
1
/* get */
,
length
,
pfLock
,
posix_lock_type
,
wait_flag
);
FreeXid
(
xid
);
...
...
@@ -881,10 +883,10 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
}
/* BB we could chain these into one lock request BB */
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
length
,
pfLock
->
fl_start
,
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
netpid
,
length
,
pfLock
->
fl_start
,
0
,
1
,
lockType
,
0
/* wait flag */
);
if
(
rc
==
0
)
{
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
length
,
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
netpid
,
length
,
pfLock
->
fl_start
,
1
/* numUnlock */
,
0
/* numLock */
,
lockType
,
0
/* wait flag */
);
...
...
@@ -901,12 +903,12 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
if
(
lockType
&
LOCKING_ANDX_SHARED_LOCK
)
{
pfLock
->
fl_type
=
F_WRLCK
;
}
else
{
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
length
,
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
netpid
,
length
,
pfLock
->
fl_start
,
0
,
1
,
lockType
|
LOCKING_ANDX_SHARED_LOCK
,
0
/* wait flag */
);
if
(
rc
==
0
)
{
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
netpid
,
length
,
pfLock
->
fl_start
,
1
,
0
,
lockType
|
LOCKING_ANDX_SHARED_LOCK
,
...
...
@@ -945,7 +947,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
if
(
numUnlock
==
1
)
posix_lock_type
=
CIFS_UNLCK
;
rc
=
CIFSSMBPosixLock
(
xid
,
tcon
,
netfid
,
0
/* set */
,
rc
=
CIFSSMBPosixLock
(
xid
,
tcon
,
netfid
,
netpid
,
0
/* set */
,
length
,
pfLock
,
posix_lock_type
,
wait_flag
);
}
else
{
...
...
@@ -953,7 +955,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
(
struct
cifsFileInfo
*
)
file
->
private_data
;
if
(
numLock
)
{
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
length
,
rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
netpid
,
length
,
pfLock
->
fl_start
,
0
,
numLock
,
lockType
,
wait_flag
);
...
...
@@ -975,7 +977,7 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
(
pfLock
->
fl_start
+
length
)
>=
(
li
->
offset
+
li
->
length
))
{
stored_rc
=
CIFSSMBLock
(
xid
,
tcon
,
netfid
,
netfid
,
netpid
,
li
->
length
,
li
->
offset
,
1
,
0
,
li
->
type
,
false
);
if
(
stored_rc
)
...
...
sources/2.6.30/misc.c
View file @
1dc1f94e
...
...
@@ -578,7 +578,7 @@ is_valid_oplock_break(struct smb_hdr *buf, struct TCP_Server_Info *srv)
pCifsInode
->
clientCanCacheRead
=
false
;
pCifsInode
->
oplockPending
=
true
;
AllocOplockQEntry
(
netfile
->
pInode
,
netfile
->
netfid
,
tcon
);
netfile
->
netfid
,
netfile
->
pid
,
tcon
);
cFYI
(
1
,
(
"about to wake up oplock thread"
));
if
(
oplockThread
)
wake_up_process
(
oplockThread
);
...
...
sources/2.6.30/transport.c
View file @
1dc1f94e
...
...
@@ -104,7 +104,7 @@ DeleteMidQEntry(struct mid_q_entry *midEntry)
}
struct
oplock_q_entry
*
AllocOplockQEntry
(
struct
inode
*
pinode
,
__u16
fid
,
struct
cifsTconInfo
*
tcon
)
AllocOplockQEntry
(
struct
inode
*
pinode
,
__u16
fid
,
__u32
pid
,
struct
cifsTconInfo
*
tcon
)
{
struct
oplock_q_entry
*
temp
;
if
((
pinode
==
NULL
)
||
(
tcon
==
NULL
))
{
...
...
@@ -119,6 +119,7 @@ AllocOplockQEntry(struct inode *pinode, __u16 fid, struct cifsTconInfo *tcon)
temp
->
pinode
=
pinode
;
temp
->
tcon
=
tcon
;
temp
->
netfid
=
fid
;
temp
->
netpid
=
pid
;
spin_lock
(
&
GlobalMid_Lock
);
list_add_tail
(
&
temp
->
qhead
,
&
GlobalOplock_Q
);
spin_unlock
(
&
GlobalMid_Lock
);
...
...
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