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

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

?? dir.c

?? 完整的1.0代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  linux/fs/nfs/dir.c * *  Copyright (C) 1992  Rick Sladkey * *  nfs directory handling functions */#include <linux/sched.h>#include <linux/errno.h>#include <linux/stat.h>#include <linux/nfs_fs.h>#include <linux/fcntl.h>#include <linux/string.h>#include <linux/kernel.h>#include <linux/malloc.h>#include <linux/mm.h>#include <asm/segment.h>	/* for fs functions */static int nfs_dir_read(struct inode *, struct file *filp, char *buf,			int count);static int nfs_readdir(struct inode *, struct file *, struct dirent *, int);static int nfs_lookup(struct inode *dir, const char *name, int len,		      struct inode **result);static int nfs_create(struct inode *dir, const char *name, int len, int mode,		      struct inode **result);static int nfs_mkdir(struct inode *dir, const char *name, int len, int mode);static int nfs_rmdir(struct inode *dir, const char *name, int len);static int nfs_unlink(struct inode *dir, const char *name, int len);static int nfs_symlink(struct inode *inode, const char *name, int len,		       const char *symname);static int nfs_link(struct inode *oldinode, struct inode *dir,		    const char *name, int len);static int nfs_mknod(struct inode *dir, const char *name, int len, int mode,		     int rdev);static int nfs_rename(struct inode *old_dir, const char *old_name,		      int old_len, struct inode *new_dir, const char *new_name,		      int new_len);static struct file_operations nfs_dir_operations = {	NULL,			/* lseek - default */	nfs_dir_read,		/* read - bad */	NULL,			/* write - bad */	nfs_readdir,		/* readdir */	NULL,			/* select - default */	NULL,			/* ioctl - default */	NULL,			/* mmap */	NULL,			/* no special open code */	NULL,			/* no special release code */	NULL			/* fsync */};struct inode_operations nfs_dir_inode_operations = {	&nfs_dir_operations,	/* default directory file-ops */	nfs_create,		/* create */	nfs_lookup,		/* lookup */	nfs_link,		/* link */	nfs_unlink,		/* unlink */	nfs_symlink,		/* symlink */	nfs_mkdir,		/* mkdir */	nfs_rmdir,		/* rmdir */	nfs_mknod,		/* mknod */	nfs_rename,		/* rename */	NULL,			/* readlink */	NULL,			/* follow_link */	NULL,			/* bmap */	NULL,			/* truncate */	NULL			/* permission */};static int nfs_dir_read(struct inode *inode, struct file *filp, char *buf,			int count){	return -EISDIR;}/* * We need to do caching of directory entries to prevent an * incredible amount of RPC traffic.  Only the most recent open * directory is cached.  This seems sufficient for most purposes. * Technically, we ought to flush the cache on close but this is * not a problem in practice. */static int nfs_readdir(struct inode *inode, struct file *filp,		       struct dirent *dirent, int count){	static int c_dev = 0;	static int c_ino;	static int c_size;	static struct nfs_entry *c_entry = NULL;	int result;	int i;	struct nfs_entry *entry;	if (!inode || !S_ISDIR(inode->i_mode)) {		printk("nfs_readdir: inode is NULL or not a directory\n");		return -EBADF;	}	/* initialize cache memory if it hasn't been used before */	if (c_entry == NULL) {		i = sizeof (struct nfs_entry)*NFS_READDIR_CACHE_SIZE;		c_entry = (struct nfs_entry *) kmalloc(i, GFP_KERNEL);		for (i = 0; i < NFS_READDIR_CACHE_SIZE; i++) {			c_entry[i].name = (char *) kmalloc(NFS_MAXNAMLEN + 1,				GFP_KERNEL);		}	}	entry = NULL;	/* try to find it in the cache */	if (inode->i_dev == c_dev && inode->i_ino == c_ino) {		for (i = 0; i < c_size; i++) {			if (filp->f_pos == c_entry[i].cookie) {				if (i == c_size - 1) {					if (c_entry[i].eof)						return 0;				}				else					entry = c_entry + i + 1;				break;			}		}	}	/* if we didn't find it in the cache, revert to an nfs call */	if (!entry) {		result = nfs_proc_readdir(NFS_SERVER(inode), NFS_FH(inode),			filp->f_pos, NFS_READDIR_CACHE_SIZE, c_entry);		if (result < 0) {			c_dev = 0;			return result;		}		if (result > 0) {			c_dev = inode->i_dev;			c_ino = inode->i_ino;			c_size = result;			entry = c_entry + 0;		}	}	/* if we found it in the cache or from an nfs call, return results */	if (entry) {		i = strlen(entry->name);		memcpy_tofs(dirent->d_name, entry->name, i + 1);		put_fs_long(entry->fileid, &dirent->d_ino);		put_fs_word(i, &dirent->d_reclen);		filp->f_pos = entry->cookie;		return i;	}	return 0;}/* * Lookup caching is a big win for performance but this is just * a trial to see how well it works on a small scale. * For example, bash does a lookup on ".." 13 times for each path * element when running pwd.  Yes, hard to believe but true. * Try pwd in a filesystem mounted with noac. * * It trades a little cpu time and memory for a lot of network bandwidth. * Since the cache is not hashed yet, it is a good idea not to make it too * large because every lookup looks through the entire cache even * though most of them will fail. */static struct nfs_lookup_cache_entry {	int dev;	int inode;	char filename[NFS_MAXNAMLEN + 1];	struct nfs_fh fhandle;	struct nfs_fattr fattr;	int expiration_date;} nfs_lookup_cache[NFS_LOOKUP_CACHE_SIZE];static struct nfs_lookup_cache_entry *nfs_lookup_cache_index(struct inode *dir,							     const char *filename){	struct nfs_lookup_cache_entry *entry;	int i;	for (i = 0; i < NFS_LOOKUP_CACHE_SIZE; i++) {		entry = nfs_lookup_cache + i;		if (entry->dev == dir->i_dev && entry->inode == dir->i_ino		    && !strncmp(filename, entry->filename, NFS_MAXNAMLEN))			return entry;	}	return NULL;}static int nfs_lookup_cache_lookup(struct inode *dir, const char *filename,				   struct nfs_fh *fhandle,				   struct nfs_fattr *fattr){	static int nfs_lookup_cache_in_use = 0;	struct nfs_lookup_cache_entry *entry;	if (!nfs_lookup_cache_in_use) {		memset(nfs_lookup_cache, 0, sizeof(nfs_lookup_cache));		nfs_lookup_cache_in_use = 1;	}	if ((entry = nfs_lookup_cache_index(dir, filename))) {		if (jiffies > entry->expiration_date) {			entry->dev = 0;			return 0;		}		*fhandle = entry->fhandle;		*fattr = entry->fattr;		return 1;	}	return 0;}static void nfs_lookup_cache_add(struct inode *dir, const char *filename,				 struct nfs_fh *fhandle,				 struct nfs_fattr *fattr){	static int nfs_lookup_cache_pos = 0;	struct nfs_lookup_cache_entry *entry;	/* compensate for bug in SGI NFS server */	if (fattr->size == -1 || fattr->uid == -1 || fattr->gid == -1	    || fattr->atime.seconds == -1 || fattr->mtime.seconds == -1)		return;	if (!(entry = nfs_lookup_cache_index(dir, filename))) {		entry = nfs_lookup_cache + nfs_lookup_cache_pos++;		if (nfs_lookup_cache_pos == NFS_LOOKUP_CACHE_SIZE)			nfs_lookup_cache_pos = 0;	}	entry->dev = dir->i_dev;	entry->inode = dir->i_ino;	strcpy(entry->filename, filename);	entry->fhandle = *fhandle;	entry->fattr = *fattr;	entry->expiration_date = jiffies + (S_ISDIR(fattr->mode)		? NFS_SERVER(dir)->acdirmax : NFS_SERVER(dir)->acregmax);}static void nfs_lookup_cache_remove(struct inode *dir, struct inode *inode,				    const char *filename){	struct nfs_lookup_cache_entry *entry;	int dev;	int fileid;	int i;	if (inode) {		dev = inode->i_dev;		fileid = inode->i_ino;	}	else if ((entry = nfs_lookup_cache_index(dir, filename))) {		dev = entry->dev;		fileid = entry->fattr.fileid;	}	else		return;	for (i = 0; i < NFS_LOOKUP_CACHE_SIZE; i++) {		entry = nfs_lookup_cache + i;		if (entry->dev == dev && entry->fattr.fileid == fileid)			entry->dev = 0;	}}static void nfs_lookup_cache_refresh(struct inode *file,				     struct nfs_fattr *fattr){	struct nfs_lookup_cache_entry *entry;	int dev = file->i_dev;	int fileid = file->i_ino;	int i;	for (i = 0; i < NFS_LOOKUP_CACHE_SIZE; i++) {		entry = nfs_lookup_cache + i;		if (entry->dev == dev && entry->fattr.fileid == fileid)			entry->fattr = *fattr;	}}static int nfs_lookup(struct inode *dir, const char *__name, int len,		      struct inode **result){	struct nfs_fh fhandle;	struct nfs_fattr fattr;	char name[len > NFS_MAXNAMLEN? 1 : len+1];	int error;	*result = NULL;	if (!dir || !S_ISDIR(dir->i_mode)) {		printk("nfs_lookup: inode is NULL or not a directory\n");		iput(dir);		return -ENOENT;	}	if (len > NFS_MAXNAMLEN) {		iput(dir);		return -ENAMETOOLONG;	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品伊人色| 成人午夜大片免费观看| 亚洲天堂久久久久久久| 国产午夜精品在线观看| 久久久久国产精品人| 337p日本欧洲亚洲大胆色噜噜| 日韩一区二区麻豆国产| 在线播放中文一区| 日韩欧美一区电影| 久久久蜜桃精品| 国产欧美精品国产国产专区| 亚洲欧洲av在线| 亚洲免费在线电影| 亚洲福利视频导航| 国产综合一区二区| av电影在线不卡| 欧美日韩国产电影| 久久久精品日韩欧美| 国产精品国产三级国产aⅴ无密码| 亚洲欧洲日韩一区二区三区| 一区二区三区不卡视频| 免费的国产精品| 成人影视亚洲图片在线| 在线免费亚洲电影| 日韩视频中午一区| 国产精品成人在线观看| 亚洲成人动漫av| 国产一二三精品| 欧美日韩精品一区二区三区 | 天使萌一区二区三区免费观看| 亚洲国产综合在线| 国产自产v一区二区三区c| 99久精品国产| 精品久久久久久久人人人人传媒 | 久久久久国产一区二区三区四区| 国产精品污网站| 日韩中文欧美在线| 成人免费三级在线| 日韩欧美在线一区二区三区| 国产精品天天看| 精品一区二区在线观看| 91香蕉视频mp4| 久久久久综合网| 午夜影院在线观看欧美| 成人午夜伦理影院| 日韩写真欧美这视频| 日韩理论电影院| 国产一区二区三区久久久| 欧美丝袜丝nylons| 中文字幕在线一区| 国产一区二区三区黄视频 | 欧美va亚洲va国产综合| 亚洲日本丝袜连裤袜办公室| 国产在线国偷精品免费看| 91国偷自产一区二区三区成为亚洲经典 | 精品国产亚洲在线| 亚洲风情在线资源站| 成人av免费在线播放| 精品国产乱码久久久久久免费| 亚洲一区二区免费视频| 97精品视频在线观看自产线路二| 精品国产91亚洲一区二区三区婷婷| 一区二区三区成人| 色94色欧美sute亚洲线路二 | 亚洲乱码国产乱码精品精98午夜 | 亚洲成在人线免费| 色爱区综合激月婷婷| 中文字幕亚洲视频| 成人av资源在线观看| 国产精品美女久久久久aⅴ| 国产精品白丝av| 久久你懂得1024| 国产精品538一区二区在线| 久久夜色精品国产噜噜av| 国产一区二区三区免费看| 欧美α欧美αv大片| 久久99精品国产.久久久久| 日韩视频一区在线观看| 久久69国产一区二区蜜臀| 日韩欧美一级在线播放| 国内精品伊人久久久久av影院| 精品国产免费久久| 国产麻豆精品一区二区| 国产精品久久久久影院亚瑟 | 97久久超碰国产精品| 亚洲精品一卡二卡| 欧美色综合影院| 美美哒免费高清在线观看视频一区二区 | 91在线免费视频观看| 亚洲精品写真福利| 制服丝袜av成人在线看| 久久草av在线| 国产精品久久久久久久久久久免费看| 99re8在线精品视频免费播放| 一区二区激情视频| 日韩女同互慰一区二区| 国产馆精品极品| 一区二区三区波多野结衣在线观看| 欧美日韩国产精品自在自线| 韩国中文字幕2020精品| 亚洲欧美激情在线| 日韩欧美一二三区| 99久久99久久精品国产片果冻| 亚洲国产婷婷综合在线精品| 精品免费视频.| 91色视频在线| 国产一区免费电影| 亚洲综合激情另类小说区| 精品国精品国产| 欧美综合欧美视频| 国产成人av自拍| 丝袜诱惑亚洲看片| 国产女人aaa级久久久级| 69精品人人人人| 99久久久久久| 久久国产麻豆精品| 亚洲一区影音先锋| 国产亚洲制服色| 3d动漫精品啪啪1区2区免费 | 视频在线观看一区二区三区| 久久嫩草精品久久久精品| 欧美日韩精品欧美日韩精品一综合| 国内国产精品久久| 午夜日韩在线电影| 国产精品久久久久久久久免费相片| 8v天堂国产在线一区二区| 91麻豆自制传媒国产之光| 久久aⅴ国产欧美74aaa| 天堂va蜜桃一区二区三区漫画版| 亚洲色图一区二区三区| 2020国产精品久久精品美国| 欧美精品自拍偷拍| 欧洲精品中文字幕| 成人影视亚洲图片在线| 国产老肥熟一区二区三区| 日韩专区欧美专区| 一级女性全黄久久生活片免费| 国产精品久久久久一区二区三区共 | 久久精品一区二区三区不卡牛牛| 欧美丝袜丝nylons| 在线免费观看不卡av| 不卡大黄网站免费看| 成人永久免费视频| 国产成a人亚洲| 国产精品888| 国产成人精品免费视频网站| 国产精品综合久久| 国产精品伊人色| 成人手机在线视频| 成人手机电影网| 91麻豆免费看| 日本电影亚洲天堂一区| 在线观看一区二区视频| 在线观看视频一区二区 | 国产一区999| 国产v综合v亚洲欧| a亚洲天堂av| 在线观看日韩av先锋影音电影院| 色偷偷久久一区二区三区| 91在线无精精品入口| av成人免费在线观看| 97成人超碰视| 91视频在线观看| 欧美日韩国产系列| 91精品国产乱| 国产日韩v精品一区二区| 国产精品久久久久久久岛一牛影视 | 亚洲精品免费播放| 一区二区三区四区不卡视频| 亚洲一区二区三区自拍| 日韩在线一区二区| 精品一区二区三区在线播放视频| 国产成人免费高清| 色天天综合色天天久久| 欧美精品v国产精品v日韩精品 | 日韩天堂在线观看| 久久久久国色av免费看影院| 国产精品久久久久久久久免费樱桃 | 国产女人18毛片水真多成人如厕| 中文字幕日韩一区二区| 亚洲国产综合在线| 国产高清成人在线| 欧美在线999| 国产三级精品视频| 亚洲va在线va天堂| 国产一区二区三区在线观看免费| 91蜜桃免费观看视频| 欧美一区二区精品| 国产精品久久久久婷婷二区次| 亚洲国产精品久久久久婷婷884| 久久99国产精品久久| 色老头久久综合| 精品欧美乱码久久久久久1区2区| 亚洲三级免费电影| 国产在线精品不卡| 欧美高清你懂得| 日韩一区在线免费观看| 精品一区二区三区欧美| 欧美日韩在线免费视频| 国产精品欧美经典|