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

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

?? host.c

?? Linux中關(guān)于遠(yuǎn)程文件鎖定的支持的源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
 * the source address. */struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst *rqstp,				    const char *hostname,				    const size_t hostname_len){	struct sockaddr_in sin = {		.sin_family	= AF_INET,	};	struct sockaddr_in6 sin6 = {		.sin6_family	= AF_INET6,	};	struct nlm_lookup_host_info ni = {		.server		= 1,		.sap		= svc_addr(rqstp),		.salen		= rqstp->rq_addrlen,		.protocol	= rqstp->rq_prot,		.version	= rqstp->rq_vers,		.hostname	= hostname,		.hostname_len	= hostname_len,		.src_len	= rqstp->rq_addrlen,	};	dprintk("lockd: %s(host='%*s', vers=%u, proto=%s)\n", __func__,			(int)hostname_len, hostname, rqstp->rq_vers,			(rqstp->rq_prot == IPPROTO_UDP ? "udp" : "tcp"));	switch (ni.sap->sa_family) {	case AF_INET:		sin.sin_addr.s_addr = rqstp->rq_daddr.addr.s_addr;		ni.src_sap = (struct sockaddr *)&sin;		break;	case AF_INET6:		ipv6_addr_copy(&sin6.sin6_addr, &rqstp->rq_daddr.addr6);		ni.src_sap = (struct sockaddr *)&sin6;		break;	default:		return NULL;	}	return nlm_lookup_host(&ni);}/* * Create the NLM RPC client for an NLM peer */struct rpc_clnt *nlm_bind_host(struct nlm_host *host){	struct rpc_clnt	*clnt;	dprintk("lockd: nlm_bind_host %s (%s)\n",			host->h_name, host->h_addrbuf);	/* Lock host handle */	mutex_lock(&host->h_mutex);	/* If we've already created an RPC client, check whether	 * RPC rebind is required	 */	if ((clnt = host->h_rpcclnt) != NULL) {		if (time_after_eq(jiffies, host->h_nextrebind)) {			rpc_force_rebind(clnt);			host->h_nextrebind = jiffies + NLM_HOST_REBIND;			dprintk("lockd: next rebind in %lu jiffies\n",					host->h_nextrebind - jiffies);		}	} else {		unsigned long increment = nlmsvc_timeout;		struct rpc_timeout timeparms = {			.to_initval	= increment,			.to_increment	= increment,			.to_maxval	= increment * 6UL,			.to_retries	= 5U,		};		struct rpc_create_args args = {			.protocol	= host->h_proto,			.address	= nlm_addr(host),			.addrsize	= host->h_addrlen,			.saddress	= nlm_srcaddr(host),			.timeout	= &timeparms,			.servername	= host->h_name,			.program	= &nlm_program,			.version	= host->h_version,			.authflavor	= RPC_AUTH_UNIX,			.flags		= (RPC_CLNT_CREATE_NOPING |					   RPC_CLNT_CREATE_AUTOBIND),		};		/*		 * lockd retries server side blocks automatically so we want		 * those to be soft RPC calls. Client side calls need to be		 * hard RPC tasks.		 */		if (!host->h_server)			args.flags |= RPC_CLNT_CREATE_HARDRTRY;		if (host->h_noresvport)			args.flags |= RPC_CLNT_CREATE_NONPRIVPORT;		clnt = rpc_create(&args);		if (!IS_ERR(clnt))			host->h_rpcclnt = clnt;		else {			printk("lockd: couldn't create RPC handle for %s\n", host->h_name);			clnt = NULL;		}	}	mutex_unlock(&host->h_mutex);	return clnt;}/* * Force a portmap lookup of the remote lockd port */voidnlm_rebind_host(struct nlm_host *host){	dprintk("lockd: rebind host %s\n", host->h_name);	if (host->h_rpcclnt && time_after_eq(jiffies, host->h_nextrebind)) {		rpc_force_rebind(host->h_rpcclnt);		host->h_nextrebind = jiffies + NLM_HOST_REBIND;	}}/* * Increment NLM host count */struct nlm_host * nlm_get_host(struct nlm_host *host){	if (host) {		dprintk("lockd: get host %s\n", host->h_name);		atomic_inc(&host->h_count);		host->h_expires = jiffies + NLM_HOST_EXPIRE;	}	return host;}/* * Release NLM host after use */void nlm_release_host(struct nlm_host *host){	if (host != NULL) {		dprintk("lockd: release host %s\n", host->h_name);		BUG_ON(atomic_read(&host->h_count) < 0);		if (atomic_dec_and_test(&host->h_count)) {			BUG_ON(!list_empty(&host->h_lockowners));			BUG_ON(!list_empty(&host->h_granted));			BUG_ON(!list_empty(&host->h_reclaim));		}	}}/** * nlm_host_rebooted - Release all resources held by rebooted host * @info: pointer to decoded results of NLM_SM_NOTIFY call * * We were notified that the specified host has rebooted.  Release * all resources held by that peer. */void nlm_host_rebooted(const struct nlm_reboot *info){	struct hlist_head *chain;	struct hlist_node *pos;	struct nsm_handle *nsm;	struct nlm_host	*host;	nsm = nsm_reboot_lookup(info);	if (unlikely(nsm == NULL))		return;	/* Mark all hosts tied to this NSM state as having rebooted.	 * We run the loop repeatedly, because we drop the host table	 * lock for this.	 * To avoid processing a host several times, we match the nsmstate.	 */again:	mutex_lock(&nlm_host_mutex);	for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {		hlist_for_each_entry(host, pos, chain, h_hash) {			if (host->h_nsmhandle == nsm			 && host->h_nsmstate != info->state) {				host->h_nsmstate = info->state;				host->h_state++;				nlm_get_host(host);				mutex_unlock(&nlm_host_mutex);				if (host->h_server) {					/* We're server for this guy, just ditch					 * all the locks he held. */					nlmsvc_free_host_resources(host);				} else {					/* He's the server, initiate lock recovery. */					nlmclnt_recovery(host);				}				nlm_release_host(host);				goto again;			}		}	}	mutex_unlock(&nlm_host_mutex);}/* * Shut down the hosts module. * Note that this routine is called only at server shutdown time. */voidnlm_shutdown_hosts(void){	struct hlist_head *chain;	struct hlist_node *pos;	struct nlm_host	*host;	dprintk("lockd: shutting down host module\n");	mutex_lock(&nlm_host_mutex);	/* First, make all hosts eligible for gc */	dprintk("lockd: nuking all hosts...\n");	for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {		hlist_for_each_entry(host, pos, chain, h_hash) {			host->h_expires = jiffies - 1;			if (host->h_rpcclnt) {				rpc_shutdown_client(host->h_rpcclnt);				host->h_rpcclnt = NULL;			}		}	}	/* Then, perform a garbage collection pass */	nlm_gc_hosts();	mutex_unlock(&nlm_host_mutex);	/* complain if any hosts are left */	if (nrhosts) {		printk(KERN_WARNING "lockd: couldn't shutdown host module!\n");		dprintk("lockd: %d hosts left:\n", nrhosts);		for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {			hlist_for_each_entry(host, pos, chain, h_hash) {				dprintk("       %s (cnt %d use %d exp %ld)\n",					host->h_name, atomic_read(&host->h_count),					host->h_inuse, host->h_expires);			}		}	}}/* * Garbage collect any unused NLM hosts. * This GC combines reference counting for async operations with * mark & sweep for resources held by remote clients. */static voidnlm_gc_hosts(void){	struct hlist_head *chain;	struct hlist_node *pos, *next;	struct nlm_host	*host;	dprintk("lockd: host garbage collection\n");	for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {		hlist_for_each_entry(host, pos, chain, h_hash)			host->h_inuse = 0;	}	/* Mark all hosts that hold locks, blocks or shares */	nlmsvc_mark_resources();	for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) {		hlist_for_each_entry_safe(host, pos, next, chain, h_hash) {			if (atomic_read(&host->h_count) || host->h_inuse			 || time_before(jiffies, host->h_expires)) {				dprintk("nlm_gc_hosts skipping %s (cnt %d use %d exp %ld)\n",					host->h_name, atomic_read(&host->h_count),					host->h_inuse, host->h_expires);				continue;			}			dprintk("lockd: delete host %s\n", host->h_name);			hlist_del_init(&host->h_hash);			nlm_destroy_host(host);			nrhosts--;		}	}	next_gc = jiffies + NLM_HOST_COLLECT;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区在线观看免费观看电影高清| 久久久美女毛片| 日韩欧美激情一区| 国产免费成人在线视频| 亚洲综合在线第一页| 日本少妇一区二区| 粉嫩蜜臀av国产精品网站| 97精品电影院| 日韩三级视频在线看| 亚洲国产精品99久久久久久久久| 亚洲一区二区美女| 国产在线视频不卡二| 欧美在线一区二区三区| 久久久综合精品| 亚洲第一主播视频| 高清不卡一二三区| 欧美日韩dvd在线观看| 国产片一区二区三区| 亚洲成人在线观看视频| 国产suv精品一区二区883| 欧美日韩一二三区| 中文字幕 久热精品 视频在线| 亚洲成在线观看| 成人h动漫精品一区二| 日韩一区二区在线看| 亚洲美女免费在线| 国产乱妇无码大片在线观看| 欧美日韩国产影片| 国产精品久久久久久久午夜片| 免费在线看一区| 色狠狠综合天天综合综合| 久久久久久综合| 日本不卡免费在线视频| 在线观看日韩国产| 国产精品美女久久久久久久| 久久91精品国产91久久小草| 欧美羞羞免费网站| 亚洲欧美综合网| 国产精品1区二区.| 精品少妇一区二区三区在线播放| 亚洲综合在线免费观看| 波多野结衣在线一区| 久久这里只精品最新地址| 丝袜美腿亚洲色图| 91高清在线观看| 亚洲欧美日韩在线| 成人v精品蜜桃久久一区| 久久久久久一级片| 狠狠色丁香婷综合久久| 欧美一区二区三区在线电影| 亚洲一区二区免费视频| 色婷婷av一区二区三区软件| 国产精品久久99| 懂色av一区二区在线播放| 精品国产凹凸成av人导航| 日韩精品亚洲专区| 欧美精品第一页| 亚洲风情在线资源站| 欧美伊人久久久久久久久影院 | 蜜臀av一区二区在线免费观看| 在线观看一区二区精品视频| 亚洲欧美偷拍另类a∨色屁股| 不卡视频一二三四| 中文字幕一区二区三区四区不卡| 国产99一区视频免费| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品1024久久| 精品国产乱码久久久久久老虎 | 欧美r级电影在线观看| 久久精品国产精品亚洲综合| 日韩色在线观看| 精品无人码麻豆乱码1区2区| 欧美成人a∨高清免费观看| 久久福利资源站| 欧美成人r级一区二区三区| 激情综合亚洲精品| 26uuu欧美日本| 国产一区二区三区在线观看精品 | 黄色小说综合网站| 久久精品人人做| 国产成人精品影视| 国产精品入口麻豆原神| 丁香亚洲综合激情啪啪综合| 国产精品萝li| 欧美在线免费视屏| 丝袜脚交一区二区| 精品国产百合女同互慰| 国产不卡视频一区| 国产精品短视频| 色婷婷亚洲一区二区三区| 亚洲一区二区三区四区不卡| 欧美一区二区三区在线看| 国产综合色在线视频区| 日本一区二区视频在线观看| 95精品视频在线| 亚洲国产精品久久久久婷婷884| 欧美一区二区三区播放老司机| 久草精品在线观看| 国产精品久久久久久久岛一牛影视 | 欧美成人女星排名| 懂色中文一区二区在线播放| 曰韩精品一区二区| 日韩三区在线观看| 白白色亚洲国产精品| 亚洲最新视频在线观看| 日韩精品中文字幕一区二区三区| 国产精品综合一区二区三区| 国产精品成人免费在线| 欧美日韩一区在线| 国产九九视频一区二区三区| 亚洲精品日韩综合观看成人91| 欧美一区二区在线播放| 国产99久久久久久免费看农村| 悠悠色在线精品| 欧美电影免费提供在线观看| av男人天堂一区| 美腿丝袜亚洲三区| 中文字幕在线观看一区| 777午夜精品免费视频| 国产成人自拍网| 性做久久久久久免费观看欧美| 久久久亚洲高清| 欧美日韩国产一区| 成人激情图片网| 婷婷丁香激情综合| 国产欧美一区二区精品仙草咪| 欧美性一区二区| 大陆成人av片| 麻豆免费精品视频| 亚洲免费资源在线播放| 久久久久久久久蜜桃| 欧美无砖专区一中文字| 国产成人福利片| 青青草91视频| 亚洲美女免费在线| 中文字幕乱码久久午夜不卡 | 久久电影国产免费久久电影| 亚洲麻豆国产自偷在线| 久久久一区二区| 欧美一区二区精品久久911| 99热国产精品| 国产福利一区二区三区视频| 午夜精品久久久久久久久久久 | 91亚洲精华国产精华精华液| 国产自产视频一区二区三区| 调教+趴+乳夹+国产+精品| 日本一区二区成人在线| 日韩精品专区在线影院重磅| 精品视频在线免费观看| 99国内精品久久| 国产精品123| 精品午夜一区二区三区在线观看| 偷拍与自拍一区| 亚洲曰韩产成在线| 日韩一区日韩二区| 国产丝袜欧美中文另类| 精品99一区二区三区| 在线播放日韩导航| 欧美性淫爽ww久久久久无| 色综合久久综合网97色综合| 国产99久久久国产精品潘金网站| 久久精品99国产精品日本| 日本aⅴ免费视频一区二区三区| 亚洲香蕉伊在人在线观| 中文字幕日韩一区| 国产精品少妇自拍| 国产午夜三级一区二区三| 精品国免费一区二区三区| 3d成人动漫网站| 欧美另类久久久品| 欧美日韩在线播放一区| 欧美性大战久久久久久久| 一本大道久久a久久精二百| 成人18视频在线播放| 国产98色在线|日韩| 国产成人精品一区二| 国产高清无密码一区二区三区| 国内成人免费视频| 国产精品77777| 福利91精品一区二区三区| 国产v日产∨综合v精品视频| 91精品国产色综合久久不卡蜜臀 | 亚洲午夜激情av| 亚洲大型综合色站| 天天影视涩香欲综合网| 日韩激情视频网站| 青娱乐精品视频在线| 日本不卡一区二区三区高清视频| 日本系列欧美系列| 久久精品国产亚洲5555| 国产一区二区三区在线观看免费| 国产一区二区调教| 成人激情图片网| 一本大道久久a久久综合婷婷| 欧美性生活影院| 欧美一级在线视频| 久久久亚洲欧洲日产国码αv| 中文字幕欧美激情一区| 亚洲女厕所小便bbb| 亚洲午夜私人影院|