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

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

?? ataraid.c

?? ep9315平臺下硬盤驅動的源碼
?? C
字號:
/*   ataraid.c  Copyright (C) 2001 Red Hat, Inc. All rights reserved.   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2, or (at your option)   any later version.      You should have received a copy of the GNU General Public License   (for example /usr/src/linux/COPYING); if not, write to the Free   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.        Authors: 	Arjan van de Ven <arjanv@redhat.com>   		   */#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/mm.h>#include <asm/semaphore.h>#include <linux/sched.h>#include <linux/smp_lock.h>#include <linux/blkdev.h>#include <linux/blkpg.h>#include <linux/genhd.h>#include <linux/ioctl.h>#include <linux/kdev_t.h>#include <linux/swap.h>#include <linux/ide.h>#include <asm/uaccess.h>#include "ataraid.h"                                        static int ataraid_hardsect_size[256];static int ataraid_blksize_size[256];static struct raid_device_operations* ataraid_ops[16];static int ataraid_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg);static int ataraid_open(struct inode * inode, struct file * filp);static int ataraid_release(struct inode * inode, struct file * filp);static void ataraid_split_request(request_queue_t *q, int rw, struct buffer_head * bh);struct gendisk ataraid_gendisk;static int ataraid_gendisk_sizes[256];static int ataraid_readahead[256];static struct block_device_operations ataraid_fops = {	owner:			THIS_MODULE,	open:                   ataraid_open,	release:                ataraid_release,	ioctl:                  ataraid_ioctl,};                static DECLARE_MUTEX(ataraid_sem);/* Bitmap for the devices currently in use */static unsigned int ataraiduse;/* stub fops functions */static int ataraid_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)  {	int minor;	minor = MINOR(inode->i_rdev)>>SHIFT;		if ((ataraid_ops[minor])&&(ataraid_ops[minor]->ioctl))		return (ataraid_ops[minor]->ioctl)(inode,file,cmd,arg);	return -EINVAL;}static int ataraid_open(struct inode * inode, struct file * filp){	int minor;	minor = MINOR(inode->i_rdev)>>SHIFT;	if ((ataraid_ops[minor])&&(ataraid_ops[minor]->open))		return (ataraid_ops[minor]->open)(inode,filp);	return -EINVAL;}static int ataraid_release(struct inode * inode, struct file * filp){	int minor;	minor = MINOR(inode->i_rdev)>>SHIFT;	if ((ataraid_ops[minor])&&(ataraid_ops[minor]->release))		return (ataraid_ops[minor]->release)(inode,filp);	return -EINVAL;}static int ataraid_make_request (request_queue_t *q, int rw, struct buffer_head * bh){	int minor;	int retval;	minor = MINOR(bh->b_rdev)>>SHIFT;	if ((ataraid_ops[minor])&&(ataraid_ops[minor]->make_request)) {				retval= (ataraid_ops[minor]->make_request)(q,rw,bh);		if (retval == -1) {			ataraid_split_request(q,rw,bh);					return 0;		} else			return retval;	}	return -EINVAL;}struct buffer_head *ataraid_get_bhead(void){	void *ptr = NULL;	while (!ptr) {		ptr=kmalloc(sizeof(struct buffer_head),GFP_NOIO);		if (!ptr) {			__set_current_state(TASK_RUNNING);			yield();		}	}	return ptr;}EXPORT_SYMBOL(ataraid_get_bhead);struct ataraid_bh_private *ataraid_get_private(void){	void *ptr = NULL;	while (!ptr) {		ptr=kmalloc(sizeof(struct ataraid_bh_private),GFP_NOIO);		if (!ptr) {			__set_current_state(TASK_RUNNING);			yield();		}	}	return ptr;}EXPORT_SYMBOL(ataraid_get_private);void ataraid_end_request(struct buffer_head *bh, int uptodate){	struct ataraid_bh_private *private = bh->b_private;	if (private==NULL)		BUG();	if (atomic_dec_and_test(&private->count)) {		private->parent->b_end_io(private->parent,uptodate);		private->parent = NULL;		kfree(private);	}	kfree(bh);}EXPORT_SYMBOL(ataraid_end_request);static void ataraid_split_request(request_queue_t *q, int rw, struct buffer_head * bh){	struct buffer_head *bh1,*bh2;	struct ataraid_bh_private *private;	bh1=ataraid_get_bhead();	bh2=ataraid_get_bhead();	/* If either of those ever fails we're doomed */	if ((!bh1)||(!bh2))		BUG();	private = ataraid_get_private();	if (private==NULL)		BUG();		memcpy(bh1, bh, sizeof(*bh));	memcpy(bh2, bh, sizeof(*bh));		bh1->b_end_io = ataraid_end_request;	bh2->b_end_io = ataraid_end_request;	bh2->b_rsector += bh->b_size >> 10;	bh1->b_size /= 2;	bh2->b_size /= 2;	private->parent = bh;	bh1->b_private = private;	bh2->b_private = private;	atomic_set(&private->count,2);	bh2->b_data +=  bh->b_size/2;	generic_make_request(rw,bh1);	generic_make_request(rw,bh2);}/* device register / release functions */int ataraid_get_device(struct raid_device_operations *fops){	int bit;	down(&ataraid_sem);	if (ataraiduse==~0U) {		up(&ataraid_sem);		return -ENODEV;	}	bit=ffz(ataraiduse); 	ataraiduse |= 1<<bit;	ataraid_ops[bit] = fops;	up(&ataraid_sem);	return bit;}void ataraid_release_device(int device){	down(&ataraid_sem);		if ((ataraiduse & (1<<device))==0)		BUG();	/* device wasn't registered at all */		ataraiduse &= ~(1<<device);	ataraid_ops[device] = NULL;	up(&ataraid_sem);}void ataraid_register_disk(int device,long size){	register_disk(&ataraid_gendisk, MKDEV(ATAMAJOR,16*device),16,		&ataraid_fops,size);}static __init int ataraid_init(void) {	int i;        for(i=0;i<256;i++)	{        	ataraid_hardsect_size[i] = 512;		ataraid_blksize_size[i] = 1024;  		ataraid_readahead[i] = 1023;	}		if (blksize_size[ATAMAJOR]==NULL)		blksize_size[ATAMAJOR] = ataraid_blksize_size;	if (hardsect_size[ATAMAJOR]==NULL)		hardsect_size[ATAMAJOR] = ataraid_hardsect_size;			/* setup the gendisk structure */		ataraid_gendisk.part = kmalloc(256 * sizeof(struct hd_struct),GFP_KERNEL);	if (ataraid_gendisk.part==NULL) {		printk(KERN_ERR "ataraid: Couldn't allocate memory, aborting \n");		return -1;	}		memset(&ataraid_gendisk.part[0],0,256*sizeof(struct hd_struct));			ataraid_gendisk.major       = ATAMAJOR;	ataraid_gendisk.major_name  = "ataraid";	ataraid_gendisk.minor_shift = 4;	ataraid_gendisk.max_p	    = 15;	ataraid_gendisk.sizes	    = &ataraid_gendisk_sizes[0];	ataraid_gendisk.nr_real	    = 16;	ataraid_gendisk.fops        = &ataraid_fops;			add_gendisk(&ataraid_gendisk);				if (register_blkdev(ATAMAJOR, "ataraid", &ataraid_fops)) {		printk(KERN_ERR "ataraid: Could not get major %d \n",ATAMAJOR);		return -1;	}		                		blk_queue_make_request(BLK_DEFAULT_QUEUE(ATAMAJOR),ataraid_make_request);                                                                                     		return 0;                                                        	}static void __exit ataraid_exit(void){	unregister_blkdev(ATAMAJOR, "ataraid");	hardsect_size[ATAMAJOR] = NULL;	blk_size[ATAMAJOR] = NULL;	blksize_size[ATAMAJOR] = NULL;                       	max_readahead[ATAMAJOR] = NULL;	del_gendisk(&ataraid_gendisk);        	if (ataraid_gendisk.part) {		kfree(ataraid_gendisk.part);		ataraid_gendisk.part = NULL;	}}module_init(ataraid_init);module_exit(ataraid_exit);EXPORT_SYMBOL(ataraid_get_device);EXPORT_SYMBOL(ataraid_release_device);EXPORT_SYMBOL(ataraid_gendisk);EXPORT_SYMBOL(ataraid_register_disk);MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草国产成人av片免费| 精品99999| 国产大陆精品国产| 七七婷婷婷婷精品国产| 中文av一区二区| 久久综合色8888| 91成人国产精品| 成人av电影在线播放| 久久99精品国产麻豆不卡| 日日欢夜夜爽一区| 亚洲一卡二卡三卡四卡| 亚洲一区二区三区三| 亚洲成av人片在www色猫咪| 亚洲尤物在线视频观看| 亚洲第一综合色| 亚洲精品免费在线观看| 午夜视频久久久久久| 看国产成人h片视频| 国产成人免费视频精品含羞草妖精 | 成人免费视频网站在线观看| 高清在线观看日韩| 91丨九色丨尤物| 欧美一区二区三区四区高清| 欧美成人欧美edvon| 中文字幕+乱码+中文字幕一区| 国产精品白丝在线| 天天影视色香欲综合网老头| 国产在线精品免费| 91色视频在线| 欧美大片顶级少妇| 国产精品第一页第二页第三页| 亚洲gay无套男同| 国产一区二区电影| 欧美日韩另类一区| 国产午夜精品一区二区三区视频| 一区二区三区四区乱视频| 免费美女久久99| 91色乱码一区二区三区| 日韩精品一区二区三区中文不卡| 国产精品久久精品日日| 日日摸夜夜添夜夜添精品视频| 国产精品一区不卡| 欧美精品久久99| 国产精品成人午夜| 精彩视频一区二区三区| 欧美性一二三区| 中文字幕+乱码+中文字幕一区| 午夜久久久久久电影| 不卡视频免费播放| 欧美成人猛片aaaaaaa| 一区二区三区四区在线| 大胆亚洲人体视频| 日韩一区二区三区视频在线| 亚洲精选视频免费看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美精品一区二区精品网| 一区二区三区欧美视频| 成人午夜碰碰视频| 亚洲自拍偷拍麻豆| 成人精品在线视频观看| 日韩欧美电影一二三| 亚洲综合一二三区| 黄一区二区三区| 欧美一级一级性生活免费录像| 亚洲制服丝袜一区| 欧美专区亚洲专区| 亚洲另类春色校园小说| 99精品一区二区| 国产精品你懂的在线欣赏| 国产精品888| 久久久不卡网国产精品二区 | 日韩欧美一二三四区| 爽爽淫人综合网网站| 欧美亚洲综合一区| 亚洲国产精品麻豆| 欧美吞精做爰啪啪高潮| 悠悠色在线精品| 欧美亚洲国产bt| 午夜欧美电影在线观看| 欧美日韩免费一区二区三区| 亚洲一区电影777| 欧美精品1区2区3区| 三级不卡在线观看| 日韩欧美的一区二区| 国产一区在线观看视频| 国产婷婷色一区二区三区在线| 成人在线综合网站| 亚洲精品欧美专区| 7777精品伊人久久久大香线蕉的 | 中文字幕日韩一区| 一本久久精品一区二区| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩精品一区二区天天拍小说| 一区二区三区久久久| 欧美日本在线一区| 国产精品综合在线视频| 亚洲欧洲国产专区| 欧美无人高清视频在线观看| 日本三级韩国三级欧美三级| 久久综合网色—综合色88| 成人av在线一区二区三区| 亚洲自拍偷拍图区| 精品国产a毛片| 色综合久久88色综合天天免费| 亚洲第一福利视频在线| 精品国产123| 精品欧美久久久| 99re热视频精品| 日韩成人一区二区三区在线观看| 26uuu色噜噜精品一区二区| av不卡免费在线观看| 偷拍一区二区三区| 精品国产1区2区3区| 在线视频一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 国产精品久久久久久久久动漫| 欧美久久久影院| 成人综合在线网站| 免费人成精品欧美精品| 亚洲免费观看高清完整版在线观看熊 | 欧美高清www午色夜在线视频| 国产一区二区在线观看免费| 亚洲精品免费看| 91精品国产福利在线观看| 成人app下载| 精彩视频一区二区三区| 亚洲第一久久影院| 综合婷婷亚洲小说| 久久蜜桃av一区二区天堂| 欧美日韩国产中文| 成人av免费在线| 国产尤物一区二区| 免费在线欧美视频| 亚洲高清免费一级二级三级| 中文字幕免费不卡在线| 欧美精品一区视频| 日韩欧美国产精品| 91精品国产高清一区二区三区蜜臀 | 粉嫩一区二区三区性色av| 日本三级韩国三级欧美三级| 亚洲在线中文字幕| 一区二区三区在线观看视频| 国产精品久久久久久久久久免费看| 日韩美一区二区三区| 欧美一三区三区四区免费在线看| 欧美综合视频在线观看| 色综合天天做天天爱| 91视频在线看| 成人一区二区视频| 成人性视频网站| 国产91精品一区二区麻豆网站 | 99久久婷婷国产综合精品电影| 国产一区二区三区av电影| 看片网站欧美日韩| 蜜桃精品视频在线观看| 久久国产免费看| 精品一区二区三区视频| 激情综合色播激情啊| 国产一区二区三区精品视频| 激情五月播播久久久精品| 国产一区二区三区精品欧美日韩一区二区三区| 日本一不卡视频| 精品一区二区三区香蕉蜜桃| 精品午夜久久福利影院| 国产成人aaa| 91免费在线看| 欧美日韩黄色影视| 精品国产第一区二区三区观看体验| 精品av久久707| 最新国产成人在线观看| 亚洲夂夂婷婷色拍ww47| 奇米亚洲午夜久久精品| 国产成人午夜电影网| 91免费观看视频| 欧美一级xxx| 欧美国产日韩a欧美在线观看| 亚洲天堂网中文字| 奇米影视一区二区三区| 国产精品羞羞答答xxdd| 一本色道久久综合亚洲精品按摩| 欧美日韩大陆在线| 2020国产精品自拍| 亚洲欧美成人一区二区三区| 日韩在线观看一区二区| 国产99久久久久久免费看农村| 色综合一个色综合| 日韩欧美的一区| 中文字幕一区二区三区不卡| 亚洲18女电影在线观看| 国产成人福利片| 欧美久久久久中文字幕| 国产日韩欧美精品综合| 亚洲成人一二三| 成人a免费在线看| 欧美一区二区日韩一区二区| 国产精品不卡在线| 蜜臀久久久99精品久久久久久| 成人av资源站| 欧美精品一区二区精品网| 亚洲网友自拍偷拍|