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

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

?? inode.c

?? linux 0.11源代碼
?? 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一区二区三区免费野_久草精品视频
亚洲第一成人在线| 久久精品视频免费| 天堂一区二区在线| 欧美日韩久久一区| 视频一区二区中文字幕| 欧美日韩精品一区二区三区蜜桃 | 日韩亚洲欧美中文三级| 日韩精品高清不卡| 久久综合给合久久狠狠狠97色69| 国产69精品一区二区亚洲孕妇| 国产精品你懂的在线| 91成人网在线| 日本一不卡视频| 久久综合狠狠综合久久综合88| 成人avav影音| 午夜免费欧美电影| 久久精品亚洲一区二区三区浴池| 色悠悠久久综合| 蜜臀va亚洲va欧美va天堂| 国产欧美一区二区精品婷婷| 色婷婷综合久久久久中文一区二区 | 久久蜜桃一区二区| 91性感美女视频| 日韩va亚洲va欧美va久久| 久久你懂得1024| 一本高清dvd不卡在线观看| 免费观看日韩电影| 亚洲国产电影在线观看| 欧美日韩激情一区二区三区| 极品瑜伽女神91| 一区二区三区免费在线观看| 欧美成人性福生活免费看| 一本色道综合亚洲| 国内精品视频666| 有码一区二区三区| 久久久久久久久久久久久夜| 欧美性猛片aaaaaaa做受| 国产**成人网毛片九色| 婷婷国产v国产偷v亚洲高清| 日本一区二区三区国色天香| 欧美一级在线观看| 91电影在线观看| av激情成人网| 国产在线播放一区| 天天影视色香欲综合网老头| 亚洲天堂中文字幕| 国产农村妇女精品| 欧美一二三四区在线| 91久久精品一区二区三| 成人av网站在线观看免费| 蜜桃视频在线观看一区| 亚洲国产成人91porn| 中文字幕日本不卡| 国产亚洲成av人在线观看导航| 69av一区二区三区| 欧日韩精品视频| 99热99精品| 成人动漫一区二区在线| 国产尤物一区二区| 久久激情五月激情| 蜜桃视频一区二区三区在线观看 | 一色桃子久久精品亚洲| 日韩欧美亚洲另类制服综合在线| 欧美日韩一级二级| 欧美日韩视频一区二区| 在线国产电影不卡| 欧洲一区二区三区在线| 色婷婷亚洲一区二区三区| 91一区二区在线| eeuss影院一区二区三区| 国产91在线观看| 成人综合在线观看| 成人免费毛片高清视频| 懂色av一区二区夜夜嗨| 国产99久久久国产精品潘金| 国产精品自在欧美一区| 欧美三级电影在线看| 91蜜桃传媒精品久久久一区二区| 成人免费视频一区二区| 国内外成人在线| 国产aⅴ综合色| 99久久婷婷国产| 色欧美片视频在线观看在线视频| 色婷婷亚洲一区二区三区| 在线一区二区观看| 欧美日韩一级二级三级| 91精品国产综合久久久久久漫画 | 欧美人牲a欧美精品| 欧美日韩免费观看一区二区三区| 欧美日韩视频一区二区| 3d动漫精品啪啪1区2区免费 | 久久精品夜夜夜夜久久| 国产精品欧美久久久久一区二区| 国产精品国产三级国产普通话99| 中文字幕日韩一区二区| 一区二区三区精品视频在线| 日本三级亚洲精品| 国产精品综合一区二区三区| 99精品一区二区三区| 欧美午夜免费电影| 精品欧美乱码久久久久久 | 亚洲国产一区二区a毛片| 青青国产91久久久久久| 国产一区二区三区日韩 | 日韩精品午夜视频| 久久99精品久久久久| 国产aⅴ综合色| 欧洲一区二区三区在线| 日韩欧美一区电影| 国产精品免费av| 三级欧美在线一区| 国产aⅴ综合色| 欧美日韩国产高清一区二区三区 | 一区二区三区.www| 蜜桃久久av一区| 国产suv一区二区三区88区| 色综合久久久久久久久久久| 欧美va亚洲va香蕉在线| 最新热久久免费视频| 秋霞午夜av一区二区三区| 粉嫩av一区二区三区粉嫩| 欧美日韩性生活| 国产精品第一页第二页第三页 | 国产综合一区二区| 色婷婷亚洲精品| 久久久99精品久久| 日韩有码一区二区三区| 成人精品免费看| 日韩一级免费一区| 一区二区三区在线不卡| 国产精品自拍网站| 欧美三级欧美一级| 国产精品入口麻豆原神| 免费观看一级欧美片| 在线免费观看日韩欧美| 国产午夜精品久久| 久久99九九99精品| 欧美日韩精品高清| 亚洲欧美综合网| 久久精品国产77777蜜臀| 在线视频国产一区| 最新欧美精品一区二区三区| 国产一区免费电影| 欧美人狂配大交3d怪物一区| 一区二区三区四区蜜桃| 成人性生交大片免费看中文网站| 欧美一二三区在线| 日韩中文字幕av电影| 欧美图区在线视频| 椎名由奈av一区二区三区| 国产成人精品综合在线观看| 欧美电影免费观看完整版| 日本最新不卡在线| 欧美高清激情brazzers| 亚洲综合一区在线| 一本色道**综合亚洲精品蜜桃冫| 国产精品热久久久久夜色精品三区| 久久国产麻豆精品| 欧美大肚乱孕交hd孕妇| 日本最新不卡在线| 555www色欧美视频| 日韩国产精品久久| 91精品国产综合久久蜜臀| 日精品一区二区三区| 91精品国产入口| 男人操女人的视频在线观看欧美| 欧美日韩精品三区| 日韩高清不卡在线| 欧美精品一级二级三级| 日日摸夜夜添夜夜添亚洲女人| 91精品婷婷国产综合久久性色| 日韩成人精品在线观看| 欧美一级日韩不卡播放免费| 日本中文在线一区| 精品国产乱码久久久久久老虎 | 亚洲一区二区在线播放相泽 | 91久久一区二区| 一区二区久久久| 欧美日韩黄色影视| 日本成人在线看| 精品剧情在线观看| 国产成人av一区二区三区在线| 亚洲国产高清aⅴ视频| 日本韩国欧美在线| 亚洲福利视频一区| 精品日韩欧美在线| 成人免费福利片| 亚洲一区二区三区四区在线免费观看| 在线观看视频一区二区| 日韩av一级电影| 国产亚洲视频系列| 色欲综合视频天天天| 日韩精品视频网| 中文字幕av免费专区久久| 色屁屁一区二区| 久久精品国产精品亚洲精品| 国产精品乱人伦一区二区| 欧美无砖砖区免费| 激情久久久久久久久久久久久久久久| 国产色产综合色产在线视频|