亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ip_vs_wrr.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
字號(hào):
/* * IPVS:        Weighted Round-Robin Scheduling module * * Version:     $Id: ip_vs_wrr.c,v 1.12 2002/09/15 08:14:08 wensong Exp $ * * Authors:     Wensong Zhang <wensong@linuxvirtualserver.org> * *              This program is free software; you can redistribute it and/or *              modify it under the terms of the GNU General Public License *              as published by the Free Software Foundation; either version *              2 of the License, or (at your option) any later version. * * Changes: *     Wensong Zhang            :     changed the ip_vs_wrr_schedule to return dest *     Wensong Zhang            :     changed some comestics things for debugging *     Wensong Zhang            :     changed for the d-linked destination list *     Wensong Zhang            :     added the ip_vs_wrr_update_svc *     Julian Anastasov         :     fixed the bug of returning destination *                                    with weight 0 when all weights are zero * */#include <linux/module.h>#include <linux/kernel.h>#include <net/ip_vs.h>/* * current destination pointer for weighted round-robin scheduling */struct ip_vs_wrr_mark {	struct list_head *cl;	/* current list head */	int cw;			/* current weight */	int mw;			/* maximum weight */	int di;			/* decreasing interval */};/* *    Get the gcd of server weights */static int gcd(int a, int b){	int c;	while ((c = a % b)) {		a = b;		b = c;	}	return b;}static int ip_vs_wrr_gcd_weight(struct ip_vs_service *svc){	struct ip_vs_dest *dest;	int weight;	int g = 0;	list_for_each_entry(dest, &svc->destinations, n_list) {		weight = atomic_read(&dest->weight);		if (weight > 0) {			if (g > 0)				g = gcd(weight, g);			else				g = weight;		}	}	return g ? g : 1;}/* *    Get the maximum weight of the service destinations. */static int ip_vs_wrr_max_weight(struct ip_vs_service *svc){	struct ip_vs_dest *dest;	int weight = 0;	list_for_each_entry(dest, &svc->destinations, n_list) {		if (atomic_read(&dest->weight) > weight)			weight = atomic_read(&dest->weight);	}	return weight;}static int ip_vs_wrr_init_svc(struct ip_vs_service *svc){	struct ip_vs_wrr_mark *mark;	/*	 *    Allocate the mark variable for WRR scheduling	 */	mark = kmalloc(sizeof(struct ip_vs_wrr_mark), GFP_ATOMIC);	if (mark == NULL) {		IP_VS_ERR("ip_vs_wrr_init_svc(): no memory\n");		return -ENOMEM;	}	mark->cl = &svc->destinations;	mark->cw = 0;	mark->mw = ip_vs_wrr_max_weight(svc);	mark->di = ip_vs_wrr_gcd_weight(svc);	svc->sched_data = mark;	return 0;}static int ip_vs_wrr_done_svc(struct ip_vs_service *svc){	/*	 *    Release the mark variable	 */	kfree(svc->sched_data);	return 0;}static int ip_vs_wrr_update_svc(struct ip_vs_service *svc){	struct ip_vs_wrr_mark *mark = svc->sched_data;	mark->cl = &svc->destinations;	mark->mw = ip_vs_wrr_max_weight(svc);	mark->di = ip_vs_wrr_gcd_weight(svc);	return 0;}/* *    Weighted Round-Robin Scheduling */static struct ip_vs_dest *ip_vs_wrr_schedule(struct ip_vs_service *svc, const struct sk_buff *skb){	struct ip_vs_dest *dest;	struct ip_vs_wrr_mark *mark = svc->sched_data;	struct list_head *p;	IP_VS_DBG(6, "ip_vs_wrr_schedule(): Scheduling...\n");	/*	 * This loop will always terminate, because mark->cw in (0, max_weight]	 * and at least one server has its weight equal to max_weight.	 */	write_lock(&svc->sched_lock);	p = mark->cl;	while (1) {		if (mark->cl == &svc->destinations) {			/* it is at the head of the destination list */			if (mark->cl == mark->cl->next) {				/* no dest entry */				dest = NULL;				goto out;			}			mark->cl = svc->destinations.next;			mark->cw -= mark->di;			if (mark->cw <= 0) {				mark->cw = mark->mw;				/*				 * Still zero, which means no availabe servers.				 */				if (mark->cw == 0) {					mark->cl = &svc->destinations;					IP_VS_INFO("ip_vs_wrr_schedule(): "						   "no available servers\n");					dest = NULL;					goto out;				}			}		} else			mark->cl = mark->cl->next;		if (mark->cl != &svc->destinations) {			/* not at the head of the list */			dest = list_entry(mark->cl, struct ip_vs_dest, n_list);			if (!(dest->flags & IP_VS_DEST_F_OVERLOAD) &&			    atomic_read(&dest->weight) >= mark->cw) {				/* got it */				break;			}		}		if (mark->cl == p) {			/* back to the start, and no dest is found.			   It is only possible when all dests are OVERLOADED */			dest = NULL;			goto out;		}	}	IP_VS_DBG(6, "WRR: server %u.%u.%u.%u:%u "		  "activeconns %d refcnt %d weight %d\n",		  NIPQUAD(dest->addr), ntohs(dest->port),		  atomic_read(&dest->activeconns),		  atomic_read(&dest->refcnt),		  atomic_read(&dest->weight));  out:	write_unlock(&svc->sched_lock);	return dest;}static struct ip_vs_scheduler ip_vs_wrr_scheduler = {	.name =			"wrr",	.refcnt =		ATOMIC_INIT(0),	.module =		THIS_MODULE,	.init_service =		ip_vs_wrr_init_svc,	.done_service =		ip_vs_wrr_done_svc,	.update_service =	ip_vs_wrr_update_svc,	.schedule =		ip_vs_wrr_schedule,};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) ;}static void __exit ip_vs_wrr_cleanup(void){	unregister_ip_vs_scheduler(&ip_vs_wrr_scheduler);}module_init(ip_vs_wrr_init);module_exit(ip_vs_wrr_cleanup);MODULE_LICENSE("GPL");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆91免费看| 三级欧美韩日大片在线看| 成人精品视频.| 中文字幕一区日韩精品欧美| 成人教育av在线| 日韩毛片视频在线看| 91在线看国产| 亚洲综合区在线| 91精品国产综合久久久久| 美女性感视频久久| 国产欧美一区二区精品秋霞影院| 成人av网站免费观看| 一区二区三区四区不卡视频| 91精品欧美综合在线观看最新| 久久se这里有精品| 亚洲午夜三级在线| 91麻豆精品国产自产在线| 麻豆国产精品一区二区三区 | 欧美日韩国产综合一区二区三区 | 美国欧美日韩国产在线播放| www激情久久| 99re成人精品视频| 天天亚洲美女在线视频| 国产欧美日本一区二区三区| 91麻豆精品秘密| 青青青爽久久午夜综合久久午夜| 久久久国产午夜精品| 91福利在线观看| 国产专区欧美精品| 亚洲主播在线观看| 国产欧美一区二区精品婷婷| 欧美日韩一区二区不卡| 丁香一区二区三区| 午夜视频在线观看一区| 国产日产欧产精品推荐色| 91丝袜美腿高跟国产极品老师 | 国产精品夜夜嗨| 亚洲欧美国产三级| 欧美va亚洲va香蕉在线| 欧美自拍丝袜亚洲| 激情图片小说一区| 亚洲一区二区三区四区中文字幕| 欧美成人一区二区三区| 91蜜桃免费观看视频| 久久国产精品无码网站| 伊人色综合久久天天| 久久久美女毛片| 欧美乱妇一区二区三区不卡视频| 成人精品一区二区三区四区| 日韩av高清在线观看| 亚洲一区在线视频观看| 国产精品日日摸夜夜摸av| 日韩欧美在线综合网| 91黄视频在线观看| 成人av免费在线| 国产原创一区二区三区| 日韩激情视频在线观看| 樱桃国产成人精品视频| ...xxx性欧美| 中文字幕精品综合| 久久先锋资源网| 日韩精品一区二区三区蜜臀 | 日韩午夜电影在线观看| 欧美午夜精品一区二区蜜桃 | 日本久久精品电影| 成人av影视在线观看| 国产1区2区3区精品美女| 国产一区二区中文字幕| 国产乱子轮精品视频| 久久成人免费日本黄色| 久久99热这里只有精品| 日本不卡一区二区三区| 国产风韵犹存在线视精品| 三级久久三级久久久| 丝袜美腿亚洲一区| 美女网站视频久久| 久久国产福利国产秒拍| 激情文学综合插| 国产福利一区在线| 成人精品国产免费网站| av高清不卡在线| 在线视频国内一区二区| 在线免费观看日本欧美| 欧美三级电影一区| 欧美一级黄色录像| 欧美电视剧在线观看完整版| 精品噜噜噜噜久久久久久久久试看| 欧美高清性hdvideosex| 日韩一区二区三区视频在线| 日韩免费在线观看| 久久久久九九视频| 国产精品国产自产拍高清av| 成人欧美一区二区三区白人| 一区二区三区中文字幕电影| 亚洲亚洲精品在线观看| 免费高清视频精品| 国产剧情一区在线| 97se亚洲国产综合自在线| 欧美性一二三区| 日韩精品最新网址| 久久精品夜色噜噜亚洲a∨ | 亚洲码国产岛国毛片在线| 亚洲欧美乱综合| 日本视频一区二区三区| 国产曰批免费观看久久久| 99精品视频在线观看免费| 欧美在线视频全部完| 欧美一二三区在线观看| 久久久久亚洲综合| 悠悠色在线精品| 久久97超碰色| 91免费看`日韩一区二区| 欧美一区二区女人| 亚洲国产精品激情在线观看| 伊人婷婷欧美激情| 国产在线视视频有精品| 91久久精品一区二区三| 精品久久久久香蕉网| 亚洲日本一区二区| 九色|91porny| 在线一区二区三区四区| 精品999在线播放| 亚洲色图视频网| 久久成人av少妇免费| 欧美伊人精品成人久久综合97| 日韩一级欧美一级| 一区二区三区视频在线看| 国产精品夜夜爽| 91精品综合久久久久久| 亚洲另类在线制服丝袜| 国产一区二区日韩精品| 欧美色综合影院| 亚洲天堂久久久久久久| 国内精品伊人久久久久av影院 | 夜夜嗨av一区二区三区| 久久99精品国产麻豆婷婷| 91搞黄在线观看| 欧美国产丝袜视频| 精品一区中文字幕| 欧美日韩亚洲综合在线| 综合色中文字幕| 欧美色欧美亚洲另类二区| 国产欧美日韩中文久久| 免费成人美女在线观看| 欧美在线观看视频在线| 国产精品成人免费| 国产aⅴ综合色| 久久综合色婷婷| 麻豆国产一区二区| 欧美一区二区播放| 香蕉av福利精品导航| 一本一道久久a久久精品综合蜜臀| 久久九九久久九九| 国产乱理伦片在线观看夜一区| 日韩精品在线网站| 日韩成人dvd| 欧美精品第1页| 日日夜夜精品免费视频| 欧美日韩视频在线第一区| 一区二区三区高清| 一本大道久久a久久综合婷婷| 国产精品美女久久久久久久久久久| 国产精品综合在线视频| 2023国产一二三区日本精品2022| 另类小说欧美激情| 日韩免费看的电影| 国内精品国产成人| 久久亚洲精精品中文字幕早川悠里 | 亚洲成人777| 欧美日本视频在线| 免费一级欧美片在线观看| 777午夜精品视频在线播放| 午夜久久久久久久久| 欧美高清视频不卡网| 日本午夜一区二区| 精品精品国产高清一毛片一天堂| 国内精品写真在线观看| 久久精品日韩一区二区三区| 国产99久久久久久免费看农村| 国产日韩欧美a| 99re免费视频精品全部| 亚洲综合久久久久| 欧美日韩免费观看一区三区| 日韩—二三区免费观看av| 日韩欧美国产系列| 国产精品99久久久久久宅男| 国产精品精品国产色婷婷| 91久久精品一区二区三区| 日韩成人午夜精品| 久久先锋资源网| 91亚洲国产成人精品一区二区三| 伊人一区二区三区| 日韩视频123| 成人黄动漫网站免费app| 美女视频黄免费的久久| av在线不卡免费看| 婷婷一区二区三区| 久久综合狠狠综合久久综合88 | 国产九色精品成人porny| 日韩美女久久久|