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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? proc.c

?? 內核是系統(tǒng)的心臟
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *  linux/fs/nfs/proc.c
 *
 *  Copyright (C) 1992, 1993, 1994  Rick Sladkey
 *
 *  OS-independent nfs remote procedure call functions
 */

/*
 * Defining NFS_PROC_DEBUG causes a lookup of a file named
 * "xyzzy" to toggle debugging.  Just cd to an NFS-mounted
 * filesystem and type 'ls xyzzy' to turn on debugging.
 */

#if 0
#define NFS_PROC_DEBUG
#endif

#include <linux/config.h>
#include <linux/param.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/nfs_fs.h>
#include <linux/utsname.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/in.h>

#ifdef NFS_PROC_DEBUG

static int proc_debug = 0;
#define PRINTK(format, args...) \
	do {						\
		if (proc_debug)				\
			printk(format , ## args);	\
	} while (0)

#else /* !NFS_PROC_DEBUG */

#define PRINTK(format, args...) do ; while (0)

#endif /* !NFS_PROC_DEBUG */

static int *nfs_rpc_header(int *p, int procedure, int ruid);
static int *nfs_rpc_verify(int *p);
static int nfs_stat_to_errno(int stat);

/*
 * Our memory allocation and release functions.
 */

static inline int *nfs_rpc_alloc(void)
{
	return (int *) __get_free_page(GFP_KERNEL);
}

static inline void nfs_rpc_free(int *p)
{
	free_page((long) p);
}

/*
 * Here are a bunch of xdr encode/decode functions that convert
 * between machine dependent and xdr data formats.
 */

static inline int *xdr_encode_fhandle(int *p, struct nfs_fh *fhandle)
{
	*((struct nfs_fh *) p) = *fhandle;
	p += (sizeof (*fhandle) + 3) >> 2;
	return p;
}

static inline int *xdr_decode_fhandle(int *p, struct nfs_fh *fhandle)
{
	*fhandle = *((struct nfs_fh *) p);
	p += (sizeof (*fhandle) + 3) >> 2;
	return p;
}

static inline int *xdr_encode_string(int *p, const char *string)
{
	int len, quadlen;
	
	len = strlen(string);
	quadlen = (len + 3) >> 2;
	*p++ = htonl(len);
	memcpy((char *) p, string, len);
	memset(((char *) p) + len, '\0', (quadlen << 2) - len);
	p += quadlen;
	return p;
}

static inline int *xdr_decode_string(int *p, char *string, int maxlen)
{
	unsigned int len;

	len = ntohl(*p++);
	if (len > maxlen)
		return NULL;
	memcpy(string, (char *) p, len);
	string[len] = '\0';
	p += (len + 3) >> 2;
	return p;
}

static inline int *xdr_encode_data(int *p, char *data, int len)
{
	int quadlen;
	
	quadlen = (len + 3) >> 2;
	*p++ = htonl(len);
	memcpy((char *) p, data, len);
	memset(((char *) p) + len, '\0', (quadlen << 2) - len);
	p += quadlen;
	return p;
}

static inline int *xdr_decode_data(int *p, char *data, int *lenp, int maxlen)
{
	unsigned int len;

	len = *lenp = ntohl(*p++);
	if (len > maxlen)
		return NULL;
	memcpy(data, (char *) p, len);
	p += (len + 3) >> 2;
	return p;
}

static int *xdr_decode_fattr(int *p, struct nfs_fattr *fattr)
{
	fattr->type = (enum nfs_ftype) ntohl(*p++);
	fattr->mode = ntohl(*p++);
	fattr->nlink = ntohl(*p++);
	fattr->uid = ntohl(*p++);
	fattr->gid = ntohl(*p++);
	fattr->size = ntohl(*p++);
	fattr->blocksize = ntohl(*p++);
	fattr->rdev = ntohl(*p++);
	fattr->blocks = ntohl(*p++);
	fattr->fsid = ntohl(*p++);
	fattr->fileid = ntohl(*p++);
	fattr->atime.seconds = ntohl(*p++);
	fattr->atime.useconds = ntohl(*p++);
	fattr->mtime.seconds = ntohl(*p++);
	fattr->mtime.useconds = ntohl(*p++);
	fattr->ctime.seconds = ntohl(*p++);
	fattr->ctime.useconds = ntohl(*p++);
	return p;
}

static int *xdr_encode_sattr(int *p, struct nfs_sattr *sattr)
{
	*p++ = htonl(sattr->mode);
	*p++ = htonl(sattr->uid);
	*p++ = htonl(sattr->gid);
	*p++ = htonl(sattr->size);
	*p++ = htonl(sattr->atime.seconds);
	*p++ = htonl(sattr->atime.useconds);
	*p++ = htonl(sattr->mtime.seconds);
	*p++ = htonl(sattr->mtime.useconds);
	return p;
}

static int *xdr_decode_entry(int *p, struct nfs_entry *entry)
{
	entry->fileid = ntohl(*p++);
	if (!(p = xdr_decode_string(p, entry->name, NFS_MAXNAMLEN)))
		return NULL;
	entry->cookie = ntohl(*p++);
	entry->eof = 0;
	return p;
}

static int *xdr_decode_fsinfo(int *p, struct nfs_fsinfo *res)
{
	res->tsize = ntohl(*p++);
	res->bsize = ntohl(*p++);
	res->blocks = ntohl(*p++);
	res->bfree = ntohl(*p++);
	res->bavail = ntohl(*p++);
	return p;
}

/*
 * One function for each procedure in the NFS protocol.
 */

int nfs_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
		     struct nfs_fattr *fattr)
{
	int *p, *p0;
	int status;
	int ruid = 0;

