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

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

?? inode.c

?? 適合linux的新手使用,很經典,簡單,方便.
?? C
字號:
/* *  linux/fs/inode.c * *  (C) 1991  Linus Torvalds */#include <string.h>#include <sys/stat.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/mm.h>#include <asm/system.h>struct m_inode inode_table[NR_INODE]={{0,},};static void read_inode(struct m_inode * inode);static void write_inode(struct m_inode * inode);static inline void wait_on_inode(struct m_inode * inode){	cli();	while (inode->i_lock)		sleep_on(&inode->i_wait);	sti();}static inline void lock_inode(struct m_inode * inode){	cli();	while (inode->i_lock)		sleep_on(&inode->i_wait);	inode->i_lock=1;	sti();}static inline void unlock_inode(struct m_inode * inode){	inode->i_lock=0;	wake_up(&inode->i_wait);}void invalidate_inodes(int dev){	int i;	struct m_inode * inode;	inode = 0+inode_table;	for(i=0 ; i<NR_INODE ; i++,inode++) {		wait_on_inode(inode);		if (inode->i_dev == dev) {			if (inode->i_count)				printk("inode in use on removed disk\n\r");			inode->i_dev = inode->i_dirt = 0;		}	}}void sync_inodes(void){	int i;	struct m_inode * inode;	inode = 0+inode_table;	for(i=0 ; i<NR_INODE ; i++,inode++) {		wait_on_inode(inode);		if (inode->i_dirt && !inode->i_pipe)			write_inode(inode);	}}static int _bmap(struct m_inode * inode,int block,int create){	struct buffer_head * bh;	int i;	if (block<0)		panic("_bmap: block<0");	if (block >= 7+512+512*512)		panic("_bmap: block>big");	if (block<7) {		if (create && !inode->i_zone[block])			if (inode->i_zone[block]=new_block(inode->i_dev)) {				inode->i_ctime=CURRENT_TIME;				inode->i_dirt=1;			}		return inode->i_zone[block];	}	block -= 7;	if (block<512) {		if (create && !inode->i_zone[7])			if (inode->i_zone[7]=new_block(inode->i_dev)) {				inode->i_dirt=1;				inode->i_ctime=CURRENT_TIME;			}		if (!inode->i_zone[7])			return 0;		if (!(bh = bread(inode->i_dev,inode->i_zone[7])))			return 0;		i = ((unsigned short *) (bh->b_data))[block];		if (create && !i)			if (i=new_block(inode->i_dev)) {				((unsigned short *) (bh->b_data))[block]=i;				bh->b_dirt=1;			}		brelse(bh);		return i;	}	block -= 512;	if (create && !inode->i_zone[8])		if (inode->i_zone[8]=new_block(inode->i_dev)) {			inode->i_dirt=1;			inode->i_ctime=CURRENT_TIME;		}	if (!inode->i_zone[8])		return 0;	if (!(bh=bread(inode->i_dev,inode->i_zone[8])))		return 0;	i = ((unsigned short *)bh->b_data)[block>>9];	if (create && !i)		if (i=new_block(inode->i_dev)) {			((unsigned short *) (bh->b_data))[block>>9]=i;			bh->b_dirt=1;		}	brelse(bh);	if (!i)		return 0;	if (!(bh=bread(inode->i_dev,i)))		return 0;	i = ((unsigned short *)bh->b_data)[block&511];	if (create && !i)		if (i=new_block(inode->i_dev)) {			((unsigned short *) (bh->b_data))[block&511]=i;			bh->b_dirt=1;		}	brelse(bh);	return i;}int bmap(struct m_inode * inode,int block){	return _bmap(inode,block,0);}int create_block(struct m_inode * inode, int block){	return _bmap(inode,block,1);}		void iput(struct m_inode * inode){	if (!inode)		return;	wait_on_inode(inode);	if (!inode->i_count)		panic("iput: trying to free free inode");	if (inode->i_pipe) {		wake_up(&inode->i_wait);		if (--inode->i_count)			return;		free_page(inode->i_size);		inode->i_count=0;		inode->i_dirt=0;		inode->i_pipe=0;		return;	}	if (!inode->i_dev) {		inode->i_count--;		return;	}	if (S_ISBLK(inode->i_mode)) {		sync_dev(inode->i_zone[0]);		wait_on_inode(inode);	}repeat:	if (inode->i_count>1) {		inode->i_count--;		return;	}	if (!inode->i_nlinks) {		truncate(inode);		free_inode(inode);		return;	}	if (inode->i_dirt) {		write_inode(inode);	/* we can sleep - so do again */		wait_on_inode(inode);		goto repeat;	}	inode->i_count--;	return;}struct m_inode * get_empty_inode(void){	struct m_inode * inode;	static struct m_inode * last_inode = inode_table;	int i;	do {		inode = NULL;		for (i = NR_INODE; i ; i--) {			if (++last_inode >= inode_table + NR_INODE)				last_inode = inode_table;			if (!last_inode->i_count) {				inode = last_inode;				if (!inode->i_dirt && !inode->i_lock)					break;			}		}		if (!inode) {			for (i=0 ; i<NR_INODE ; i++)				printk("%04x: %6d\t",inode_table[i].i_dev,					inode_table[i].i_num);			panic("No free inodes in mem");		}		wait_on_inode(inode);		while (inode->i_dirt) {			write_inode(inode);			wait_on_inode(inode);		}	} while (inode->i_count);	memset(inode,0,sizeof(*inode));	inode->i_count = 1;	return inode;}struct m_inode * get_pipe_inode(void){	struct m_inode * inode;	if (!(inode = get_empty_inode()))		return NULL;	if (!(inode->i_size=get_free_page())) {		inode->i_count = 0;		return NULL;	}	inode->i_count = 2;	/* sum of readers/writers */	PIPE_HEAD(*inode) = PIPE_TAIL(*inode) = 0;	inode->i_pipe = 1;	return inode;}struct m_inode * iget(int dev,int nr){	struct m_inode * inode, * empty;	if (!dev)		panic("iget with dev==0");	empty = get_empty_inode();	inode = inode_table;	while (inode < NR_INODE+inode_table) {		if (inode->i_dev != dev || inode->i_num != nr) {			inode++;			continue;		}		wait_on_inode(inode);		if (inode->i_dev != dev || inode->i_num != nr) {			inode = inode_table;			continue;		}		inode->i_count++;		if (inode->i_mount) {			int i;			for (i = 0 ; i<NR_SUPER ; i++)				if (super_block[i].s_imount==inode)					break;			if (i >= NR_SUPER) {				printk("Mounted inode hasn't got sb\n");				if (empty)					iput(empty);				return inode;			}			iput(inode);			dev = super_block[i].s_dev;			nr = ROOT_INO;			inode = inode_table;			continue;		}		if (empty)			iput(empty);		return inode;	}	if (!empty)		return (NULL);	inode=empty;	inode->i_dev = dev;	inode->i_num = nr;	read_inode(inode);	return inode;}static void read_inode(struct m_inode * inode){	struct super_block * sb;	struct buffer_head * bh;	int block;	lock_inode(inode);	if (!(sb=get_super(inode->i_dev)))		panic("trying to read inode without dev");	block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks +		(inode->i_num-1)/INODES_PER_BLOCK;	if (!(bh=bread(inode->i_dev,block)))		panic("unable to read i-node block");	*(struct d_inode *)inode =		((struct d_inode *)bh->b_data)			[(inode->i_num-1)%INODES_PER_BLOCK];	brelse(bh);	unlock_inode(inode);}static void write_inode(struct m_inode * inode){	struct super_block * sb;	struct buffer_head * bh;	int block;	lock_inode(inode);	if (!inode->i_dirt || !inode->i_dev) {		unlock_inode(inode);		return;	}	if (!(sb=get_super(inode->i_dev)))		panic("trying to write inode without device");	block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks +		(inode->i_num-1)/INODES_PER_BLOCK;	if (!(bh=bread(inode->i_dev,block)))		panic("unable to read i-node block");	((struct d_inode *)bh->b_data)		[(inode->i_num-1)%INODES_PER_BLOCK] =			*(struct d_inode *)inode;	bh->b_dirt=1;	inode->i_dirt=0;	brelse(bh);	unlock_inode(inode);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
无码av免费一区二区三区试看| 国产精品五月天| 一区二区免费看| 在线观看日韩精品| 一区二区免费看| 日韩亚洲欧美在线| 韩日av一区二区| 欧美经典三级视频一区二区三区| 成av人片一区二区| 成人免费小视频| 欧美日韩日本视频| 美女性感视频久久| 中文无字幕一区二区三区| 成人晚上爱看视频| 一区二区三区在线观看欧美| 56国语精品自产拍在线观看| 蜜臀av一级做a爰片久久| 国产三级久久久| 91视频在线看| 亚洲欧洲国产专区| 99九九99九九九视频精品| 尤物视频一区二区| 欧美一区二区在线观看| 国产在线精品一区二区不卡了| 欧美激情一区三区| 欧美日韩一区三区四区| 极品少妇xxxx偷拍精品少妇| 中文字幕在线观看一区| 7799精品视频| 成人av影院在线| 日本不卡视频一二三区| 亚洲国产精品国自产拍av| 欧美日韩在线精品一区二区三区激情| 久草在线在线精品观看| 中文字幕字幕中文在线中不卡视频| 欧美理论电影在线| 成人免费三级在线| 日韩黄色免费电影| 亚洲精品成人天堂一二三| 欧美va亚洲va在线观看蝴蝶网| 成人av片在线观看| 国内成人免费视频| 亚洲成av人片一区二区梦乃| 99精品视频中文字幕| 日韩高清中文字幕一区| 久久精品一二三| 欧美体内she精视频| 国产成+人+日韩+欧美+亚洲| 午夜精品福利一区二区三区蜜桃| 国产精品无遮挡| 日韩欧美久久一区| 欧美三电影在线| av在线不卡电影| 国产酒店精品激情| 日韩影院免费视频| 亚洲一区二区三区四区在线观看| 国产精品视频在线看| 欧美成人一区二区三区在线观看| 欧美色网一区二区| 91在线看国产| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 国产精品久久久久久久久久久免费看| 91精品国产综合久久久久久漫画 | 国产精品沙发午睡系列990531| 欧美性色aⅴ视频一区日韩精品| 国产一区二区三区黄视频 | 国产色综合一区| 日韩欧美电影一二三| 91麻豆精品国产自产在线观看一区| bt7086福利一区国产| 成人精品小蝌蚪| 国产成人免费视频精品含羞草妖精 | 欧美久久久久中文字幕| 在线观看免费成人| 欧美主播一区二区三区| 欧美中文字幕一区二区三区亚洲| 欧美综合欧美视频| 色欧美片视频在线观看| 91捆绑美女网站| 欧美电影免费观看高清完整版在线 | 色狠狠综合天天综合综合| 99在线精品免费| 99国产麻豆精品| 成人avav在线| 99精品热视频| 色猫猫国产区一区二在线视频| 99久久精品免费| 色乱码一区二区三区88| 欧美日韩电影一区| 91精品在线一区二区| 日韩免费一区二区三区在线播放| 日韩午夜中文字幕| 精品99999| 国产精品女人毛片| 一区二区三区精品在线观看| 亚洲成av人片www| 精品亚洲免费视频| 成人精品国产一区二区4080| 一本大道综合伊人精品热热| 欧美日韩一区不卡| 久久午夜电影网| 亚洲人成网站色在线观看| 日韩成人午夜电影| 精品国产乱码久久久久久影片| 久久精品视频在线看| 欧美美女黄视频| 欧美色精品在线视频| 欧美日韩中文国产| 欧美老肥妇做.爰bbww| 日韩一区二区中文字幕| 精品久久一二三区| 国产精品人人做人人爽人人添| 久久久一区二区三区捆绑**| 一区二区三区免费在线观看| 亚洲网友自拍偷拍| 日本女优在线视频一区二区| 亚洲男人的天堂在线aⅴ视频| 午夜精品久久久久久久蜜桃app| 日韩精品欧美精品| 国产福利精品导航| 99精品国产视频| 欧美日韩国产一二三| 欧美精品1区2区3区| 中文字幕制服丝袜一区二区三区| 亚洲综合免费观看高清在线观看| 亚洲成人激情自拍| 美女尤物国产一区| 99r精品视频| 日韩一级在线观看| 国产精品国产三级国产普通话99| 亚洲制服丝袜av| 久久国产精品99久久久久久老狼| 成人免费看黄yyy456| 91久久精品网| 中文字幕不卡三区| 日韩1区2区日韩1区2区| 丁香婷婷综合网| 国产精品免费久久| 三级欧美韩日大片在线看| 日韩成人av影视| 国产成人一区在线| 欧美日韩国产精品自在自线| 久久精品视频免费观看| 综合在线观看色| 国产很黄免费观看久久| 这里只有精品视频在线观看| 国产日韩欧美不卡| 人禽交欧美网站| 精品视频一区二区三区免费| 国产三级一区二区| 日韩激情视频网站| 欧美在线观看禁18| 中文久久乱码一区二区| 午夜在线成人av| 色婷婷久久久综合中文字幕| 国产性做久久久久久| 久色婷婷小香蕉久久| 在线观看网站黄不卡| 亚洲国产一区视频| 成人晚上爱看视频| 久久久久久久久久美女| 日韩二区三区在线观看| 色婷婷亚洲婷婷| 国产精品九色蝌蚪自拍| 国内精品久久久久影院一蜜桃| 欧美日韩黄色影视| 国产日韩av一区二区| 麻豆精品国产91久久久久久| 欧美亚洲综合另类| 欧美国产国产综合| 国产成人自拍在线| 欧美大片日本大片免费观看| 亚洲不卡av一区二区三区| 欧洲生活片亚洲生活在线观看| 国产精品免费人成网站| 色综合天天综合网国产成人综合天| 久久精品视频免费| 丰满白嫩尤物一区二区| 久久影院午夜论| 国内精品国产成人国产三级粉色 | 在线综合视频播放| 亚洲成人在线免费| 欧美日韩国产综合一区二区| 亚洲成人激情社区| 91精品免费在线| 免费观看成人鲁鲁鲁鲁鲁视频| 秋霞影院一区二区| 中文字幕一区二区三区不卡| 蜜臀91精品一区二区三区| 欧美在线不卡一区| 亚洲成人精品在线观看| 在线免费不卡电影| 蜜臀av性久久久久蜜臀av麻豆| 日韩视频在线永久播放| 国产在线视频不卡二| 国产亚洲欧美日韩日本| 色综合久久精品| 午夜精品爽啪视频| 欧美大片顶级少妇| 成人精品一区二区三区四区|