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

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

?? super.c

?? LINXS基礎學習代碼 分析是一個很不錯的資料
?? C
字號:
/* *  linux/fs/super.c * *  (C) 1991  Linus Torvalds *//* * super.c contains code to handle the super-block tables. */#include <linux/config.h>#include <linux/sched.h>#include <linux/kernel.h>#include <asm/system.h>#include <errno.h>#include <sys/stat.h>int sync_dev(int dev);void wait_for_keypress(void);/* set_bit uses setb, as gas doesn't recognize setc */#define set_bit(bitnr,addr) ({ \register int __res __asm__("ax"); \__asm__("bt %2,%3;setb %%al":"=a" (__res):"a" (0),"r" (bitnr),"m" (*(addr))); \__res; })struct super_block super_block[NR_SUPER];/* this is initialized in init/main.c */int ROOT_DEV = 0;static void lock_super(struct super_block * sb){	cli();	while (sb->s_lock)		sleep_on(&(sb->s_wait));	sb->s_lock = 1;	sti();}static void free_super(struct super_block * sb){	cli();	sb->s_lock = 0;	wake_up(&(sb->s_wait));	sti();}static void wait_on_super(struct super_block * sb){	cli();	while (sb->s_lock)		sleep_on(&(sb->s_wait));	sti();}struct super_block * get_super(int dev){	struct super_block * s;	if (!dev)		return NULL;	s = 0+super_block;	while (s < NR_SUPER+super_block)		if (s->s_dev == dev) {			wait_on_super(s);			if (s->s_dev == dev)				return s;			s = 0+super_block;		} else			s++;	return NULL;}void put_super(int dev){	struct super_block * sb;	struct m_inode * inode;	int i;	if (dev == ROOT_DEV) {		printk("root diskette changed: prepare for armageddon\n\r");		return;	}	if (!(sb = get_super(dev)))		return;	if (sb->s_imount) {		printk("Mounted disk changed - tssk, tssk\n\r");		return;	}	lock_super(sb);	sb->s_dev = 0;	for(i=0;i<I_MAP_SLOTS;i++)		brelse(sb->s_imap[i]);	for(i=0;i<Z_MAP_SLOTS;i++)		brelse(sb->s_zmap[i]);	free_super(sb);	return;}static struct super_block * read_super(int dev){	struct super_block * s;	struct buffer_head * bh;	int i,block;	if (!dev)		return NULL;	check_disk_change(dev);	if (s = get_super(dev))		return s;	for (s = 0+super_block ;; s++) {		if (s >= NR_SUPER+super_block)			return NULL;		if (!s->s_dev)			break;	}	s->s_dev = dev;	s->s_isup = NULL;	s->s_imount = NULL;	s->s_time = 0;	s->s_rd_only = 0;	s->s_dirt = 0;	lock_super(s);	if (!(bh = bread(dev,1))) {		s->s_dev=0;		free_super(s);		return NULL;	}	*((struct d_super_block *) s) =		*((struct d_super_block *) bh->b_data);	brelse(bh);	if (s->s_magic != SUPER_MAGIC) {		s->s_dev = 0;		free_super(s);		return NULL;	}	for (i=0;i<I_MAP_SLOTS;i++)		s->s_imap[i] = NULL;	for (i=0;i<Z_MAP_SLOTS;i++)		s->s_zmap[i] = NULL;	block=2;	for (i=0 ; i < s->s_imap_blocks ; i++)		if (s->s_imap[i]=bread(dev,block))			block++;		else			break;	for (i=0 ; i < s->s_zmap_blocks ; i++)		if (s->s_zmap[i]=bread(dev,block))			block++;		else			break;	if (block != 2+s->s_imap_blocks+s->s_zmap_blocks) {		for(i=0;i<I_MAP_SLOTS;i++)			brelse(s->s_imap[i]);		for(i=0;i<Z_MAP_SLOTS;i++)			brelse(s->s_zmap[i]);		s->s_dev=0;		free_super(s);		return NULL;	}	s->s_imap[0]->b_data[0] |= 1;	s->s_zmap[0]->b_data[0] |= 1;	free_super(s);	return s;}int sys_umount(char * dev_name){	struct m_inode * inode;	struct super_block * sb;	int dev;	if (!(inode=namei(dev_name)))		return -ENOENT;	dev = inode->i_zone[0];	if (!S_ISBLK(inode->i_mode)) {		iput(inode);		return -ENOTBLK;	}	iput(inode);	if (dev==ROOT_DEV)		return -EBUSY;	if (!(sb=get_super(dev)) || !(sb->s_imount))		return -ENOENT;	if (!sb->s_imount->i_mount)		printk("Mounted inode has i_mount=0\n");	for (inode=inode_table+0 ; inode<inode_table+NR_INODE ; inode++)		if (inode->i_dev==dev && inode->i_count)				return -EBUSY;	sb->s_imount->i_mount=0;	iput(sb->s_imount);	sb->s_imount = NULL;	iput(sb->s_isup);	sb->s_isup = NULL;	put_super(dev);	sync_dev(dev);	return 0;}int sys_mount(char * dev_name, char * dir_name, int rw_flag){	struct m_inode * dev_i, * dir_i;	struct super_block * sb;	int dev;	if (!(dev_i=namei(dev_name)))		return -ENOENT;	dev = dev_i->i_zone[0];	if (!S_ISBLK(dev_i->i_mode)) {		iput(dev_i);		return -EPERM;	}	iput(dev_i);	if (!(dir_i=namei(dir_name)))		return -ENOENT;	if (dir_i->i_count != 1 || dir_i->i_num == ROOT_INO) {		iput(dir_i);		return -EBUSY;	}	if (!S_ISDIR(dir_i->i_mode)) {		iput(dir_i);		return -EPERM;	}	if (!(sb=read_super(dev))) {		iput(dir_i);		return -EBUSY;	}	if (sb->s_imount) {		iput(dir_i);		return -EBUSY;	}	if (dir_i->i_mount) {		iput(dir_i);		return -EPERM;	}	sb->s_imount=dir_i;	dir_i->i_mount=1;	dir_i->i_dirt=1;		/* NOTE! we don't iput(dir_i) */	return 0;			/* we do that in umount */}void mount_root(void){	int i,free;	struct super_block * p;	struct m_inode * mi;	if (32 != sizeof (struct d_inode))		panic("bad i-node size");	for(i=0;i<NR_FILE;i++)		file_table[i].f_count=0;	if (MAJOR(ROOT_DEV) == 2) {		printk("Insert root floppy and press ENTER");		wait_for_keypress();	}	for(p = &super_block[0] ; p < &super_block[NR_SUPER] ; p++) {		p->s_dev = 0;		p->s_lock = 0;		p->s_wait = NULL;	}	if (!(p=read_super(ROOT_DEV)))		panic("Unable to mount root");	if (!(mi=iget(ROOT_DEV,ROOT_INO)))		panic("Unable to read root i-node");	mi->i_count += 3 ;	/* NOTE! it is logically used 4 times, not 1 */	p->s_isup = p->s_imount = mi;	current->pwd = mi;	current->root = mi;	free=0;	i=p->s_nzones;	while (-- i >= 0)		if (!set_bit(i&8191,p->s_zmap[i>>13]->b_data))			free++;	printk("%d/%d free blocks\n\r",free,p->s_nzones);	free=0;	i=p->s_ninodes+1;	while (-- i >= 0)		if (!set_bit(i&8191,p->s_imap[i>>13]->b_data))			free++;	printk("%d/%d free inodes\n\r",free,p->s_ninodes);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人av在线| 日韩精品专区在线影院观看| 日韩欧美一区二区三区在线| 樱花草国产18久久久久| www.爱久久.com| 国产精品美女久久久久久| 美女视频网站久久| 欧美不卡一二三| 蜜臀久久久久久久| 丁香亚洲综合激情啪啪综合| 精品国产99国产精品| 亚洲一区二区视频在线观看| 99精品视频一区| 中文字幕一区三区| 91麻豆福利精品推荐| 亚洲伦理在线精品| 欧美午夜在线观看| 亚洲超丰满肉感bbw| 欧美一区二视频| 国内精品嫩模私拍在线| 免费xxxx性欧美18vr| 91亚洲午夜精品久久久久久| 97精品久久久午夜一区二区三区| 精品国内二区三区| 一道本成人在线| 91原创在线视频| 欧美视频日韩视频| 欧美日韩国产免费一区二区 | 午夜视频一区在线观看| 久久国产乱子精品免费女| 久久国产精品无码网站| 国产精品一区二区91| 成人成人成人在线视频| 在线观看日韩电影| 欧美videos中文字幕| 中文字幕一区视频| 日韩不卡手机在线v区| 国产精品一区二区久久精品爱涩| www.在线成人| 欧美一区二区三区在线观看 | 亚洲综合色视频| 国产一区二区中文字幕| 色诱视频网站一区| 久久久久久99久久久精品网站| 一区二区三区四区高清精品免费观看| 天堂午夜影视日韩欧美一区二区| 国产乱国产乱300精品| 7777精品伊人久久久大香线蕉超级流畅 | 国产精品福利在线播放| 久久不见久久见中文字幕免费| hitomi一区二区三区精品| 日韩手机在线导航| 一区二区三区高清不卡| 成人国产一区二区三区精品| 欧美电视剧免费全集观看| 亚洲成年人影院| 91在线视频官网| 中文字幕一区二区三区av| 国产精品一区二区不卡| 精品国内片67194| 石原莉奈在线亚洲三区| 欧美三级日韩三级| 亚洲在线视频一区| 欧美亚洲国产bt| 亚洲电影中文字幕在线观看| heyzo一本久久综合| 亚洲人成亚洲人成在线观看图片 | 欧美va在线播放| 国产成人免费网站| 亚洲国产激情av| 97国产精品videossex| 成人欧美一区二区三区视频网页| 99麻豆久久久国产精品免费优播| 中文字幕不卡在线观看| 91视频一区二区三区| 一区二区免费在线| 欧美高清一级片在线| 老鸭窝一区二区久久精品| 久久影院午夜论| 99精品国产99久久久久久白柏| 亚洲一区二区三区小说| 日韩精品一区二| 97国产一区二区| 秋霞午夜鲁丝一区二区老狼| 精品av久久707| 色狠狠桃花综合| 久久99精品久久久久久| 中文字幕一区二区三区在线观看| 欧美亚洲动漫另类| 国产高清无密码一区二区三区| 亚洲欧洲日产国码二区| 欧美日韩一二三| 国产91丝袜在线观看| 午夜视黄欧洲亚洲| 国产精品污污网站在线观看| 91国偷自产一区二区开放时间 | 日本一区二区三区久久久久久久久不| 懂色av一区二区在线播放| 亚洲第一狼人社区| 国产亚洲一本大道中文在线| 91浏览器在线视频| 成人永久看片免费视频天堂| 日韩国产精品大片| 久久99久久99小草精品免视看| 久久人人爽人人爽| 欧美卡1卡2卡| 欧美日韩在线综合| 91在线观看免费视频| 成a人片国产精品| 成人黄色av网站在线| 国产一本一道久久香蕉| 老司机一区二区| 奇米一区二区三区av| 午夜久久久久久久久| 一区二区三区**美女毛片| 亚洲免费资源在线播放| 亚洲欧美日本韩国| 亚洲摸摸操操av| 亚洲国产综合在线| 一区二区三区色| 亚洲电影一区二区三区| 亚洲高清在线精品| 蜜臀av一区二区在线观看| 狂野欧美性猛交blacked| 国产一区美女在线| 国产aⅴ精品一区二区三区色成熟| 久久国产精品99久久久久久老狼| 蜜芽一区二区三区| 国产美女娇喘av呻吟久久| 成人精品鲁一区一区二区| 精品国产123| 国产精品久久久久久久岛一牛影视| 国产精品精品国产色婷婷| 日韩美女视频一区| 日韩av一区二| 懂色av中文字幕一区二区三区| 日本精品视频一区二区| 欧美成人在线直播| 国产精品丝袜91| 日日夜夜精品视频天天综合网| 国产精品一级二级三级| 99re免费视频精品全部| 日韩精品一区二区三区四区| 自拍偷在线精品自拍偷无码专区| 亚洲v精品v日韩v欧美v专区| 国内精品免费**视频| 欧美少妇bbb| 国产精品视频线看| 捆绑调教一区二区三区| 91亚洲午夜精品久久久久久| 欧美电影免费观看高清完整版| 日韩理论片中文av| 国产白丝网站精品污在线入口| 欧美色爱综合网| 中文字幕在线不卡视频| 国产成人av影院| 久久亚洲精品小早川怜子| 午夜婷婷国产麻豆精品| 一本一道久久a久久精品综合蜜臀| 国产亚洲欧洲997久久综合| 精品伊人久久久久7777人| 欧美肥胖老妇做爰| 夜夜嗨av一区二区三区四季av | 精品国产一区二区三区四区四| 亚洲超碰精品一区二区| 欧洲国内综合视频| 亚洲人成影院在线观看| 91网上在线视频| 自拍偷拍亚洲综合| 91免费版在线| 亚洲电影第三页| 欧美一区二区观看视频| 青青草国产精品97视觉盛宴 | 欧美性大战久久| 洋洋av久久久久久久一区| 欧美性一级生活| 五月天一区二区| 精品欧美久久久| av不卡一区二区三区| 亚洲一区在线视频| 欧美日本视频在线| 奇米一区二区三区| 一区二区三区在线免费观看| 91麻豆123| 日本美女一区二区三区| 精品少妇一区二区三区在线播放| 韩国av一区二区| 亚洲黄色免费电影| 精品国产乱子伦一区| 91免费国产在线| 久久疯狂做爰流白浆xx| 国产精品不卡一区二区三区| 欧美午夜精品久久久| 精品一区二区三区在线观看国产| 国产精品美女久久久久久2018| 4438成人网| 91麻豆精品秘密| 国产精品99久久久久久宅男| 亚洲国产精品久久人人爱| 国产视频一区在线观看|