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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? file.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
字號(hào):
/*
 *  linux/fs/xiafs/file.c
 *
 *  Copyright (C) Q. Frank Xia, 1993.
 *  
 *  Based on Linus' minix/file.c
 *  Copyright (C) Linus Torvalds, 1991, 1992.
 *
 *  This software may be redistributed per Linux Copyright.
 */

#include <asm/segment.h>
#include <asm/system.h>

#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/xia_fs.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/stat.h>
#include <linux/locks.h>

#include "xiafs_mac.h"

#define	NBUF	32

#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))

static int xiafs_file_read(struct inode *, struct file *, char *, int);
static int xiafs_file_write(struct inode *, struct file *, char *, int);

/*
 * We have mostly NULL's here: the current defaults are ok for
 * the xiafs filesystem.
 */
static struct file_operations xiafs_file_operations = {
    NULL,			/* lseek - default */
    xiafs_file_read,		/* read */
    xiafs_file_write,		/* write */
    NULL,			/* readdir - bad */
    NULL,			/* select - default */
    NULL,			/* ioctl - default */
    generic_mmap,      		/* mmap */
    NULL,			/* no special open is needed */
    NULL,			/* release */
    xiafs_sync_file		/* fsync */
};

struct inode_operations xiafs_file_inode_operations = {
    &xiafs_file_operations,	/* default file operations */
    NULL,			/* create */
    NULL,			/* lookup */
    NULL,			/* link */
    NULL,			/* unlink */
    NULL,			/* symlink */
    NULL,			/* mkdir */
    NULL,			/* rmdir */
    NULL,			/* mknod */
    NULL,			/* rename */
    NULL,			/* readlink */
    NULL,			/* follow_link */
    xiafs_bmap,			/* bmap */
    xiafs_truncate,		/* truncate */
    NULL			/* permission */
};

static int 
xiafs_file_read(struct inode * inode, struct file * filp, char * buf, int count)
{
    int read, left, chars;
    int zone_nr, zones, f_zones, offset;
    int bhrequest, uptodate;
    struct buffer_head ** bhb, ** bhe;
    struct buffer_head * bhreq[NBUF];
    struct buffer_head * buflist[NBUF];

    if (!inode) {
        printk("XIA-FS: inode = NULL (%s %d)\n", WHERE_ERR);
	return -EINVAL;
    }
    if (!S_ISREG(inode->i_mode)) {
        printk("XIA-FS: mode != regular (%s %d)\n", WHERE_ERR);
	return -EINVAL;
    }
    offset = filp->f_pos;
    left = inode->i_size - offset;
    if (left > count)
	left = count;
    if (left <= 0)
	return 0;
    read = 0;
    zone_nr = offset >> XIAFS_ZSIZE_BITS(inode->i_sb);
    offset &= XIAFS_ZSIZE(inode->i_sb) -1 ;
    f_zones =(inode->i_size+XIAFS_ZSIZE(inode->i_sb)-1)>>XIAFS_ZSIZE_BITS(inode->i_sb);
    zones = (left+offset+XIAFS_ZSIZE(inode->i_sb)-1) >> XIAFS_ZSIZE_BITS(inode->i_sb);
    bhb = bhe = buflist;
    if (filp->f_reada) {
        zones += read_ahead[MAJOR(inode->i_dev)] >> (1+XIAFS_ZSHIFT(inode->i_sb));
	if (zone_nr + zones > f_zones)
	    zones = f_zones - zone_nr;
    }

    /* We do this in a two stage process.  We first try and request
       as many blocks as we can, then we wait for the first one to
       complete, and then we try and wrap up as many as are actually
       done.  This routine is rather generic, in that it can be used
       in a filesystem by substituting the appropriate function in
       for getblk.
       
       This routine is optimized to make maximum use of the various
       buffers and caches. */

    do {
        bhrequest = 0;
	uptodate = 1;
	while (zones--) {
	    *bhb = xiafs_getblk(inode, zone_nr++, 0);
	    if (*bhb && !(*bhb)->b_uptodate) {
	        uptodate = 0;
		bhreq[bhrequest++] = *bhb;
	    }

	    if (++bhb == &buflist[NBUF])
	        bhb = buflist;
	    
	    /* If the block we have on hand is uptodate, go ahead
	       and complete processing. */
	    if (uptodate)
	        break;
	    if (bhb == bhe)
	        break;
	}

	/* Now request them all */
	if (bhrequest)
	    ll_rw_block(READ, bhrequest, bhreq);

	do { /* Finish off all I/O that has actually completed */
	    if (*bhe) {
	        wait_on_buffer(*bhe);
		if (!(*bhe)->b_uptodate) {	/* read error? */
		    brelse(*bhe);
		    if (++bhe == &buflist[NBUF])
		      bhe = buflist;
		    left = 0;
		    break;
		}
	    }
	    if (left < XIAFS_ZSIZE(inode->i_sb) - offset)
	        chars = left;
	    else
	        chars = XIAFS_ZSIZE(inode->i_sb) - offset;
	    filp->f_pos += chars;
	    left -= chars;
	    read += chars;
	    if (*bhe) {
	        memcpy_tofs(buf,offset+(*bhe)->b_data,chars);
		brelse(*bhe);
		buf += chars;
	    } else {
	        while (chars-->0)
		    put_fs_byte(0,buf++);
	    }
	    offset = 0;
	    if (++bhe == &buflist[NBUF])
	        bhe = buflist;
	} while (left > 0 && bhe != bhb && (!*bhe || !(*bhe)->b_lock));
    } while (left > 0);

/* Release the read-ahead blocks */
    while (bhe != bhb) {
        brelse(*bhe);
	if (++bhe == &buflist[NBUF])
	    bhe = buflist;
    };
    if (!read)
        return -EIO;
    filp->f_reada = 1;
    if (!IS_RDONLY (inode)) {
	inode->i_atime = CURRENT_TIME;
	inode->i_dirt = 1;
    }
    return read;
}

