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

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

?? ll_rw_blk.c

?? linux0.02源代碼用于研究linux操作系統
?? C
字號:
/* *  linux/kernel/blk_dev/ll_rw.c * * (C) 1991 Linus Torvalds *//* * This handles all read/write requests to block devices */#include <errno.h>#include <linux/sched.h>#include <linux/kernel.h>#include <asm/system.h>#include "blk.h"/* * The request-struct contains all necessary data * to load a nr of sectors into memory */struct request request[NR_REQUEST];/* * used to wait on when there are no free requests */struct task_struct * wait_for_request = NULL;/* blk_dev_struct is: *	do_request-address *	next-request */struct blk_dev_struct blk_dev[NR_BLK_DEV] = {	{ NULL, NULL },		/* no_dev */	{ NULL, NULL },		/* dev mem */	{ NULL, NULL },		/* dev fd */	{ NULL, NULL },		/* dev hd */	{ NULL, NULL },		/* dev ttyx */	{ NULL, NULL },		/* dev tty */	{ NULL, NULL }		/* dev lp */};/* * blk_size contains the size of all block-devices: * * blk_size[MAJOR][MINOR] * * if (!blk_size[MAJOR]) then no minor size checking is done. */int * blk_size[NR_BLK_DEV] = { NULL, NULL, };static inline void lock_buffer(struct buffer_head * bh){	cli();	while (bh->b_lock)		sleep_on(&bh->b_wait);	bh->b_lock=1;	sti();}static inline void unlock_buffer(struct buffer_head * bh){	if (!bh->b_lock)		printk("ll_rw_block.c: buffer not locked\n\r");	bh->b_lock = 0;	wake_up(&bh->b_wait);}/* * add-request adds a request to the linked list. * It disables interrupts so that it can muck with the * request-lists in peace. * * Note that swapping requests always go before other requests, * and are done in the order they appear. */static void add_request(struct blk_dev_struct * dev, struct request * req){	struct request * tmp;	req->next = NULL;	cli();	if (req->bh)		req->bh->b_dirt = 0;	if (!(tmp = dev->current_request)) {		dev->current_request = req;		sti();		(dev->request_fn)();		return;	}	for ( ; tmp->next ; tmp=tmp->next) {		if (!req->bh)			if (tmp->next->bh)				break;			else				continue;		if ((IN_ORDER(tmp,req) ||		    !IN_ORDER(tmp,tmp->next)) &&		    IN_ORDER(req,tmp->next))			break;	}	req->next=tmp->next;	tmp->next=req;	sti();}static void make_request(int major,int rw, struct buffer_head * bh){	struct request * req;	int rw_ahead;/* WRITEA/READA is special case - it is not really needed, so if the *//* buffer is locked, we just forget about it, else it's a normal read */	if (rw_ahead = (rw == READA || rw == WRITEA)) {		if (bh->b_lock)			return;		if (rw == READA)			rw = READ;		else			rw = WRITE;	}	if (rw!=READ && rw!=WRITE)		panic("Bad block dev command, must be R/W/RA/WA");	lock_buffer(bh);	if ((rw == WRITE && !bh->b_dirt) || (rw == READ && bh->b_uptodate)) {		unlock_buffer(bh);		return;	}repeat:/* we don't allow the write-requests to fill up the queue completely: * we want some room for reads: they take precedence. The last third * of the requests are only for reads. */	if (rw == READ)		req = request+NR_REQUEST;	else		req = request+((NR_REQUEST*2)/3);/* find an empty request */	while (--req >= request)		if (req->dev<0)			break;/* if none found, sleep on new requests: check for rw_ahead */	if (req < request) {		if (rw_ahead) {			unlock_buffer(bh);			return;		}		sleep_on(&wait_for_request);		goto repeat;	}/* fill up the request-info, and add it to the queue */	req->dev = bh->b_dev;	req->cmd = rw;	req->errors=0;	req->sector = bh->b_blocknr<<1;	req->nr_sectors = 2;	req->buffer = bh->b_data;	req->waiting = NULL;	req->bh = bh;	req->next = NULL;	add_request(major+blk_dev,req);}void ll_rw_page(int rw, int dev, int page, char * buffer){	struct request * req;	unsigned int major = MAJOR(dev);	if (major >= NR_BLK_DEV || !(blk_dev[major].request_fn)) {		printk("Trying to read nonexistent block-device\n\r");		return;	}	if (rw!=READ && rw!=WRITE)		panic("Bad block dev command, must be R/W");repeat:	req = request+NR_REQUEST;	while (--req >= request)		if (req->dev<0)			break;	if (req < request) {		sleep_on(&wait_for_request);		goto repeat;	}/* fill up the request-info, and add it to the queue */	req->dev = dev;	req->cmd = rw;	req->errors = 0;	req->sector = page<<3;	req->nr_sectors = 8;	req->buffer = buffer;	req->waiting = current;	req->bh = NULL;	req->next = NULL;	current->state = TASK_UNINTERRUPTIBLE;	add_request(major+blk_dev,req);	schedule();}	void ll_rw_block(int rw, struct buffer_head * bh){	unsigned int major;	if ((major=MAJOR(bh->b_dev)) >= NR_BLK_DEV ||	!(blk_dev[major].request_fn)) {		printk("Trying to read nonexistent block-device\n\r");		return;	}	make_request(major,rw,bh);}void blk_dev_init(void){	int i;	for (i=0 ; i<NR_REQUEST ; i++) {		request[i].dev = -1;		request[i].next = NULL;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久男人中文字幕资源站| 日韩久久免费av| 国产精品1区2区3区| 久久精品国产精品亚洲红杏| 天天影视涩香欲综合网| 亚洲国产三级在线| 图片区小说区区亚洲影院| 日韩精品一二区| 久久av资源网| 国产91精品精华液一区二区三区| 丁香婷婷深情五月亚洲| 91蜜桃网址入口| 欧美日韩一区久久| 精品人在线二区三区| 久久久亚洲欧洲日产国码αv| 中文欧美字幕免费| 一区二区三区.www| 日本aⅴ精品一区二区三区| 韩国毛片一区二区三区| 国产成人免费av在线| 91丝袜美女网| 日韩色在线观看| 亚洲视频免费看| 日本不卡的三区四区五区| 国产精品亚洲人在线观看| av不卡在线播放| 日韩美女一区二区三区四区| 国产精品网站在线观看| 亚洲自拍偷拍av| 国产成人av电影在线观看| 色综合久久久久| 久久综合av免费| 亚洲国产中文字幕| 粉嫩高潮美女一区二区三区| 日本久久一区二区三区| 精品国产1区二区| 夜夜嗨av一区二区三区中文字幕| 蜜臀精品久久久久久蜜臀| 99国产麻豆精品| 日韩精品中文字幕一区| 亚洲图片另类小说| 精品在线播放免费| 欧美在线观看视频一区二区 | 麻豆精品在线观看| 91香蕉视频mp4| 久久久九九九九| 蜜臀av在线播放一区二区三区| 99热精品一区二区| 久久蜜桃av一区精品变态类天堂 | 一区二区视频在线| 国产激情视频一区二区三区欧美 | 日韩欧美国产综合一区| 亚洲男人的天堂在线观看| 国产精品69毛片高清亚洲| 日本黄色一区二区| 国产精品电影院| 国产乱子伦一区二区三区国色天香| 国产精品资源站在线| 久久99这里只有精品| 色狠狠一区二区| 日韩视频免费观看高清完整版在线观看| 国产精品嫩草久久久久| 韩国三级在线一区| 欧美日本在线视频| 亚洲欧美国产高清| 激情六月婷婷综合| 精品欧美久久久| 美女一区二区久久| 91精品在线麻豆| 一区二区三区四区五区视频在线观看| 成人伦理片在线| 国产精品久久久久天堂| 国产精品资源站在线| 久久免费精品国产久精品久久久久| 日韩精品一二区| 欧美成人激情免费网| 蜜桃视频一区二区三区在线观看| 欧美日韩亚洲综合| 蜜臀久久99精品久久久久久9| 在线不卡欧美精品一区二区三区| 亚洲一区二区三区激情| 欧美私人免费视频| 免费在线观看一区| 成人综合婷婷国产精品久久蜜臀| 亚洲国产精品精华液ab| 97久久超碰精品国产| 一区二区三区视频在线看| 欧美日韩的一区二区| 久久精品国产99国产| 国产调教视频一区| 在线视频一区二区三区| 日本sm残虐另类| 国产精品乱码一区二三区小蝌蚪| 99精品视频一区| 视频在线观看91| 欧美xxxx在线观看| av一本久道久久综合久久鬼色| 亚洲精品午夜久久久| 日韩精品一区二区三区在线播放| 国产一区二区精品久久99| 中文字幕在线观看一区| 在线欧美小视频| 久久国产精品免费| 国产精品国模大尺度视频| 3751色影院一区二区三区| 成人免费黄色在线| 爽好多水快深点欧美视频| 国产亚洲短视频| 欧美日韩成人综合天天影院| 国产一区不卡在线| 亚洲精品伦理在线| 26uuu亚洲| 欧美午夜精品一区二区三区 | 亚洲人成精品久久久久久| 欧美久久久久久蜜桃| 国产成人无遮挡在线视频| 婷婷国产在线综合| 亚洲三级免费电影| 日韩免费观看2025年上映的电影| 97久久久精品综合88久久| 久久国内精品视频| 亚洲综合图片区| 国产精品久久久久久久久免费桃花| 91精品一区二区三区久久久久久| 成人精品在线视频观看| 久久国产婷婷国产香蕉| 午夜精品久久久久久不卡8050| 国产精品美女久久久久aⅴ国产馆| 日韩一区二区免费在线观看| 91麻豆福利精品推荐| 国产成人精品三级| 美国十次了思思久久精品导航| 亚洲欧美日韩成人高清在线一区| 亚洲精品一区二区精华| 制服丝袜激情欧洲亚洲| 在线免费av一区| 91亚洲精品乱码久久久久久蜜桃| 国产麻豆视频一区| 久久国内精品自在自线400部| 三级影片在线观看欧美日韩一区二区| 亚洲乱码日产精品bd| 亚洲欧美在线高清| 中文字幕欧美区| 国产喂奶挤奶一区二区三区| 欧美不卡在线视频| 日韩欧美一区在线| 日韩欧美123| 精品日韩一区二区三区免费视频| 6080国产精品一区二区| 欧美日本精品一区二区三区| 色噜噜狠狠成人网p站| 色悠久久久久综合欧美99| 一本高清dvd不卡在线观看| 北条麻妃国产九九精品视频| 国产成人丝袜美腿| www.综合网.com| 色婷婷综合久久久久中文| 色综合久久久久综合| 欧美性猛片aaaaaaa做受| 欧美精品在线视频| 欧美电影免费提供在线观看| 精品国产一二三区| 久久久久久久久久久久久夜| 国产欧美视频一区二区| 国产精品久久久久久久久搜平片| ㊣最新国产の精品bt伙计久久| 亚洲人午夜精品天堂一二香蕉| 亚洲一区二区高清| 欧美a级一区二区| 国产成人精品三级| 91色综合久久久久婷婷| 欧美揉bbbbb揉bbbbb| 欧美一区二区三区性视频| 久久人人97超碰com| 亚洲欧美日韩综合aⅴ视频| 日一区二区三区| 丁香一区二区三区| 欧美男生操女生| 国产无一区二区| 亚洲r级在线视频| 国产精品自产自拍| 欧美日韩在线播| 国产欧美一区二区三区网站| 亚洲色图一区二区| 免费成人av在线播放| 福利电影一区二区三区| 欧美亚洲图片小说| 国产午夜精品一区二区| 亚洲丰满少妇videoshd| 国产老肥熟一区二区三区| 色8久久人人97超碰香蕉987| 日韩欧美另类在线| 亚洲综合视频在线观看| 国产成人aaa| 欧美群妇大交群中文字幕| 日本一区二区在线不卡| 日本不卡高清视频| 日本道色综合久久| 国产欧美日韩不卡免费| 日本欧美韩国一区三区|