Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
1f7f3342
Commit
1f7f3342
authored
Sep 15, 2009
by
Stephen Rothwell
Browse files
Options
Browse Files
Download
Plain Diff
Merge commit 'dlm/next'
parents
6ffc2a69
1329e3f2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
10 deletions
+16
-10
fs/dlm/lowcomms.c
fs/dlm/lowcomms.c
+16
-10
No files found.
fs/dlm/lowcomms.c
View file @
1f7f3342
...
@@ -106,6 +106,7 @@ struct connection {
...
@@ -106,6 +106,7 @@ struct connection {
#define CF_CONNECT_PENDING 3
#define CF_CONNECT_PENDING 3
#define CF_INIT_PENDING 4
#define CF_INIT_PENDING 4
#define CF_IS_OTHERCON 5
#define CF_IS_OTHERCON 5
#define CF_CLOSE 6
struct
list_head
writequeue
;
/* List of outgoing writequeue_entries */
struct
list_head
writequeue
;
/* List of outgoing writequeue_entries */
spinlock_t
writequeue_lock
;
spinlock_t
writequeue_lock
;
int
(
*
rx_action
)
(
struct
connection
*
);
/* What to do when active */
int
(
*
rx_action
)
(
struct
connection
*
);
/* What to do when active */
...
@@ -299,6 +300,8 @@ static void lowcomms_write_space(struct sock *sk)
...
@@ -299,6 +300,8 @@ static void lowcomms_write_space(struct sock *sk)
static
inline
void
lowcomms_connect_sock
(
struct
connection
*
con
)
static
inline
void
lowcomms_connect_sock
(
struct
connection
*
con
)
{
{
if
(
test_bit
(
CF_CLOSE
,
&
con
->
flags
))
return
;
if
(
!
test_and_set_bit
(
CF_CONNECT_PENDING
,
&
con
->
flags
))
if
(
!
test_and_set_bit
(
CF_CONNECT_PENDING
,
&
con
->
flags
))
queue_work
(
send_workqueue
,
&
con
->
swork
);
queue_work
(
send_workqueue
,
&
con
->
swork
);
}
}
...
@@ -926,10 +929,8 @@ static void tcp_connect_to_sock(struct connection *con)
...
@@ -926,10 +929,8 @@ static void tcp_connect_to_sock(struct connection *con)
goto
out_err
;
goto
out_err
;
memset
(
&
saddr
,
0
,
sizeof
(
saddr
));
memset
(
&
saddr
,
0
,
sizeof
(
saddr
));
if
(
dlm_nodeid_to_addr
(
con
->
nodeid
,
&
saddr
))
{
if
(
dlm_nodeid_to_addr
(
con
->
nodeid
,
&
saddr
))
sock_release
(
sock
);
goto
out_err
;
goto
out_err
;
}
sock
->
sk
->
sk_user_data
=
con
;
sock
->
sk
->
sk_user_data
=
con
;
con
->
rx_action
=
receive_from_sock
;
con
->
rx_action
=
receive_from_sock
;
...
@@ -1284,7 +1285,6 @@ out:
...
@@ -1284,7 +1285,6 @@ out:
static
void
send_to_sock
(
struct
connection
*
con
)
static
void
send_to_sock
(
struct
connection
*
con
)
{
{
int
ret
=
0
;
int
ret
=
0
;
ssize_t
(
*
sendpage
)
(
struct
socket
*
,
struct
page
*
,
int
,
size_t
,
int
);
const
int
msg_flags
=
MSG_DONTWAIT
|
MSG_NOSIGNAL
;
const
int
msg_flags
=
MSG_DONTWAIT
|
MSG_NOSIGNAL
;
struct
writequeue_entry
*
e
;
struct
writequeue_entry
*
e
;
int
len
,
offset
;
int
len
,
offset
;
...
@@ -1293,8 +1293,6 @@ static void send_to_sock(struct connection *con)
...
@@ -1293,8 +1293,6 @@ static void send_to_sock(struct connection *con)
if
(
con
->
sock
==
NULL
)
if
(
con
->
sock
==
NULL
)
goto
out_connect
;
goto
out_connect
;
sendpage
=
con
->
sock
->
ops
->
sendpage
;
spin_lock
(
&
con
->
writequeue_lock
);
spin_lock
(
&
con
->
writequeue_lock
);
for
(;;)
{
for
(;;)
{
e
=
list_entry
(
con
->
writequeue
.
next
,
struct
writequeue_entry
,
e
=
list_entry
(
con
->
writequeue
.
next
,
struct
writequeue_entry
,
...
@@ -1309,8 +1307,8 @@ static void send_to_sock(struct connection *con)
...
@@ -1309,8 +1307,8 @@ static void send_to_sock(struct connection *con)
ret
=
0
;
ret
=
0
;
if
(
len
)
{
if
(
len
)
{
ret
=
sendpage
(
con
->
sock
,
e
->
page
,
offset
,
len
,
ret
=
kernel_
sendpage
(
con
->
sock
,
e
->
page
,
offset
,
len
,
msg_flags
);
msg_flags
);
if
(
ret
==
-
EAGAIN
||
ret
==
0
)
{
if
(
ret
==
-
EAGAIN
||
ret
==
0
)
{
cond_resched
();
cond_resched
();
goto
out
;
goto
out
;
...
@@ -1370,6 +1368,13 @@ int dlm_lowcomms_close(int nodeid)
...
@@ -1370,6 +1368,13 @@ int dlm_lowcomms_close(int nodeid)
log_print
(
"closing connection to node %d"
,
nodeid
);
log_print
(
"closing connection to node %d"
,
nodeid
);
con
=
nodeid2con
(
nodeid
,
0
);
con
=
nodeid2con
(
nodeid
,
0
);
if
(
con
)
{
if
(
con
)
{
clear_bit
(
CF_CONNECT_PENDING
,
&
con
->
flags
);
clear_bit
(
CF_WRITE_PENDING
,
&
con
->
flags
);
set_bit
(
CF_CLOSE
,
&
con
->
flags
);
if
(
cancel_work_sync
(
&
con
->
swork
))
log_print
(
"canceled swork for node %d"
,
nodeid
);
if
(
cancel_work_sync
(
&
con
->
rwork
))
log_print
(
"canceled rwork for node %d"
,
nodeid
);
clean_one_writequeue
(
con
);
clean_one_writequeue
(
con
);
close_connection
(
con
,
true
);
close_connection
(
con
,
true
);
}
}
...
@@ -1395,9 +1400,10 @@ static void process_send_sockets(struct work_struct *work)
...
@@ -1395,9 +1400,10 @@ static void process_send_sockets(struct work_struct *work)
if
(
test_and_clear_bit
(
CF_CONNECT_PENDING
,
&
con
->
flags
))
{
if
(
test_and_clear_bit
(
CF_CONNECT_PENDING
,
&
con
->
flags
))
{
con
->
connect_action
(
con
);
con
->
connect_action
(
con
);
set_bit
(
CF_WRITE_PENDING
,
&
con
->
flags
);
}
}
clear_bit
(
CF_WRITE_PENDING
,
&
con
->
flags
);
if
(
test_and_clear_bit
(
CF_WRITE_PENDING
,
&
con
->
flags
))
send_to_sock
(
con
);
send_to_sock
(
con
);
}
}
...
...
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