	PRINTK("NFS call  getattr\n");
	if (!(p0 = nfs_rpc_alloc()))
		return -EIO;
retry:
	p = nfs_rpc_header(p0, NFSPROC_GETATTR, ruid);
	p = xdr_encode_fhandle(p, fhandle);
	if ((status = nfs_rpc_call(server, p0, p)) < 0) {
		nfs_rpc_free(p0);
		return status;
	}
	if (!(p = nfs_rpc_verify(p0)))
		status = NFSERR_IO;
	else if ((status = ntohl(*p++)) == NFS_OK) {
		p = xdr_decode_fattr(p, fattr);
		PRINTK("NFS reply getattr\n");
	}
	else {
		if (!ruid && current->euid == 0 && current->uid != 0) {
			ruid = 1;
			goto retry;
		}
		PRINTK("NFS reply getattr failed = %d\n", status);
	}
	nfs_rpc_free(p0);
	return -nfs_stat_to_errno(status);
}

int nfs_proc_setattr(struct nfs_server *server, struct nfs_fh *fhandle,
		     struct nfs_sattr *sattr, struct nfs_fattr *fattr)
{
	int *p, *p0;
	int status;
	int ruid = 0;

	PRINTK("NFS call  setattr\n");
	if (!(p0 = nfs_rpc_alloc()))
		return -EIO;
retry:
	p = nfs_rpc_header(p0, NFSPROC_SETATTR, ruid);
	p = xdr_encode_fhandle(p, fhandle);
	p = xdr_encode_sattr(p, sattr);
	if ((status = nfs_rpc_call(server, p0, p)) < 0) {
		nfs_rpc_free(p0);
		return status;
	}
	if (!(p = nfs_rpc_verify(p0)))
		status = NFSERR_IO;
	else if ((status = ntohl(*p++)) == NFS_OK) {
		p = xdr_decode_fattr(p, fattr);
		PRINTK("NFS reply setattr\n");
	}
	else {
		if (!ruid && current->euid == 0 && current->uid != 0) {
			ruid = 1;
			goto retry;
		}
		PRINTK("NFS reply setattr failed = %d\n", status);
	}
	nfs_rpc_free(p0);
	return -nfs_stat_to_errno(status);
}

int nfs_proc_lookup(struct nfs_server *server, struct nfs_fh *dir, const char *name,
		    struct nfs_fh *fhandle, struct nfs_fattr *fattr)
{
	int *p, *p0;
	int status;
	int ruid = 0;