static int 
xiafs_file_write(struct inode * inode, struct file * filp, char * buf, int count)
{
    off_t pos;
    int written, c;
    struct buffer_head * bh;
    char * cp;

    if (!inode) {
        printk("XIA-FS: inode = NULL (%s %d)\n", WHERE_ERR);
	return -EINVAL;
    }
    if (!S_ISREG(inode->i_mode)) {
        printk("XIA-FS: mode != regular (%s %d)\n", WHERE_ERR);
	return -EINVAL;
    }
/*
 * ok, append may not work when many processes are writing at the same time
 * but so what. That way leads to madness anyway.
 */
    if (filp->f_flags & O_APPEND)
        pos = inode->i_size;
    else
        pos = filp->f_pos;
    written = 0;
    while (written < count) {
        bh = xiafs_getblk(inode, pos >> XIAFS_ZSIZE_BITS(inode->i_sb), 1);
	if (!bh) {
	    if (!written)
	        written = -ENOSPC;
	    break;
	}
	c = XIAFS_ZSIZE(inode->i_sb) - (pos & (XIAFS_ZSIZE(inode->i_sb) - 1));
	if (c > count-written)
	    c = count-written;
	if (c != XIAFS_ZSIZE(inode->i_sb) && !bh->b_uptodate) {
	    ll_rw_block(READ, 1, &bh);
	    wait_on_buffer(bh);
	    if (!bh->b_uptodate) {
	        brelse(bh);
		if (!written)
		    written = -EIO;
		break;
	    }
	}
	cp = (pos & (XIAFS_ZSIZE(inode->i_sb)-1)) + bh->b_data;
	pos += c;
	if (pos > inode->i_size) {
	    inode->i_size = pos;
	    inode->i_dirt = 1;
	}
	written += c;
	memcpy_fromfs(cp,buf,c);
	buf += c;
	bh->b_uptodate = 1;
	bh->b_dirt = 1;
	brelse(bh);
    }
    inode->i_mtime = inode->i_ctime = CURRENT_TIME;
    filp->f_pos = pos;
    inode->i_dirt = 1;

    return written;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美tickle裸体挠脚心vk| 国产三级一区二区三区| 国产91色综合久久免费分享| 亚洲最新在线观看| 日韩免费观看高清完整版| 99国产精品国产精品久久| 韩国三级在线一区| 亚州成人在线电影| 亚洲欧美日韩中文播放| 国产亚洲一区二区三区在线观看 | 国产精品自产自拍| 日韩激情视频网站| 一区二区三区鲁丝不卡| 久久久欧美精品sm网站| 91精品在线麻豆| 日本黄色一区二区| 91视频免费观看| 丁香五精品蜜臀久久久久99网站 | 久久九九久精品国产免费直播| 欧美亚洲一区二区在线| 丁香天五香天堂综合| 久久精品国产秦先生| 丝袜亚洲另类丝袜在线| 亚洲精品国产无套在线观| 国产农村妇女毛片精品久久麻豆 | 亚洲欧美区自拍先锋| 欧美国产精品一区二区三区| 久久看人人爽人人| 日韩欧美高清一区| 日韩视频一区二区在线观看| 欧美日韩国产经典色站一区二区三区| 91美女视频网站| www.在线欧美| 成人av网址在线| 9i在线看片成人免费| 91在线观看视频| 成人不卡免费av| 成人黄色a**站在线观看| 豆国产96在线|亚洲| 国产91精品一区二区麻豆网站| 国产尤物一区二区在线| 国产综合色产在线精品| 国产自产高清不卡| 国产精品一色哟哟哟| 国产99久久久精品| 不卡的av电影| 91色婷婷久久久久合中文| 97se亚洲国产综合自在线观| 91一区二区在线观看| 91福利社在线观看| 欧美三级电影一区| 51精品久久久久久久蜜臀| 日韩美女视频在线| 久久亚洲精品国产精品紫薇| 国产亚洲综合在线| 亚洲婷婷在线视频| 亚洲午夜视频在线| 美女视频网站久久| 国产精品一区免费在线观看| 不卡的av中国片| 欧美日韩你懂的| 日韩一区二区精品| 精品精品国产高清a毛片牛牛| 久久精品免费在线观看| 夜夜精品浪潮av一区二区三区| 天天综合网天天综合色| 国内精品伊人久久久久av一坑 | 亚洲精品一线二线三线无人区| 久久久久久久久岛国免费| 日韩一区在线免费观看| 三级成人在线视频| 国产大陆a不卡| 欧美在线一二三| 日韩亚洲欧美高清| 自拍av一区二区三区| 午夜a成v人精品| 国产aⅴ综合色| 欧美日韩国产免费一区二区| 国产亚洲欧美在线| 一区二区三区美女| 国产成人午夜电影网| 欧美色图第一页| 久久久久久免费网| 亚洲一二三专区| 国内外成人在线视频| 欧美亚一区二区| 久久久一区二区三区捆绑**| 一区二区在线观看不卡| 国产一区二区主播在线| 在线欧美日韩精品| 国产午夜精品一区二区三区嫩草| 一区二区三区欧美日韩| 国产福利视频一区二区三区| 欧美日韩国产美女| 亚洲男人电影天堂| 欧美日韩国产bt| 亚洲天堂久久久久久久| 久久精品国产一区二区| 欧美专区亚洲专区| 国产精品毛片无遮挡高清| 日本美女一区二区三区| 91免费国产在线| 久久尤物电影视频在线观看| 午夜精品福利视频网站 | 91精品国产综合久久久久久久久久 | 欧美一级一区二区| 亚洲免费成人av| 国产成人99久久亚洲综合精品| 欧美乱妇一区二区三区不卡视频| 国产精品女上位| 国产一区二区三区观看| 日韩欧美一二区| 五月天中文字幕一区二区| 97久久精品人人做人人爽| 国产校园另类小说区| 麻豆成人91精品二区三区| 欧美三级中文字| 亚洲丝袜制服诱惑| 不卡高清视频专区| 国产精品网站在线播放| 国精产品一区一区三区mba视频 | 国产精品久久久久久久久快鸭| 国内精品嫩模私拍在线| 日韩视频在线永久播放| 免费一级片91| 欧美一区二区视频在线观看2020 | 精品免费国产一区二区三区四区| 亚洲一区二区三区四区在线观看 | 国产女主播在线一区二区| 国产一区二区美女诱惑| 精品日韩一区二区| 久久精品国产一区二区三| 日韩精品一区二区三区蜜臀| 蜜臀av一区二区在线观看| 欧美一区二区播放| 麻豆一区二区99久久久久| 日韩一区二区在线看| 奇米影视一区二区三区| 欧美一区二区三区免费在线看 | 男人的j进女人的j一区| 日韩一区二区麻豆国产| 国内精品第一页| 国产亚洲人成网站| 不卡欧美aaaaa| 亚洲欧美另类久久久精品| 欧美综合久久久| 日韩精品一卡二卡三卡四卡无卡| 欧美夫妻性生活| 蜜桃视频在线观看一区二区| 欧美岛国在线观看| 国产福利一区二区| 最新热久久免费视频| 91久久精品一区二区三| 亚洲国产精品久久久男人的天堂| 欧美电影一区二区| 精品一区精品二区高清| 久久精品亚洲国产奇米99| 成人一道本在线| 亚洲理论在线观看| 欧美精品亚洲一区二区在线播放| 蜜臂av日日欢夜夜爽一区| 久久久久久久久一| 色婷婷综合激情| 免费xxxx性欧美18vr| 欧美国产综合色视频| 色久综合一二码| 青草av.久久免费一区| 欧美经典一区二区三区| 色综合欧美在线视频区| 丝袜亚洲另类丝袜在线| 久久久美女艺术照精彩视频福利播放| av激情综合网| 午夜伦欧美伦电影理论片| 26uuuu精品一区二区| 91捆绑美女网站| 日本亚洲电影天堂| 国产精品久久久久三级| 欧美日韩精品综合在线| 国产成a人亚洲精品| 亚洲国产精品久久人人爱蜜臀| 精品国产免费一区二区三区四区| 99热精品国产| 九九视频精品免费| 玉足女爽爽91| 久久蜜桃av一区精品变态类天堂| 一本色道久久综合亚洲精品按摩| 另类小说一区二区三区| 日韩美女精品在线| 日韩欧美高清在线| 欧美在线观看禁18| 国产成人鲁色资源国产91色综 | 国产午夜精品理论片a级大结局| 欧美色老头old∨ideo| 韩国理伦片一区二区三区在线播放| 中文字幕亚洲视频| 2020国产精品自拍| 欧美精品视频www在线观看 | 国产老妇另类xxxxx| 天堂蜜桃一区二区三区| 亚洲码国产岛国毛片在线|