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

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

?? super.c

?? 嵌入式linux下基于SRAM的內存文件系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * FILE NAME fs/pramfs/super.c * * BRIEF DESCRIPTION * * Super block operations. * * Author: Steve Longerbeam <stevel@mvista.com, or source@mvista.com> * * Copyright 2003 Sony Corporation * Copyright 2003 Matsushita Electric Industrial Co., Ltd. * 2003-2004 (c) MontaVista Software, Inc. This file is licensed under * the terms of the GNU General Public License version 2. This program * is licensed "as is" without any warranty of any kind, whether express * or implied. */#include <linux/module.h>#include <linux/string.h>#include <linux/slab.h>#include <linux/init.h>#include <linux/blkdev.h>#include <linux/parser.h>#include <linux/vfs.h>#include <linux/pram_fs.h>#include <asm/uaccess.h>#include <asm/io.h>#ifdef CONFIG_PRAMFS_VNVRAM#include <linux/vnvram.h>#include <linux/mtd/mtd.h>#endifMODULE_AUTHOR("Steve Longerbeam, stevel@mvista.com");MODULE_DESCRIPTION("Protected/Persistent RAM Filesystem");MODULE_LICENSE("GPL");static struct super_operations pram_sops;#ifndef MODULEextern struct list_head super_blocks;struct super_block * find_pramfs_super(void){	struct list_head *p;	list_for_each(p, &super_blocks) {		struct super_block * s = sb_entry(p);		if (s->s_magic == PRAM_SUPER_MAGIC)			return s;	}	return NULL;}EXPORT_SYMBOL(find_pramfs_super);#endifstatic void pram_set_blocksize(struct super_block * sb, unsigned long size){	int bits, min_bits, max_bits;	min_bits = ilog2(PRAM_MIN_BLOCK_SIZE);	max_bits = ilog2(PRAM_MAX_BLOCK_SIZE);	bits = ilog2(size);	if (bits < min_bits)		bits = min_bits;	if (bits > max_bits)		bits = max_bits;	sb->s_blocksize_bits = bits;	sb->s_blocksize = (1<<bits);}static inline void * pram_ioremap(struct pram_sb_info *sbi,				  unsigned long phys_addr, size_t size){	void * retval;#ifdef CONFIG_PRAMFS_VNVRAM	/* if use vnvram, no need ioremap at all */	if (sbi->vnvram)		retval = sbi->vnvram->virt_addr;	else#endif		retval = (void *)ioremap(phys_addr, size);#ifndef CONFIG_PRAMFS_NOWP	if (retval) {		spin_lock(&init_mm.page_table_lock);		pram_writeable(retval, size, 0);		spin_unlock(&init_mm.page_table_lock);	}#endif	return retval;}static inline void pram_iounmap(struct pram_sb_info *sbi, void *virt_addr){#ifdef CONFIG_PRAMFS_VNVRAM	/* if use vnvram, no need ioremap at all */	if (sbi->vnvram)		return;#endif	iounmap((void __iomem *)virt_addr);}static inline intinit_super(struct super_block * sb, void * data, unsigned long maxsize,	   struct pram_sb_info * sbi,	   struct pram_super_block ** superp, struct pram_inode ** root_ip){	char *p;	unsigned long blocksize;	struct pram_super_block * super;	struct pram_inode * root_i;	int retval = -EINVAL;	unsigned long bpi, num_inodes, bitmap_size;	unsigned long num_blocks;	pram_off_t bitmap_start;#ifdef CONFIG_PRAMFS_VNVRAM	struct vnvram_info *vnvram = sbi->vnvram;	if (vnvram && maxsize > vnvram->size) {		pram_err("size 0x%lx too large, vnvram only 0x%x",			 maxsize, vnvram->size);		goto out;	}#endif /* CONFIG_PRAMFS_VNVRAM */	sbi->virt_addr = pram_ioremap(sbi, sbi->phys_addr, maxsize);	if (!sbi->virt_addr) {		pram_err("ioremap of the pramfs image failed\n");		goto out;	}	if ((p = strstr((char *)data, "bs=")))		blocksize = simple_strtoul(p + 3, NULL, 0);#ifdef CONFIG_PRAMFS_VNVRAM	/* if use vnvram, blocksize is chunk size default */	else if (vnvram)		blocksize = vnvram->chunk_size;#endif	else		blocksize = PRAM_DEF_BLOCK_SIZE;	pram_set_blocksize(sb, blocksize);	blocksize = sb->s_blocksize;	/* maxsize should be page aligned and block aligned */	if (maxsize & (PAGE_SIZE-1) || maxsize & (blocksize - 1)) {		pram_err("size 0x%lx isn't aligned to"			 " a page or block boundary\n", maxsize);		goto out;	}	if ((p = strstr((char *)data, "N="))) {		num_inodes = simple_strtoul(p + 2, NULL, 0);	} else {		if ((p = strstr((char *)data, "bpi=")))			bpi = simple_strtoul(p + 4, NULL, 0);		else {			/* default is that 5% of the filesystem is			   devoted to the inode table */			bpi = 20 * PRAM_INODE_SIZE;		}		num_inodes = maxsize / bpi;	}	/* up num_inodes such that the end of the inode table	   (and start of bitmap) is on a block boundary */	bitmap_start = PRAM_SB_SIZE + (num_inodes<<PRAM_INODE_BITS);	if (bitmap_start & (blocksize - 1))		bitmap_start = (bitmap_start + blocksize) & ~(blocksize-1);	num_inodes = (bitmap_start - PRAM_SB_SIZE) >> PRAM_INODE_BITS;	/* ckeck size */	{		unsigned long failsafe_blocks =		    pram_get_failsafe_blocks_count(sb) << sb->s_blocksize_bits;		if (maxsize < (bitmap_start + failsafe_blocks)) {			pram_err("size too small, at least 0x%lx\n",				 bitmap_start + failsafe_blocks				 + sb->s_blocksize);			goto out;		}	}	num_blocks = (maxsize - bitmap_start) >> sb->s_blocksize_bits;	num_blocks -= pram_get_failsafe_blocks_count(sb);	/* calc the data blocks in-use bitmap size in bytes */	if (num_blocks & 7)		bitmap_size = ((num_blocks + 8) & ~7) >> 3;	else		bitmap_size = num_blocks >> 3;	/* round it up to the nearest blocksize boundary */	if (bitmap_size & (blocksize - 1))		bitmap_size = (bitmap_size + blocksize) & ~(blocksize-1);	pram_info("blocksize %lu, num inodes %lu, num blocks %lu\n",		  blocksize, num_inodes, num_blocks);	pram_dbg("bitmap start 0x%08lx, bitmap size %lu\n",		 (unsigned long)bitmap_start, bitmap_size);	pram_dbg("max name length %d\n", PRAM_NAME_LEN);#ifdef CONFIG_PRAMFS_FAILSAFE	pram_dbg("num failsafe blocks %lu\n",		 pram_get_failsafe_blocks_count(sb));#endif	super = pram_get_super(sb);	pram_lock_range(sb, super, PRAM_SB_SIZE); /* no use lock_super! */	memset(super, 0, PRAM_SB_SIZE);	super->s_size = maxsize;	super->s_blocksize = blocksize;	super->s_inodes_count = num_inodes;	pram_set_free_inodes_count(sb, num_inodes - 1);	pram_set_free_inode_hint(sb, 1);	super->s_blocks_count = num_blocks;	super->s_bitmap_blocks = bitmap_size >> sb->s_blocksize_bits;	pram_set_free_blocks_count(sb, num_blocks - super->s_bitmap_blocks);	super->s_bitmap_start = bitmap_start;	pram_unlock_range(sb, super, PRAM_SB_SIZE);	/* clear out inode table */	{		unsigned long i = PRAM_SB_SIZE;		while (i < bitmap_start) {			void *inode = (u8 *)super + i;			pram_lock_range(sb, inode, PRAM_INODE_SIZE);			memset(inode, 0, PRAM_INODE_SIZE);			pram_unlock_range(sb, inode, PRAM_INODE_SIZE);			i += PRAM_INODE_SIZE;		}	}	root_i = pram_get_inode(sb, PRAM_ROOT_INO);	pram_lock_range(sb, root_i, PRAM_INODE_SIZE); /* no use lock_inode! */	root_i->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR;	root_i->i_links_count = 2;	root_i->i_d.d_parent = PRAM_ROOT_INO;	pram_sync_inode(root_i);	pram_unlock_range(sb, root_i, PRAM_INODE_SIZE);	pram_lock_range(sb, pram_get_bitmap(sb), bitmap_size);	pram_init_bitmap(sb);	pram_unlock_range(sb, pram_get_bitmap(sb), bitmap_size);	/* set magic in the end, make sure every thing is fine */	pram_lock_range(sb, super, PRAM_SB_SIZE); /* no use lock_super! */	super->s_magic = PRAM_SUPER_MAGIC;	pram_sync_super(super);	pram_unlock_range(sb, super, PRAM_SB_SIZE);	*superp = super;	*root_ip = root_i;	retval = 0;out:	return retval;}#ifdef CONFIG_PRAMFS_FAILSAFEstatic void inline pram_do_powerfail_restore(struct super_block * sb,					     struct pram_super_block * super){	__u32 count, i;	pram_powerfail_restore(sb);	pram_fsck(sb);	/* update fbi's free_inode*, free_block* data */	for (count = 0, i = 1; i < super->s_inodes_count; i++) {		ino_t ino = PRAM_ROOT_INO + (i << PRAM_INODE_BITS);		struct pram_inode * pi = pram_get_inode(sb, ino);		if (pram_inode_is_free(pi))			count++;	}	pram_set_free_inodes_count(sb, count);	pram_set_free_inode_hint(sb, 1);	count = bitmap_weight(pram_get_bitmap(sb), super->s_blocks_count);	count = super->s_blocks_count - count;	pram_set_free_blocks_count(sb, count);	pram_info("free inodes %d free blocks %d\n",		  pram_get_free_inodes_count(sb),		  pram_get_free_blocks_count(sb));}#elsestatic void inline pram_do_powerfail_restore(struct super_block * sb,					     struct pram_super_block * super) {}#endifstatic inline intfill_super(struct super_block * sb, void * data, struct pram_sb_info * sbi,	   struct pram_super_block ** superp, struct pram_inode ** root_ip){	int retval = -EINVAL;	struct pram_super_block * super;	struct pram_inode * root_i;	pram_off_t root_offset;	unsigned long maxsize, blocksize;	pram_info("checking physical address 0x%lx for pramfs image\n",		   sbi->phys_addr);	/* Map only one page for now. Will remap it when fs size is known. */	sbi->virt_addr = pram_ioremap(sbi, sbi->phys_addr, PAGE_SIZE);	if (!sbi->virt_addr) {		pram_err("ioremap of the pramfs image failed\n");		goto out;	}	super = pram_get_super(sb);	/* Do sanity checks on the superblock */	if (super->s_magic != PRAM_SUPER_MAGIC) {		pram_err("wrong magic\n");		goto out;	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
6080yy午夜一二三区久久| 色综合久久中文综合久久97| 婷婷国产在线综合| 亚洲国产日产av| 一区二区成人在线| 亚洲国产美国国产综合一区二区| 亚洲日本免费电影| 亚洲高清免费在线| 日韩中文欧美在线| 久久99最新地址| 激情五月激情综合网| 国产精品综合二区| 99视频精品免费视频| 日本高清免费不卡视频| 欧美日韩精品系列| 欧美成人福利视频| 欧美国产成人精品| 亚洲精品视频在线看| 亚洲成人av中文| 美腿丝袜亚洲色图| 国产91高潮流白浆在线麻豆| 99综合影院在线| 欧美区视频在线观看| 日韩欧美第一区| 欧美国产日韩精品免费观看| 亚洲欧美一区二区三区极速播放 | 97精品久久久午夜一区二区三区| 色欧美片视频在线观看在线视频| 制服丝袜中文字幕亚洲| 国产亚洲成aⅴ人片在线观看| 中文字幕第一区第二区| 一区二区三区四区国产精品| 卡一卡二国产精品| 成人黄页毛片网站| 91精品午夜视频| 国产精品天天看| 日韩精品电影在线| 99精品国产91久久久久久 | 国产成人av自拍| 欧美性高清videossexo| 久久综合九色综合欧美亚洲| 亚洲精品视频在线看| 美女一区二区三区| 日本韩国欧美一区二区三区| 久久久无码精品亚洲日韩按摩| 一区二区三区不卡在线观看| 国产精品一级片| 91麻豆精品久久久久蜜臀| 中文字幕在线观看一区| 精品一区二区三区在线播放视频 | 久久久美女艺术照精彩视频福利播放| 亚洲精品乱码久久久久久黑人| 九色|91porny| 欧美一区二区三区的| 亚洲欧洲无码一区二区三区| 韩日欧美一区二区三区| 欧美日韩国产一区| 亚洲最新在线观看| av高清不卡在线| 国产日韩av一区| 国产在线视频精品一区| 欧美精品久久99| 亚洲一级不卡视频| 色综合色综合色综合色综合色综合| 国产午夜精品久久| 国产高清久久久久| 久久久综合视频| 国产精品一区二区91| 久久亚洲精品国产精品紫薇| 美女网站色91| 精品入口麻豆88视频| 全国精品久久少妇| 日韩一二三区视频| 久久精品国产秦先生| 91精品国产综合久久久久久漫画| 亚洲图片欧美综合| 欧美日韩国产美| 亚洲国产色一区| 7777精品伊人久久久大香线蕉完整版| 亚洲国产aⅴ天堂久久| 欧美午夜精品久久久久久孕妇| 亚洲影院理伦片| 7777精品伊人久久久大香线蕉的 | av高清久久久| 亚洲日本一区二区三区| 日本精品一级二级| 亚洲综合免费观看高清完整版在线 | 日韩一区二区三| 久久www免费人成看片高清| 久久久久久久久久久久电影| 成人黄色电影在线| 一区二区三区日韩| 3d成人h动漫网站入口| 久久国产精品区| 中文字幕不卡在线观看| 色综合亚洲欧洲| 日韩专区在线视频| 国产日韩欧美一区二区三区乱码| 波波电影院一区二区三区| 亚洲精品久久久蜜桃| 这里是久久伊人| 国产盗摄一区二区三区| 亚洲另类在线一区| 日韩欧美一区在线观看| 不卡影院免费观看| 亚洲va欧美va天堂v国产综合| 日本一区二区成人在线| 色综合久久综合| 蜜臀久久99精品久久久久久9| 国产午夜亚洲精品理论片色戒| 色狠狠一区二区三区香蕉| 全国精品久久少妇| 亚洲欧美二区三区| 久久免费电影网| 欧美日韩激情在线| 99视频在线观看一区三区| 日本欧美加勒比视频| 国产精品国产三级国产普通话蜜臀 | 播五月开心婷婷综合| 日本色综合中文字幕| 亚洲色图.com| 国产色91在线| 欧美一级片在线| 欧美极品xxx| 久久综合av免费| 国产精品成人免费| 日韩欧美电影一二三| 在线视频你懂得一区| 国产精品香蕉一区二区三区| 亚洲午夜国产一区99re久久| 国产日韩成人精品| 成人av中文字幕| www.视频一区| 91久久香蕉国产日韩欧美9色| 欧美四级电影在线观看| 777久久久精品| 久久久精品日韩欧美| 国产精品午夜久久| 亚洲在线观看免费视频| 日韩电影免费一区| 国产成人精品一区二区三区四区| 一本久久精品一区二区| 91精品国产综合久久福利软件| 精品电影一区二区三区| 中文字幕中文乱码欧美一区二区 | 国产精品1024| 91原创在线视频| 3atv在线一区二区三区| 国产精品热久久久久夜色精品三区| 亚洲欧美日韩国产中文在线| 毛片av一区二区| 91视频免费观看| 精品国产91久久久久久久妲己| 国产精品久久夜| 美女视频一区二区三区| 99久久婷婷国产综合精品电影| 欧美一级xxx| 中文字幕欧美一| 久久精品国产精品亚洲精品| 97精品久久久午夜一区二区三区 | 久久精品国产久精国产| 91蜜桃免费观看视频| 欧美精品一区视频| 亚洲国产精品久久一线不卡| 国产凹凸在线观看一区二区| 欧美日韩高清一区二区三区| 国产精品不卡一区| 国产在线不卡一区| 精品视频一区二区不卡| 国产精品久久久久久久午夜片| 日韩在线卡一卡二| 91福利区一区二区三区| 亚洲国产成人自拍| 久久激情五月婷婷| 中文字幕视频一区| 韩国女主播一区二区三区| 欧美日韩中文字幕一区| 国产精品国产三级国产aⅴ无密码| 久久电影网电视剧免费观看| 欧美视频中文一区二区三区在线观看| 日本一区二区三区电影| 久久国产精品露脸对白| 91精品国产综合久久香蕉的特点 | 欧美性猛交一区二区三区精品| 国产精品久久久久天堂| 国产一区不卡视频| 精品国精品自拍自在线| 欧美aaaaa成人免费观看视频| 欧美日韩一区二区三区在线看| 亚洲精品乱码久久久久久日本蜜臀| 成人黄色一级视频| 国产精品乱人伦一区二区| 国产白丝精品91爽爽久久 | 亚洲高清免费视频| 欧美在线|欧美| 亚洲一二三四在线观看| 欧美综合一区二区| 夜夜夜精品看看| 精品视频一区 二区 三区| 亚洲国产综合色|