Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
0a37c10e
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
0a37c10e
编写于
8月 11, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'stealer/ipvs/for-davem' of
git://git.stealer.net/linux-2.6
上级
37cc6780
e93615d0
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
105 addition
and
106 deletion
+105
-106
include/net/ip_vs.h
include/net/ip_vs.h
+28
-4
net/ipv4/ipvs/ip_vs_app.c
net/ipv4/ipvs/ip_vs_app.c
+1
-1
net/ipv4/ipvs/ip_vs_conn.c
net/ipv4/ipvs/ip_vs_conn.c
+1
-1
net/ipv4/ipvs/ip_vs_ctl.c
net/ipv4/ipvs/ip_vs_ctl.c
+20
-7
net/ipv4/ipvs/ip_vs_dh.c
net/ipv4/ipvs/ip_vs_dh.c
+1
-1
net/ipv4/ipvs/ip_vs_est.c
net/ipv4/ipvs/ip_vs_est.c
+39
-77
net/ipv4/ipvs/ip_vs_lblc.c
net/ipv4/ipvs/ip_vs_lblc.c
+1
-1
net/ipv4/ipvs/ip_vs_lblcr.c
net/ipv4/ipvs/ip_vs_lblcr.c
+1
-1
net/ipv4/ipvs/ip_vs_lc.c
net/ipv4/ipvs/ip_vs_lc.c
+1
-1
net/ipv4/ipvs/ip_vs_nq.c
net/ipv4/ipvs/ip_vs_nq.c
+1
-1
net/ipv4/ipvs/ip_vs_proto.c
net/ipv4/ipvs/ip_vs_proto.c
+2
-2
net/ipv4/ipvs/ip_vs_rr.c
net/ipv4/ipvs/ip_vs_rr.c
+1
-1
net/ipv4/ipvs/ip_vs_sched.c
net/ipv4/ipvs/ip_vs_sched.c
+2
-2
net/ipv4/ipvs/ip_vs_sed.c
net/ipv4/ipvs/ip_vs_sed.c
+1
-1
net/ipv4/ipvs/ip_vs_sh.c
net/ipv4/ipvs/ip_vs_sh.c
+1
-1
net/ipv4/ipvs/ip_vs_sync.c
net/ipv4/ipvs/ip_vs_sync.c
+2
-2
net/ipv4/ipvs/ip_vs_wlc.c
net/ipv4/ipvs/ip_vs_wlc.c
+1
-1
net/ipv4/ipvs/ip_vs_wrr.c
net/ipv4/ipvs/ip_vs_wrr.c
+1
-1
未找到文件。
include/net/ip_vs.h
浏览文件 @
0a37c10e
...
...
@@ -140,8 +140,24 @@ struct ip_vs_seq {
/*
* IPVS statistics object
* IPVS statistics object
s
*/
struct
ip_vs_estimator
{
struct
list_head
list
;
u64
last_inbytes
;
u64
last_outbytes
;
u32
last_conns
;
u32
last_inpkts
;
u32
last_outpkts
;
u32
cps
;
u32
inpps
;
u32
outpps
;
u32
inbps
;
u32
outbps
;
};
struct
ip_vs_stats
{
__u32
conns
;
/* connections scheduled */
...
...
@@ -156,7 +172,15 @@ struct ip_vs_stats
__u32
inbps
;
/* current in byte rate */
__u32
outbps
;
/* current out byte rate */
/*
* Don't add anything before the lock, because we use memcpy() to copy
* the members before the lock to struct ip_vs_stats_user in
* ip_vs_ctl.c.
*/
spinlock_t
lock
;
/* spin lock */
struct
ip_vs_estimator
est
;
/* estimator */
};
struct
dst_entry
;
...
...
@@ -440,7 +464,7 @@ struct ip_vs_app
*/
extern
const
char
*
ip_vs_proto_name
(
unsigned
proto
);
extern
void
ip_vs_init_hash_table
(
struct
list_head
*
table
,
int
rows
);
#define IP_VS_INIT_HASH_TABLE(t) ip_vs_init_hash_table(
t, sizeof(t)/sizeof(t[0]
))
#define IP_VS_INIT_HASH_TABLE(t) ip_vs_init_hash_table(
(t), ARRAY_SIZE((t)
))
#define IP_VS_APP_TYPE_FTP 1
...
...
@@ -620,7 +644,7 @@ extern int sysctl_ip_vs_expire_quiescent_template;
extern
int
sysctl_ip_vs_sync_threshold
[
2
];
extern
int
sysctl_ip_vs_nat_icmp_send
;
extern
struct
ip_vs_stats
ip_vs_stats
;
extern
struct
ctl_path
net_vs_ctl_path
[];
extern
const
struct
ctl_path
net_vs_ctl_path
[];
extern
struct
ip_vs_service
*
ip_vs_service_get
(
__u32
fwmark
,
__u16
protocol
,
__be32
vaddr
,
__be16
vport
);
...
...
@@ -659,7 +683,7 @@ extern void ip_vs_sync_conn(struct ip_vs_conn *cp);
/*
* IPVS rate estimator prototypes (from ip_vs_est.c)
*/
extern
int
ip_vs_new_estimator
(
struct
ip_vs_stats
*
stats
);
extern
void
ip_vs_new_estimator
(
struct
ip_vs_stats
*
stats
);
extern
void
ip_vs_kill_estimator
(
struct
ip_vs_stats
*
stats
);
extern
void
ip_vs_zero_estimator
(
struct
ip_vs_stats
*
stats
);
...
...
net/ipv4/ipvs/ip_vs_app.c
浏览文件 @
0a37c10e
...
...
@@ -608,7 +608,7 @@ int ip_vs_skb_replace(struct sk_buff *skb, gfp_t pri,
}
int
ip_vs_app_init
(
void
)
int
__init
ip_vs_app_init
(
void
)
{
/* we will replace it with proc_net_ipvs_create() soon */
proc_net_fops_create
(
&
init_net
,
"ip_vs_app"
,
0
,
&
ip_vs_app_fops
);
...
...
net/ipv4/ipvs/ip_vs_conn.c
浏览文件 @
0a37c10e
...
...
@@ -965,7 +965,7 @@ static void ip_vs_conn_flush(void)
}
int
ip_vs_conn_init
(
void
)
int
__init
ip_vs_conn_init
(
void
)
{
int
idx
;
...
...
net/ipv4/ipvs/ip_vs_ctl.c
浏览文件 @
0a37c10e
...
...
@@ -683,9 +683,22 @@ static void
ip_vs_zero_stats
(
struct
ip_vs_stats
*
stats
)
{
spin_lock_bh
(
&
stats
->
lock
);
memset
(
stats
,
0
,
(
char
*
)
&
stats
->
lock
-
(
char
*
)
stats
);
spin_unlock_bh
(
&
stats
->
lock
);
stats
->
conns
=
0
;
stats
->
inpkts
=
0
;
stats
->
outpkts
=
0
;
stats
->
inbytes
=
0
;
stats
->
outbytes
=
0
;
stats
->
cps
=
0
;
stats
->
inpps
=
0
;
stats
->
outpps
=
0
;
stats
->
inbps
=
0
;
stats
->
outbps
=
0
;
ip_vs_zero_estimator
(
stats
);
spin_unlock_bh
(
&
stats
->
lock
);
}
/*
...
...
@@ -1589,7 +1602,7 @@ static struct ctl_table vs_vars[] = {
{
.
ctl_name
=
0
}
};
struct
ctl_path
net_vs_ctl_path
[]
=
{
const
struct
ctl_path
net_vs_ctl_path
[]
=
{
{
.
procname
=
"net"
,
.
ctl_name
=
CTL_NET
,
},
{
.
procname
=
"ipv4"
,
.
ctl_name
=
NET_IPV4
,
},
{
.
procname
=
"vs"
,
},
...
...
@@ -1784,7 +1797,9 @@ static const struct file_operations ip_vs_info_fops = {
#endif
struct
ip_vs_stats
ip_vs_stats
;
struct
ip_vs_stats
ip_vs_stats
=
{
.
lock
=
__SPIN_LOCK_UNLOCKED
(
ip_vs_stats
.
lock
),
};
#ifdef CONFIG_PROC_FS
static
int
ip_vs_stats_show
(
struct
seq_file
*
seq
,
void
*
v
)
...
...
@@ -2306,7 +2321,7 @@ static struct nf_sockopt_ops ip_vs_sockopts = {
};
int
ip_vs_control_init
(
void
)
int
__init
ip_vs_control_init
(
void
)
{
int
ret
;
int
idx
;
...
...
@@ -2333,8 +2348,6 @@ int ip_vs_control_init(void)
INIT_LIST_HEAD
(
&
ip_vs_rtable
[
idx
]);
}
memset
(
&
ip_vs_stats
,
0
,
sizeof
(
ip_vs_stats
));
spin_lock_init
(
&
ip_vs_stats
.
lock
);
ip_vs_new_estimator
(
&
ip_vs_stats
);
/* Hook the defense timer */
...
...
net/ipv4/ipvs/ip_vs_dh.c
浏览文件 @
0a37c10e
...
...
@@ -233,6 +233,7 @@ static struct ip_vs_scheduler ip_vs_dh_scheduler =
.
name
=
"dh"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_dh_scheduler
.
n_list
),
.
init_service
=
ip_vs_dh_init_svc
,
.
done_service
=
ip_vs_dh_done_svc
,
.
update_service
=
ip_vs_dh_update_svc
,
...
...
@@ -242,7 +243,6 @@ static struct ip_vs_scheduler ip_vs_dh_scheduler =
static
int
__init
ip_vs_dh_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_dh_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_dh_scheduler
);
}
...
...
net/ipv4/ipvs/ip_vs_est.c
浏览文件 @
0a37c10e
...
...
@@ -17,6 +17,7 @@
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/sysctl.h>
#include <linux/list.h>
#include <net/ip_vs.h>
...
...
@@ -44,28 +45,11 @@
*/
struct
ip_vs_estimator
{
struct
ip_vs_estimator
*
next
;
struct
ip_vs_stats
*
stats
;
u32
last_conns
;
u32
last_inpkts
;
u32
last_outpkts
;
u64
last_inbytes
;
u64
last_outbytes
;
u32
cps
;
u32
inpps
;
u32
outpps
;
u32
inbps
;
u32
outbps
;
};
static
void
estimation_timer
(
unsigned
long
arg
);
static
struct
ip_vs_estimator
*
est_list
=
NULL
;
static
DEFINE_
RW
LOCK
(
est_lock
);
static
struct
timer_list
est_timer
;
static
LIST_HEAD
(
est_list
)
;
static
DEFINE_
SPIN
LOCK
(
est_lock
);
static
DEFINE_TIMER
(
est_timer
,
estimation_timer
,
0
,
0
)
;
static
void
estimation_timer
(
unsigned
long
arg
)
{
...
...
@@ -76,9 +60,9 @@ static void estimation_timer(unsigned long arg)
u64
n_inbytes
,
n_outbytes
;
u32
rate
;
read
_lock
(
&
est_lock
);
for
(
e
=
est_list
;
e
;
e
=
e
->
nex
t
)
{
s
=
e
->
stats
;
spin
_lock
(
&
est_lock
);
list_for_each_entry
(
e
,
&
est_list
,
lis
t
)
{
s
=
container_of
(
e
,
struct
ip_vs_stats
,
est
)
;
spin_lock
(
&
s
->
lock
);
n_conns
=
s
->
conns
;
...
...
@@ -114,19 +98,16 @@ static void estimation_timer(unsigned long arg)
s
->
outbps
=
(
e
->
outbps
+
0xF
)
>>
5
;
spin_unlock
(
&
s
->
lock
);
}
read
_unlock
(
&
est_lock
);
spin
_unlock
(
&
est_lock
);
mod_timer
(
&
est_timer
,
jiffies
+
2
*
HZ
);
}
int
ip_vs_new_estimator
(
struct
ip_vs_stats
*
stats
)
void
ip_vs_new_estimator
(
struct
ip_vs_stats
*
stats
)
{
struct
ip_vs_estimator
*
est
;
struct
ip_vs_estimator
*
est
=
&
stats
->
est
;
est
=
kzalloc
(
sizeof
(
*
est
),
GFP_KERNEL
);
if
(
est
==
NULL
)
return
-
ENOMEM
;
INIT_LIST_HEAD
(
&
est
->
list
);
est
->
stats
=
stats
;
est
->
last_conns
=
stats
->
conns
;
est
->
cps
=
stats
->
cps
<<
10
;
...
...
@@ -142,59 +123,40 @@ int ip_vs_new_estimator(struct ip_vs_stats *stats)
est
->
last_outbytes
=
stats
->
outbytes
;
est
->
outbps
=
stats
->
outbps
<<
5
;
write_lock_bh
(
&
est_lock
);
est
->
next
=
est_list
;
if
(
est
->
next
==
NULL
)
{
setup_timer
(
&
est_timer
,
estimation_timer
,
0
);
est_timer
.
expires
=
jiffies
+
2
*
HZ
;
add_timer
(
&
est_timer
);
}
est_list
=
est
;
write_unlock_bh
(
&
est_lock
);
return
0
;
spin_lock_bh
(
&
est_lock
);
if
(
list_empty
(
&
est_list
))
mod_timer
(
&
est_timer
,
jiffies
+
2
*
HZ
);
list_add
(
&
est
->
list
,
&
est_list
);
spin_unlock_bh
(
&
est_lock
);
}
void
ip_vs_kill_estimator
(
struct
ip_vs_stats
*
stats
)
{
struct
ip_vs_estimator
*
est
,
**
pest
;
int
killed
=
0
;
write_lock_bh
(
&
est_lock
);
pest
=
&
est_list
;
while
((
est
=*
pest
)
!=
NULL
)
{
if
(
est
->
stats
!=
stats
)
{
pest
=
&
est
->
next
;
continue
;
}
*
pest
=
est
->
next
;
kfree
(
est
);
killed
++
;
struct
ip_vs_estimator
*
est
=
&
stats
->
est
;
spin_lock_bh
(
&
est_lock
);
list_del
(
&
est
->
list
);
while
(
list_empty
(
&
est_list
)
&&
try_to_del_timer_sync
(
&
est_timer
)
<
0
)
{
spin_unlock_bh
(
&
est_lock
);
cpu_relax
();
spin_lock_bh
(
&
est_lock
);
}
if
(
killed
&&
est_list
==
NULL
)
del_timer_sync
(
&
est_timer
);
write_unlock_bh
(
&
est_lock
);
spin_unlock_bh
(
&
est_lock
);
}
void
ip_vs_zero_estimator
(
struct
ip_vs_stats
*
stats
)
{
struct
ip_vs_estimator
*
e
;
write_lock_bh
(
&
est_lock
);
for
(
e
=
est_list
;
e
;
e
=
e
->
next
)
{
if
(
e
->
stats
!=
stats
)
continue
;
/* set counters zero */
e
->
last_conns
=
0
;
e
->
last_inpkts
=
0
;
e
->
last_outpkts
=
0
;
e
->
last_inbytes
=
0
;
e
->
last_outbytes
=
0
;
e
->
cps
=
0
;
e
->
inpps
=
0
;
e
->
outpps
=
0
;
e
->
inbps
=
0
;
e
->
outbps
=
0
;
}
write_unlock_bh
(
&
est_lock
);
struct
ip_vs_estimator
*
est
=
&
stats
->
est
;
/* set counters zero, caller must hold the stats->lock lock */
est
->
last_inbytes
=
0
;
est
->
last_outbytes
=
0
;
est
->
last_conns
=
0
;
est
->
last_inpkts
=
0
;
est
->
last_outpkts
=
0
;
est
->
cps
=
0
;
est
->
inpps
=
0
;
est
->
outpps
=
0
;
est
->
inbps
=
0
;
est
->
outbps
=
0
;
}
net/ipv4/ipvs/ip_vs_lblc.c
浏览文件 @
0a37c10e
...
...
@@ -539,6 +539,7 @@ static struct ip_vs_scheduler ip_vs_lblc_scheduler =
.
name
=
"lblc"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_lblc_scheduler
.
n_list
),
.
init_service
=
ip_vs_lblc_init_svc
,
.
done_service
=
ip_vs_lblc_done_svc
,
.
update_service
=
ip_vs_lblc_update_svc
,
...
...
@@ -550,7 +551,6 @@ static int __init ip_vs_lblc_init(void)
{
int
ret
;
INIT_LIST_HEAD
(
&
ip_vs_lblc_scheduler
.
n_list
);
sysctl_header
=
register_sysctl_paths
(
net_vs_ctl_path
,
vs_vars_table
);
ret
=
register_ip_vs_scheduler
(
&
ip_vs_lblc_scheduler
);
if
(
ret
)
...
...
net/ipv4/ipvs/ip_vs_lblcr.c
浏览文件 @
0a37c10e
...
...
@@ -728,6 +728,7 @@ static struct ip_vs_scheduler ip_vs_lblcr_scheduler =
.
name
=
"lblcr"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_lblcr_scheduler
.
n_list
),
.
init_service
=
ip_vs_lblcr_init_svc
,
.
done_service
=
ip_vs_lblcr_done_svc
,
.
update_service
=
ip_vs_lblcr_update_svc
,
...
...
@@ -739,7 +740,6 @@ static int __init ip_vs_lblcr_init(void)
{
int
ret
;
INIT_LIST_HEAD
(
&
ip_vs_lblcr_scheduler
.
n_list
);
sysctl_header
=
register_sysctl_paths
(
net_vs_ctl_path
,
vs_vars_table
);
ret
=
register_ip_vs_scheduler
(
&
ip_vs_lblcr_scheduler
);
if
(
ret
)
...
...
net/ipv4/ipvs/ip_vs_lc.c
浏览文件 @
0a37c10e
...
...
@@ -98,6 +98,7 @@ static struct ip_vs_scheduler ip_vs_lc_scheduler = {
.
name
=
"lc"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_lc_scheduler
.
n_list
),
.
init_service
=
ip_vs_lc_init_svc
,
.
done_service
=
ip_vs_lc_done_svc
,
.
update_service
=
ip_vs_lc_update_svc
,
...
...
@@ -107,7 +108,6 @@ static struct ip_vs_scheduler ip_vs_lc_scheduler = {
static
int
__init
ip_vs_lc_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_lc_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_lc_scheduler
)
;
}
...
...
net/ipv4/ipvs/ip_vs_nq.c
浏览文件 @
0a37c10e
...
...
@@ -136,6 +136,7 @@ static struct ip_vs_scheduler ip_vs_nq_scheduler =
.
name
=
"nq"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_nq_scheduler
.
n_list
),
.
init_service
=
ip_vs_nq_init_svc
,
.
done_service
=
ip_vs_nq_done_svc
,
.
update_service
=
ip_vs_nq_update_svc
,
...
...
@@ -145,7 +146,6 @@ static struct ip_vs_scheduler ip_vs_nq_scheduler =
static
int
__init
ip_vs_nq_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_nq_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_nq_scheduler
);
}
...
...
net/ipv4/ipvs/ip_vs_proto.c
浏览文件 @
0a37c10e
...
...
@@ -43,7 +43,7 @@ static struct ip_vs_protocol *ip_vs_proto_table[IP_VS_PROTO_TAB_SIZE];
/*
* register an ipvs protocol
*/
static
int
__used
register_ip_vs_protocol
(
struct
ip_vs_protocol
*
pp
)
static
int
__used
__init
register_ip_vs_protocol
(
struct
ip_vs_protocol
*
pp
)
{
unsigned
hash
=
IP_VS_PROTO_HASH
(
pp
->
protocol
);
...
...
@@ -190,7 +190,7 @@ ip_vs_tcpudp_debug_packet(struct ip_vs_protocol *pp,
}
int
ip_vs_protocol_init
(
void
)
int
__init
ip_vs_protocol_init
(
void
)
{
char
protocols
[
64
];
#define REGISTER_PROTOCOL(p) \
...
...
net/ipv4/ipvs/ip_vs_rr.c
浏览文件 @
0a37c10e
...
...
@@ -94,6 +94,7 @@ static struct ip_vs_scheduler ip_vs_rr_scheduler = {
.
name
=
"rr"
,
/* name */
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_rr_scheduler
.
n_list
),
.
init_service
=
ip_vs_rr_init_svc
,
.
done_service
=
ip_vs_rr_done_svc
,
.
update_service
=
ip_vs_rr_update_svc
,
...
...
@@ -102,7 +103,6 @@ static struct ip_vs_scheduler ip_vs_rr_scheduler = {
static
int
__init
ip_vs_rr_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_rr_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_rr_scheduler
);
}
...
...
net/ipv4/ipvs/ip_vs_sched.c
浏览文件 @
0a37c10e
...
...
@@ -184,7 +184,7 @@ int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler)
write_lock_bh
(
&
__ip_vs_sched_lock
);
if
(
scheduler
->
n_list
.
next
!=
&
scheduler
->
n_list
)
{
if
(
!
list_empty
(
&
scheduler
->
n_list
)
)
{
write_unlock_bh
(
&
__ip_vs_sched_lock
);
ip_vs_use_count_dec
();
IP_VS_ERR
(
"register_ip_vs_scheduler(): [%s] scheduler "
...
...
@@ -229,7 +229,7 @@ int unregister_ip_vs_scheduler(struct ip_vs_scheduler *scheduler)
}
write_lock_bh
(
&
__ip_vs_sched_lock
);
if
(
scheduler
->
n_list
.
next
==
&
scheduler
->
n_list
)
{
if
(
list_empty
(
&
scheduler
->
n_list
)
)
{
write_unlock_bh
(
&
__ip_vs_sched_lock
);
IP_VS_ERR
(
"unregister_ip_vs_scheduler(): [%s] scheduler "
"is not in the list. failed
\n
"
,
scheduler
->
name
);
...
...
net/ipv4/ipvs/ip_vs_sed.c
浏览文件 @
0a37c10e
...
...
@@ -138,6 +138,7 @@ static struct ip_vs_scheduler ip_vs_sed_scheduler =
.
name
=
"sed"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_sed_scheduler
.
n_list
),
.
init_service
=
ip_vs_sed_init_svc
,
.
done_service
=
ip_vs_sed_done_svc
,
.
update_service
=
ip_vs_sed_update_svc
,
...
...
@@ -147,7 +148,6 @@ static struct ip_vs_scheduler ip_vs_sed_scheduler =
static
int
__init
ip_vs_sed_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_sed_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_sed_scheduler
);
}
...
...
net/ipv4/ipvs/ip_vs_sh.c
浏览文件 @
0a37c10e
...
...
@@ -230,6 +230,7 @@ static struct ip_vs_scheduler ip_vs_sh_scheduler =
.
name
=
"sh"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_sh_scheduler
.
n_list
),
.
init_service
=
ip_vs_sh_init_svc
,
.
done_service
=
ip_vs_sh_done_svc
,
.
update_service
=
ip_vs_sh_update_svc
,
...
...
@@ -239,7 +240,6 @@ static struct ip_vs_scheduler ip_vs_sh_scheduler =
static
int
__init
ip_vs_sh_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_sh_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_sh_scheduler
);
}
...
...
net/ipv4/ipvs/ip_vs_sync.c
浏览文件 @
0a37c10e
...
...
@@ -904,9 +904,9 @@ int stop_sync_thread(int state)
* progress of stopping the master sync daemon.
*/
spin_lock
(
&
ip_vs_sync_lock
);
spin_lock
_bh
(
&
ip_vs_sync_lock
);
ip_vs_sync_state
&=
~
IP_VS_STATE_MASTER
;
spin_unlock
(
&
ip_vs_sync_lock
);
spin_unlock
_bh
(
&
ip_vs_sync_lock
);
kthread_stop
(
sync_master_thread
);
sync_master_thread
=
NULL
;
}
else
if
(
state
==
IP_VS_STATE_BACKUP
)
{
...
...
net/ipv4/ipvs/ip_vs_wlc.c
浏览文件 @
0a37c10e
...
...
@@ -126,6 +126,7 @@ static struct ip_vs_scheduler ip_vs_wlc_scheduler =
.
name
=
"wlc"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_wlc_scheduler
.
n_list
),
.
init_service
=
ip_vs_wlc_init_svc
,
.
done_service
=
ip_vs_wlc_done_svc
,
.
update_service
=
ip_vs_wlc_update_svc
,
...
...
@@ -135,7 +136,6 @@ static struct ip_vs_scheduler ip_vs_wlc_scheduler =
static
int
__init
ip_vs_wlc_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_wlc_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_wlc_scheduler
);
}
...
...
net/ipv4/ipvs/ip_vs_wrr.c
浏览文件 @
0a37c10e
...
...
@@ -212,6 +212,7 @@ static struct ip_vs_scheduler ip_vs_wrr_scheduler = {
.
name
=
"wrr"
,
.
refcnt
=
ATOMIC_INIT
(
0
),
.
module
=
THIS_MODULE
,
.
n_list
=
LIST_HEAD_INIT
(
ip_vs_wrr_scheduler
.
n_list
),
.
init_service
=
ip_vs_wrr_init_svc
,
.
done_service
=
ip_vs_wrr_done_svc
,
.
update_service
=
ip_vs_wrr_update_svc
,
...
...
@@ -220,7 +221,6 @@ static struct ip_vs_scheduler ip_vs_wrr_scheduler = {
static
int
__init
ip_vs_wrr_init
(
void
)
{
INIT_LIST_HEAD
(
&
ip_vs_wrr_scheduler
.
n_list
);
return
register_ip_vs_scheduler
(
&
ip_vs_wrr_scheduler
)
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录