	PRINTK("NFS call  lookup %s\n", name);
#ifdef NFS_PROC_DEBUG
	if (!strcmp(name, "xyzzy"))
		proc_debug = 1 - proc_debug;
#endif
	if (!(p0 = nfs_rpc_alloc()))
		return -EIO;
retry:
	p = nfs_rpc_header(p0, NFSPROC_LOOKUP, ruid);
	p = xdr_encode_fhandle(p, dir);
	p = xdr_encode_string(p, name);
	if ((status = nfs_rpc_call(server, p0, p)) < 0) {
		nfs_rpc_free(p0);
		return status;
	}
	if (!(p = nfs_rpc_verify(p0)))
		status = NFSERR_IO;
	else if ((status = ntohl(*p++)) == NFS_OK) {
		p = xdr_decode_fhandle(p, fhandle);
		p = xdr_decode_fattr(p, fattr);
		PRINTK("NFS reply lookup\n");
	}
	else {
		if (!ruid && current->euid == 0 && current->uid != 0) {
			ruid = 1;
			goto retry;
		}
		PRINTK("NFS reply lookup failed = %d\n", status);
	}
	nfs_rpc_free(p0);
	return -nfs_stat_to_errno(status);
}

int nfs_proc_readlink(struct nfs_server *server, struct nfs_fh *fhandle,
		      char *res)
{
	int *p, *p0;
	int status;
	int ruid = 0;

	PRINTK("NFS call  readlink\n");
	if (!(p0 = nfs_rpc_alloc()))
		return -EIO;
retry:
	p = nfs_rpc_header(p0, NFSPROC_READLINK, ruid);
	p = xdr_encode_fhandle(p, fhandle);
	if ((status = nfs_rpc_call(server, p0, p)) < 0) {
		nfs_rpc_free(p0);
		return status;
	}
	if (!(p = nfs_rpc_verify(p0)))
		status = NFSERR_IO;
	else if ((status = ntohl(*p++)) == NFS_OK) {
		if (!(p = xdr_decode_string(p, res, NFS_MAXPATHLEN))) {
			printk("nfs_proc_readlink: giant pathname\n");
			status = NFSERR_IO;
		}
		else
			PRINTK("NFS reply readlink %s\n", res);
	}
	else {
		if (!ruid && current->euid == 0 && current->uid != 0) {
			ruid = 1;
			goto retry;
		}
		PRINTK("NFS reply readlink failed = %d\n", status);
	}
	nfs_rpc_free(p0);
	return -nfs_stat_to_errno(status);
}

int nfs_proc_read(struct nfs_server *server, struct nfs_fh *fhandle,
		  int offset, int count, char *data, struct nfs_fattr *fattr)
{
	int *p, *p0;
	int status;
	int ruid = 0;
	int len = 0; /* = 0 is for gcc */

	PRINTK("NFS call  read %d @ %d\n", count, offset);
	if (!(p0 = nfs_rpc_alloc()))
		return -EIO;
retry:
	p = nfs_rpc_header(p0, NFSPROC_READ, ruid);
	p = xdr_encode_fhandle(p, fhandle);
	*p++ = htonl(offset);
	*p++ = htonl(count);
	*p++ = htonl(count); /* traditional, could be any value */
	if ((status = nfs_rpc_call(server, p0, p)) < 0) {
		nfs_rpc_free(p0);
		return status;
	}
	if (!(p = nfs_rpc_verify(p0)))
		status = NFSERR_IO;
	else if ((status = ntohl(*p++)) == NFS_OK) {
		p = xdr_decode_fattr(p, fattr);
		if (!(p = xdr_decode_data(p, data, &len, count))) {
			printk("nfs_proc_read: giant data size\n"); 
			status = NFSERR_IO;
		}
		else
			PRINTK("NFS reply read %d\n", len);
	}
	else {
		if (!ruid && current->euid == 0 && current->uid != 0) {
			ruid = 1;
			goto retry;
		}
		PRINTK("NFS reply read failed = %d\n", status);
	}
	nfs_rpc_free(p0);
	return (status == NFS_OK) ? len : -nfs_stat_to_errno(status);
}

