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

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

?? bitmap.c

?? elinux jffs初始版本 具體了解JFFS的文件系統(tǒng)!
?? C
字號(hào):
/* *  linux/fs/xiafs/bitmap.c * *  Copyright (C) Q. Frank Xia, 1993. *   *  Based on Linus' minix/bitmap.c *  Copyright (C) Linus Torvalds, 1991, 1992. *   *  This software may be redistributed per Linux Copyright. *//* bitmap.c contains the code that handles the inode and block bitmaps */#include <linux/sched.h>#include <linux/locks.h>#include <linux/xia_fs.h>#include <linux/stat.h>#include <linux/kernel.h>#include <linux/string.h>#include <asm/bitops.h>#include "xiafs_mac.h"char internal_error_message[]="XIA-FS: internal error %s %d\n"; static int find_first_zero(struct buffer_head *bh, int start_bit, int end_bit) {    /* This routine searches first 0 bit from (start_bit) to (end_bit-1).     * If found the bit is set to 1 and the bit # is returned, otherwise,     * -1 is returned. Race condition is avoid by using "btsl" and      * "goto repeat".  ---Frank.     */    int end, i, j, tmp;    u_long *bmap;    bmap=(u_long *)bh->b_data;    end = end_bit >> 5;repeat:    i=start_bit >> 5;    if ( (tmp=(~bmap[i]) & (0xffffffff << (start_bit & 31))) )                goto zone_found;    while (++i < end)        if (~bmap[i]) {	    tmp=~bmap[i];	    goto zone_found;	}    if ( !(tmp=~bmap[i] & ((1 << (end_bit & 31)) -1)) )        return -1;zone_found:        for (j=0; j < 32; j++)        if (tmp & (1 << j))	    break;    if (set_bit(j,bmap+i)) {        start_bit=j + (i << 5) + 1;	goto repeat;    }    mark_buffer_dirty(bh, 1);    return j + (i << 5);}static void clear_buf(struct buffer_head * bh) {    register int i;    register long * lp;    lp=(long *)bh->b_data;    for (i= bh->b_size >> 2; i-- > 0; )        *lp++=0;}static void que(struct buffer_head * bmap[], int bznr[], int pos){    struct buffer_head * tbh;    int tmp;    int i;        tbh=bmap[pos];    tmp=bznr[pos];    for (i=pos; i > 0; i--) {        bmap[i]=bmap[i-1];	bznr[i]=bznr[i-1];    }    bmap[0]=tbh;    bznr[0]=tmp;}#define get_imap_zone(sb, bit_nr, not_que) \      	get__map_zone((sb), (sb)->u.xiafs_sb.s_imap_buf, \		      (sb)->u.xiafs_sb.s_imap_iznr, \		      (sb)->u.xiafs_sb.s_imap_cached, 1, \		      (sb)->u.xiafs_sb.s_imap_zones, _XIAFS_IMAP_SLOTS, \		      bit_nr, not_que)#define get_zmap_zone(sb, bit_nr, not_que) \      	get__map_zone((sb), (sb)->u.xiafs_sb.s_zmap_buf, \		      (sb)->u.xiafs_sb.s_zmap_zznr, \		      (sb)->u.xiafs_sb.s_zmap_cached, \		      1+(sb)->u.xiafs_sb.s_imap_zones, \		      (sb)->u.xiafs_sb.s_zmap_zones, _XIAFS_ZMAP_SLOTS, \		      bit_nr, not_que)static struct buffer_head * get__map_zone(struct super_block *sb, struct buffer_head * bmap_buf[],	  int bznr[], u_char cache, int first_zone, 	  int bmap_zones, int slots, u_long bit_nr, int * not_que){    struct buffer_head * tmp_bh;    int z_nr, i;    z_nr = bit_nr >> XIAFS_BITS_PER_Z_BITS(sb);    if (z_nr >= bmap_zones) {        printk("XIA-FS: bad inode/zone number (%s %d)\n", WHERE_ERR);	return NULL;    }    if (!cache)        return bmap_buf[z_nr];    lock_super(sb);    for (i=0; i < slots; i++)         if (bznr[i]==z_nr)	    break;    if (i < slots) {			/* cache hit */        if (not_que) {	    *not_que=i;	    return bmap_buf[i];	} else {	    que(bmap_buf, bznr, i);	    return bmap_buf[0];	}    }    tmp_bh=bread(sb->s_dev, z_nr+first_zone, XIAFS_ZSIZE(sb)); /* cache not hit */    if (!tmp_bh) {        printk("XIA-FS: read bitmap failed (%s %d)\n", WHERE_ERR);	unlock_super(sb);	return NULL;    }    brelse(bmap_buf[slots-1]);    bmap_buf[slots-1]=tmp_bh;    bznr[slots-1]=z_nr;    if (not_que)        *not_que=slots-1;    else        que(bmap_buf, bznr, slots-1);    return tmp_bh;}#define xiafs_unlock_super(sb, cache)	if (cache) unlock_super(sb);#define get_free_ibit(sb, prev_bit) \   	get_free__bit(sb, sb->u.xiafs_sb.s_imap_buf, \		      sb->u.xiafs_sb.s_imap_iznr, \		      sb->u.xiafs_sb.s_imap_cached, \		      1, sb->u.xiafs_sb.s_imap_zones, \		      _XIAFS_IMAP_SLOTS, prev_bit);#define get_free_zbit(sb, prev_bit) \   	get_free__bit(sb, sb->u.xiafs_sb.s_zmap_buf, \		      sb->u.xiafs_sb.s_zmap_zznr, \		      sb->u.xiafs_sb.s_zmap_cached, \		      1 + sb->u.xiafs_sb.s_imap_zones, \		      sb->u.xiafs_sb.s_zmap_zones, \		      _XIAFS_ZMAP_SLOTS, prev_bit);static u_long get_free__bit(struct super_block *sb, struct buffer_head * bmap_buf[],	      int bznr[], u_char cache, int first_zone, int bmap_zones, 	      int slots, u_long prev_bit){    struct buffer_head * bh;    int not_done=0;    u_long pos, start_bit, end_bit, total_bits;    int z_nr, tmp;     total_bits=bmap_zones << XIAFS_BITS_PER_Z_BITS(sb);     if (prev_bit >= total_bits)        prev_bit=0;    pos=prev_bit+1;    end_bit=XIAFS_BITS_PER_Z(sb);    do {        if (pos >= total_bits)	    pos=0;        if (!not_done) {		/* first time */	    not_done=1;	    start_bit= pos & (end_bit-1);     	} else 	    start_bit=0;	if ( pos < prev_bit && pos+end_bit >= prev_bit) {   /* last time */	    not_done=0;	    end_bit=prev_bit & (end_bit-1);   /* only here end_bit modified */	}        bh = get__map_zone(sb, bmap_buf, bznr, cache, first_zone, 			   bmap_zones, slots, pos, &z_nr);	if (!bh)	    return 0;	tmp=find_first_zero(bh, start_bit, end_bit);	if (tmp >= 0)	    break;	xiafs_unlock_super(sb, sb->u.xiafs_sb.s_zmap_cached);	pos=(pos & ~(end_bit-1))+end_bit;    } while (not_done);    if (tmp < 0)         return 0;    if (cache)      que(bmap_buf, bznr, z_nr);    xiafs_unlock_super(sb, cache);    return (pos & ~(XIAFS_BITS_PER_Z(sb)-1))+tmp;}void xiafs_free_zone(struct super_block * sb, int d_addr){    struct buffer_head * bh;    unsigned int bit, offset;    if (!sb) {        printk(INTERN_ERR);	return;    }    if (d_addr < sb->u.xiafs_sb.s_firstdatazone ||	d_addr >= sb->u.xiafs_sb.s_nzones) {        printk("XIA-FS: bad zone number (%s %d)\n", WHERE_ERR);	return;    }    bh = get_hash_table(sb->s_dev, d_addr, XIAFS_ZSIZE(sb));    if (bh)        mark_buffer_clean(bh);    brelse(bh);    bit=d_addr - sb->u.xiafs_sb.s_firstdatazone + 1;    bh = get_zmap_zone(sb, bit, NULL);    if (!bh)	return;    offset = bit & (XIAFS_BITS_PER_Z(sb) -1);    if (!clear_bit(offset, bh->b_data))        printk("XIA-FS: dev %s"	       " block bit %u (0x%x) already cleared (%s %d)\n",	       kdevname(sb->s_dev), bit, bit, WHERE_ERR);    mark_buffer_dirty(bh, 1);    xiafs_unlock_super(sb, sb->u.xiafs_sb.s_zmap_cached);}int xiafs_new_zone(struct super_block * sb, u_long prev_addr){    struct buffer_head * bh;    int prev_znr, tmp;    if (!sb) {        printk(INTERN_ERR);	return 0;    }    if (prev_addr < sb->u.xiafs_sb.s_firstdatazone || 	prev_addr >= sb->u.xiafs_sb.s_nzones) {        prev_addr=sb->u.xiafs_sb.s_firstdatazone;    }          prev_znr=prev_addr-sb->u.xiafs_sb.s_firstdatazone+1;    tmp=get_free_zbit(sb, prev_znr);    if (!tmp)        return 0;    tmp += sb->u.xiafs_sb.s_firstdatazone -1;    if (!(bh = getblk(sb->s_dev, tmp, XIAFS_ZSIZE(sb)))) {        printk("XIA-FS: I/O error (%s %d)\n", WHERE_ERR);	return 0;    }    if (bh->b_count != 1) {        printk(INTERN_ERR);	return 0;    }    clear_buf(bh);    mark_buffer_uptodate(bh, 1);    mark_buffer_dirty(bh, 1);    brelse(bh);    return tmp;}void xiafs_free_inode(struct inode * inode){    struct buffer_head * bh;    struct super_block * sb;    unsigned long ino;    if (!inode)        return;    if (!inode->i_dev || inode->i_count!=1	|| inode->i_nlink || !inode->i_sb || inode->i_ino < 3	|| inode->i_ino > inode->i_sb->u.xiafs_sb.s_ninodes) {        printk("XIA-FS: bad inode (%s %d)\n", WHERE_ERR);	return;    }    sb = inode->i_sb;    ino = inode->i_ino;    bh = get_imap_zone(sb, ino, NULL);    if (!bh)	return;    clear_inode(inode);    if (!clear_bit(ino & (XIAFS_BITS_PER_Z(sb)-1), bh->b_data))        printk("XIA-FS: dev %s"	       "inode bit %ld (0x%lx) already cleared (%s %d)\n",	       kdevname(inode->i_dev), ino, ino, WHERE_ERR);    mark_buffer_dirty(bh, 1);    xiafs_unlock_super(sb, sb->u.xiafs_sb.s_imap_cached);}struct inode * xiafs_new_inode(struct inode * dir){    struct super_block * sb;    struct inode * inode;    ino_t tmp;    sb = dir->i_sb;    if (!dir || !(inode = get_empty_inode()))        return NULL;    inode->i_sb = sb;    inode->i_flags = inode->i_sb->s_flags;    tmp=get_free_ibit(sb, dir->i_ino);     if (!tmp) {        iput(inode);	return NULL;    }    inode->i_count = 1;    inode->i_nlink = 1;    inode->i_dev = sb->s_dev;    inode->i_uid = current->fsuid;    inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;    inode->i_dirt = 1;    inode->i_ino = tmp;    inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;    inode->i_op = NULL;    inode->i_blocks = 0;    inode->i_blksize = XIAFS_ZSIZE(inode->i_sb);    insert_inode_hash(inode);    return inode;}static int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };static u_long count_zone(struct buffer_head * bh){    int i, tmp;    u_long sum;    sum=0;    for (i=bh->b_size; i-- > 0; ) {        tmp=bh->b_data[i];        sum += nibblemap[tmp & 0xf] + nibblemap[(tmp & 0xff) >> 4];    }    return sum;} unsigned long xiafs_count_free_inodes(struct super_block *sb){    struct buffer_head * bh;    int izones, i, not_que;    u_long sum;    sum=0;    izones=sb->u.xiafs_sb.s_imap_zones;    for (i=0; i < izones; i++) {        bh=get_imap_zone(sb, i << XIAFS_BITS_PER_Z_BITS(sb), &not_que);	if (bh) {	    sum += count_zone(bh);	    xiafs_unlock_super(sb, sb->u.xiafs_sb.s_imap_cached);	}    }    i=izones << XIAFS_BITS_PER_Z_BITS(sb);    return i - sum;}unsigned long xiafs_count_free_zones(struct super_block *sb){    struct buffer_head * bh;    int zzones, i, not_que;    u_long sum;    sum=0;    zzones=sb->u.xiafs_sb.s_zmap_zones;    for (i=0; i < zzones; i++) {        bh=get_zmap_zone(sb, i << XIAFS_BITS_PER_Z_BITS(sb), &not_que);	if (bh) {	    sum += count_zone(bh);	    xiafs_unlock_super(sb, sb->u.xiafs_sb.s_zmap_cached);	}    }    i=zzones << XIAFS_BITS_PER_Z_BITS(sb);    return i - sum;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色系网站成人免费| 亚洲欧洲一区二区在线播放| 国产三级一区二区| 五月激情丁香一区二区三区| 国产乱码精品一品二品| 91久久人澡人人添人人爽欧美| 91精品国产91热久久久做人人| 亚洲欧美日韩人成在线播放| 激情深爱一区二区| 欧美日韩一级大片网址| 亚洲欧洲无码一区二区三区| 狠狠色丁香婷婷综合久久片| 欧美亚洲一区二区在线观看| 国产日韩成人精品| 另类的小说在线视频另类成人小视频在线 | 不卡欧美aaaaa| 91精品国产品国语在线不卡| 亚洲最色的网站| 成人激情视频网站| 久久久久国产免费免费| 蜜桃一区二区三区在线| 欧美日韩国产123区| 亚洲视频一二区| 成人午夜视频免费看| 久久综合九色综合97婷婷女人| 日韩不卡免费视频| 69堂成人精品免费视频| 丝袜诱惑亚洲看片| 91麻豆精品国产91久久久| 亚洲午夜精品17c| 91激情五月电影| 亚洲色图在线播放| 一本一本久久a久久精品综合麻豆| 欧美国产精品一区二区| 成人精品视频一区| 国产精品不卡在线| 国产精品99久久久久久有的能看 | 一区二区在线观看视频在线观看| 成人网页在线观看| www国产精品av| 国产精品一区二区男女羞羞无遮挡| 日韩免费高清电影| 韩国成人精品a∨在线观看| 精品国产一区二区三区不卡 | 亚洲高清不卡在线观看| 欧美在线你懂得| 污片在线观看一区二区| 91精品国产一区二区三区 | 亚洲一区成人在线| 欧美精选一区二区| 老司机午夜精品| 久久久久久免费网| zzijzzij亚洲日本少妇熟睡| ㊣最新国产の精品bt伙计久久| 色综合天天天天做夜夜夜夜做| 亚洲乱码日产精品bd| 91精品国产色综合久久ai换脸| 久久国产麻豆精品| 国产精品午夜在线| 欧美日韩五月天| 久久国产尿小便嘘嘘| 国产精品久久久久影院色老大| 91成人免费网站| 久久国产剧场电影| 中文字幕一区av| 欧美一区二区三区爱爱| 国产 日韩 欧美大片| 亚洲国产欧美日韩另类综合| 日韩你懂的在线观看| 不卡欧美aaaaa| 日韩电影在线免费看| 欧美国产激情一区二区三区蜜月 | 5858s免费视频成人| 国产ts人妖一区二区| 亚洲bt欧美bt精品777| 久久色视频免费观看| 色综合天天综合| 韩国精品主播一区二区在线观看| 亚洲精品乱码久久久久| 久久综合狠狠综合久久综合88 | 国产色婷婷亚洲99精品小说| 欧美日韩综合不卡| 成人在线视频一区二区| 日韩激情一区二区| 亚洲精品久久久蜜桃| 久久亚洲精品国产精品紫薇| 欧美性感一区二区三区| 国产69精品久久99不卡| 蜜桃视频在线观看一区二区| 亚洲乱码国产乱码精品精小说 | 日韩欧美精品在线| 欧美无乱码久久久免费午夜一区| 狠狠色综合色综合网络| 视频一区二区三区中文字幕| 亚洲特黄一级片| 欧美经典一区二区三区| 欧美电影免费观看高清完整版在线 | 亚洲精品国产无套在线观| 久久久久久久久一| 欧美一区在线视频| 欧美性生活一区| 色综合 综合色| 不卡一区中文字幕| 国产成人自拍高清视频在线免费播放| 日本特黄久久久高潮| 亚洲一区二区视频在线观看| 中文字幕在线播放不卡一区| 国产亚洲一区二区三区在线观看| 日韩精品一区二区三区在线| 91精品免费在线| 欧美群妇大交群的观看方式| 欧美日韩中文字幕一区| 91国产免费观看| 91黄视频在线观看| 欧美视频精品在线观看| 欧美色图免费看| 欧美欧美欧美欧美首页| 在线不卡欧美精品一区二区三区| 欧美视频一区二区三区四区 | 狠狠v欧美v日韩v亚洲ⅴ| 日韩电影在线观看电影| 日韩精品成人一区二区在线| 日本不卡视频一二三区| 日本美女一区二区三区| 视频一区在线播放| 麻豆精品在线播放| 精品一区二区三区在线观看国产 | 波多野结衣在线aⅴ中文字幕不卡| 国产精品911| 国产69精品久久777的优势| 北条麻妃国产九九精品视频| av在线不卡免费看| 在线日韩一区二区| 欧美一区二区成人6969| 精品国产91乱码一区二区三区 | 国产91清纯白嫩初高中在线观看| 成人午夜免费电影| 色综合天天综合在线视频| 欧美日产国产精品| 精品久久久久久久一区二区蜜臀| 国产亚洲欧美日韩在线一区| ...av二区三区久久精品| 亚洲综合丁香婷婷六月香| 午夜久久久久久电影| 国产在线视视频有精品| 99久久精品免费看| 欧美精品丝袜中出| 精品成人一区二区三区四区| 日韩毛片视频在线看| 亚洲成人黄色小说| 国产成a人无v码亚洲福利| 欧美亚洲一区二区三区四区| 亚洲精品在线免费播放| 亚洲免费观看高清完整版在线观看 | 成人a级免费电影| 欧美日韩国产高清一区二区三区 | 在线视频你懂得一区| 日韩欧美成人激情| 亚洲欧美日韩一区二区| 麻豆免费看一区二区三区| 91社区在线播放| 日韩精品综合一本久道在线视频| 国产精品久久久久aaaa樱花| 日日夜夜免费精品视频| 成人精品gif动图一区| 欧美丰满高潮xxxx喷水动漫| 国产亚洲综合在线| 日韩国产精品久久| 91丝袜美女网| 欧美精品一区二区不卡| 亚洲午夜久久久久久久久电影网| 国产一区二区三区| 欧美日韩国产高清一区二区三区| 亚洲国产岛国毛片在线| 精品一区二区三区视频在线观看 | 69堂精品视频| 亚洲精品中文在线影院| 国产激情视频一区二区在线观看| 欧美精品久久久久久久多人混战| 亚洲欧洲精品一区二区三区不卡| 久久99国产精品尤物| 欧美精品免费视频| 亚洲午夜久久久| 91丝袜美女网| 国产精品午夜在线| 国产精品91xxx| 精品国产百合女同互慰| 免费在线看一区| 欧美精品成人一区二区三区四区| 亚洲黄色在线视频| 91理论电影在线观看| 国产精品国产三级国产a| 国产麻豆成人精品| 久久综合色天天久久综合图片| 日韩成人一级大片| 欧美精品自拍偷拍| 午夜精品国产更新| 91麻豆精品91久久久久同性| 午夜日韩在线观看| 555夜色666亚洲国产免|