int nfs_proc_write(struct nfs_server *server, struct nfs_fh *fhandle,
		   int offset, int count, char *data, struct nfs_fattr *fattr)
{
	int *p, *p0;
	int status;
	int ruid = 0;

	PRINTK("NFS call  write %d @ %d\n", count, offset);
	if (!(p0 = nfs_rpc_alloc()))
		return -EIO;
retry:
	p = nfs_rpc_header(p0, NFSPROC_WRITE, ruid);
	p = xdr_encode_fhandle(p, fhandle);
	*p++ = htonl(offset); /* traditional, could be any value */
	*p++ = htonl(offset);
	*p++ = htonl(count); /* traditional, could be any value */
	p = xdr_encode_data(p, data, count);
	if ((status = nfs_rpc_call(server, p0, p)) < 0) {
		nfs_rpc_free(p0);
		return status;
	}
	if (!(p = nfs_rpc_verify(p0)))
		status = NFSERR_IO;
	else if ((status = ntohl(*p++)) == NFS_OK) {
		p = xdr_decode_fattr(p, fattr);
		PRINTK("NFS reply write\n");
	}
	else {
		if (!ruid && current->euid == 0 && current->uid != 0) {
			ruid = 1;
			goto retry;
		}
		PRINTK("NFS reply write failed = %d\n", status);
	}
	nfs_rpc_free(p0);
	return -nfs_stat_to_errno(status);
}

int nfs_proc_create(struct nfs_server *server, struct nfs_fh *dir,
		    const char *name, struct nfs_sattr *sattr,
		    struct nfs_fh *fhandle, struct nfs_fattr *fattr)
{
	int *p, *p0;
	int status;
	int ruid = 0;

	PRINTK("NFS call  create %s\n", name);
	if (!(p0 = nfs_rpc_alloc()))
		return -EIO;
retry:
	p = nfs_rpc_header(p0, NFSPROC_CREATE, ruid);
	p = xdr_encode_fhandle(p, dir);
	p = xdr_encode_string(p, name);
	p = xdr_encode_sattr(p, sattr);
	if ((status = nfs_rpc_call(server, p0, p)) < 0) {
		nfs_rpc_free(p0);
		return status;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美女视频一区二区在线观看| 午夜精品爽啪视频| 欧美国产乱子伦| 久久久久国产一区二区三区四区| www成人在线观看| 精品国产露脸精彩对白 | 国产午夜精品一区二区三区嫩草 | 欧美在线观看视频一区二区三区| 91蜜桃免费观看视频| 色就色 综合激情| 欧美综合亚洲图片综合区| 在线观看亚洲成人| 欧美日韩国产欧美日美国产精品| 欧美日韩精品一区视频| 91精品久久久久久久99蜜桃| 日韩一区二区三区精品视频| 精品国产免费一区二区三区四区 | 亚洲精品少妇30p| 香蕉久久夜色精品国产使用方法| 亚洲h动漫在线| 久久国产精品露脸对白| 国产精品一区免费视频| 9i看片成人免费高清| 在线观看视频一区| 欧美一卡在线观看| 久久免费的精品国产v∧| 国产精品福利av| 午夜视频一区二区三区| 久久国产综合精品| 丁香婷婷综合网| 欧美亚洲丝袜传媒另类| 日韩欧美一级精品久久| 中文字幕欧美日韩一区| 一级做a爱片久久| 狠狠色丁香婷婷综合| 粉嫩av一区二区三区| 欧美天天综合网| 26uuu色噜噜精品一区二区| 中文字幕一区视频| 日日噜噜夜夜狠狠视频欧美人| 久久99国产精品尤物| 成人福利在线看| 欧美日韩高清一区| 国产日韩欧美不卡在线| 亚洲国产一二三| 国产精品99久久久久久似苏梦涵 | 欧美亚洲高清一区二区三区不卡| 91精品国产欧美一区二区成人| 国产色一区二区| 一个色在线综合| 国产一区二区三区免费在线观看| 91性感美女视频| 精品99999| 亚洲一区二区视频在线观看| 精品一区二区三区日韩| 日本高清不卡一区| 国产日韩欧美亚洲| 日本欧美久久久久免费播放网| 成人污视频在线观看| 日韩一区二区三区电影| 一区二区三区精密机械公司| 国产一区二区三区久久悠悠色av| 欧美影片第一页| 欧美高清在线一区| 老司机午夜精品99久久| 在线视频一区二区三区| 国产精品欧美经典| 紧缚奴在线一区二区三区| 精品视频在线免费观看| 国产精品久久久久aaaa樱花| 久久精品国产亚洲aⅴ| 欧美日韩在线免费视频| 国产精品久久久久久久久果冻传媒| 美女视频黄频大全不卡视频在线播放| 色av综合在线| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲午夜久久久久久久久久久| 成人性色生活片| 欧美va在线播放| 丝袜美腿一区二区三区| 91久久精品一区二区| 国产精品日韩成人| 国产成人精品亚洲日本在线桃色 | 久久天天做天天爱综合色| 天堂资源在线中文精品| 日本二三区不卡| 成人免费在线视频观看| 成人中文字幕电影| 久久蜜桃av一区精品变态类天堂| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美亚一区二区| 亚洲一卡二卡三卡四卡| 色吧成人激情小说| 一区二区三区中文字幕| 97国产一区二区| 亚洲欧美在线视频观看| jvid福利写真一区二区三区| 亚洲国产精品高清| 成人免费av资源| 国产精品理论在线观看| 99久久精品久久久久久清纯| 国产精品毛片大码女人| av影院午夜一区| 亚洲免费色视频| 欧美亚洲免费在线一区| 亚洲bt欧美bt精品| 91精品国产麻豆国产自产在线| 丝袜a∨在线一区二区三区不卡| 欧美浪妇xxxx高跟鞋交| 丝袜美腿亚洲综合| 欧美成人a∨高清免费观看| 韩国一区二区视频| 国产视频一区不卡| 91在线观看地址| 亚洲午夜免费电影| 日韩区在线观看| 国产一区二三区好的| 国产精品女主播av| 色88888久久久久久影院野外 | 99精品视频中文字幕| 亚洲伦在线观看| 欧美日韩色一区| 蜜桃免费网站一区二区三区| 久久嫩草精品久久久精品| 成人app软件下载大全免费| 亚洲九九爱视频| 欧美高清性hdvideosex| 经典一区二区三区| 中文字幕日韩一区| 欧美久久一二区| 国产一区二区久久| 日韩一区中文字幕| 欧美日本在线视频| 国产精品一区在线| 一区二区三区四区五区视频在线观看 | 欧洲亚洲精品在线| 麻豆91精品91久久久的内涵| 中文一区一区三区高中清不卡| 色哟哟欧美精品| 免费的成人av| 日韩毛片高清在线播放| 欧美高清激情brazzers| 国产在线播放一区| 亚洲美女屁股眼交3| 日韩一级免费观看| 懂色av一区二区三区蜜臀| 亚洲国产精品自拍| 久久精品视频在线免费观看| 色欧美日韩亚洲| 国产中文字幕精品| 一区二区三区成人| 精品99一区二区三区| 欧美在线看片a免费观看| 精品一区二区三区在线播放视频| 国产精品不卡在线| 91精品欧美久久久久久动漫| 成人教育av在线| 日本欧美韩国一区三区| 亚洲女同女同女同女同女同69| 日韩欧美不卡在线观看视频| 色婷婷综合久久久久中文| 九色综合狠狠综合久久| 一区二区三区在线免费播放| 2020国产精品| 欧美日韩国产精品成人| 成人av网站免费观看| 蜜桃视频在线观看一区二区| 亚洲精品亚洲人成人网在线播放| 久久久综合精品| 日韩一二三四区| 91高清视频免费看| 不卡影院免费观看| 精品亚洲porn| 日韩成人av影视| 亚洲国产aⅴ天堂久久| 国产精品美女久久久久久久久| 精品女同一区二区| 欧美视频一二三区| 色婷婷精品大视频在线蜜桃视频| 国产精品一区二区免费不卡| 日本不卡视频在线| 亚洲一二三专区| 亚洲欧美aⅴ...| 91久久精品国产91性色tv| 亚洲国产高清aⅴ视频| 蜜臀av性久久久久av蜜臀妖精 | 欧美国产日韩一二三区| 91麻豆精品国产91久久久资源速度| 97精品国产露脸对白| 懂色av一区二区夜夜嗨| 日韩电影一区二区三区| 亚洲另类一区二区| 91精品国产高清一区二区三区蜜臀 | 久久国产精品色| 免费观看久久久4p| 美腿丝袜在线亚洲一区| 五月婷婷久久综合| 亚洲成人av一区二区三区| 亚洲黄网站在线观看| 亚洲乱码国产乱码精品精可以看|