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

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

?? super.c

?? ARM 嵌入式 系統(tǒng) 設(shè)計(jì)與實(shí)例開(kāi)發(fā) 實(shí)驗(yàn)教材 二源碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/* *  linux/fs/ext3/super.c * * Copyright (C) 1992, 1993, 1994, 1995 * Remy Card (card@masi.ibp.fr) * Laboratoire MASI - Institut Blaise Pascal * Universite Pierre et Marie Curie (Paris VI) * *  from * *  linux/fs/minix/inode.c * *  Copyright (C) 1991, 1992  Linus Torvalds * *  Big-endian to little-endian byte-swapping/bitmaps by *        David S. Miller (davem@caip.rutgers.edu), 1995 */#include <linux/config.h>#include <linux/module.h>#include <linux/string.h>#include <linux/fs.h>#include <linux/sched.h>#include <linux/jbd.h>#include <linux/ext3_fs.h>#include <linux/ext3_jbd.h>#include <linux/slab.h>#include <linux/init.h>#include <linux/locks.h>#include <linux/blkdev.h>#include <linux/smp_lock.h>#include <linux/random.h>#include <asm/uaccess.h>#ifdef CONFIG_JBD_DEBUGstatic int ext3_ro_after; /* Make fs read-only after this many jiffies */#endifstatic int ext3_load_journal(struct super_block *, struct ext3_super_block *);static int ext3_create_journal(struct super_block *, struct ext3_super_block *,			       int);static void ext3_commit_super (struct super_block * sb,			       struct ext3_super_block * es,			       int sync);static void ext3_mark_recovery_complete(struct super_block * sb,					struct ext3_super_block * es);static void ext3_clear_journal_err(struct super_block * sb,				   struct ext3_super_block * es);#ifdef CONFIG_JBD_DEBUGint journal_no_write[2];/* * Debug code for turning filesystems "read-only" after a specified * amount of time.  This is for crash/recovery testing. */static void make_rdonly(kdev_t dev, int *no_write){	if (dev) {		printk(KERN_WARNING "Turning device %s read-only\n", 		       bdevname(dev));		*no_write = 0xdead0000 + dev;	}}static void turn_fs_readonly(unsigned long arg){	struct super_block *sb = (struct super_block *)arg;	make_rdonly(sb->s_dev, &journal_no_write[0]);	make_rdonly(EXT3_SB(sb)->s_journal->j_dev, &journal_no_write[1]);	wake_up(&EXT3_SB(sb)->ro_wait_queue);}static void setup_ro_after(struct super_block *sb){	struct ext3_sb_info *sbi = EXT3_SB(sb);	init_timer(&sbi->turn_ro_timer);	if (ext3_ro_after) {		printk(KERN_DEBUG "fs will go read-only in %d jiffies\n",		       ext3_ro_after);		init_waitqueue_head(&sbi->ro_wait_queue);		journal_no_write[0] = 0;		journal_no_write[1] = 0;		sbi->turn_ro_timer.function = turn_fs_readonly;		sbi->turn_ro_timer.data = (unsigned long)sb;		sbi->turn_ro_timer.expires = jiffies + ext3_ro_after;		ext3_ro_after = 0;		add_timer(&sbi->turn_ro_timer);	}}static void clear_ro_after(struct super_block *sb){	del_timer_sync(&EXT3_SB(sb)->turn_ro_timer);	journal_no_write[0] = 0;	journal_no_write[1] = 0;	ext3_ro_after = 0;}#else#define setup_ro_after(sb)	do {} while (0)#define clear_ro_after(sb)	do {} while (0)#endifstatic char error_buf[1024];/* Determine the appropriate response to ext3_error on a given filesystem */static int ext3_error_behaviour(struct super_block *sb){	/* First check for mount-time options */	if (test_opt (sb, ERRORS_PANIC))		return EXT3_ERRORS_PANIC;	if (test_opt (sb, ERRORS_RO))		return EXT3_ERRORS_RO;	if (test_opt (sb, ERRORS_CONT))		return EXT3_ERRORS_CONTINUE;		/* If no overrides were specified on the mount, then fall back	 * to the default behaviour set in the filesystem's superblock	 * on disk. */	switch (le16_to_cpu(sb->u.ext3_sb.s_es->s_errors)) {	case EXT3_ERRORS_PANIC:		return EXT3_ERRORS_PANIC;	case EXT3_ERRORS_RO:		return EXT3_ERRORS_RO;	default:		break;	}	return EXT3_ERRORS_CONTINUE;}/* Deal with the reporting of failure conditions on a filesystem such as * inconsistencies detected or read IO failures. * * On ext2, we can store the error state of the filesystem in the * superblock.  That is not possible on ext3, because we may have other * write ordering constraints on the superblock which prevent us from * writing it out straight away; and given that the journal is about to * be aborted, we can't rely on the current, or future, transactions to * write out the superblock safely. * * We'll just use the journal_abort() error code to record an error in * the journal instead.  On recovery, the journal will compain about * that error until we've noted it down and cleared it. */static void ext3_handle_error(struct super_block *sb){	struct ext3_super_block *es = EXT3_SB(sb)->s_es;	EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;	es->s_state |= cpu_to_le32(EXT3_ERROR_FS);	if (sb->s_flags & MS_RDONLY)		return;	if (ext3_error_behaviour(sb) != EXT3_ERRORS_CONTINUE) {		EXT3_SB(sb)->s_mount_opt |= EXT3_MOUNT_ABORT;		journal_abort(EXT3_SB(sb)->s_journal, -EIO);	}	if (ext3_error_behaviour(sb) == EXT3_ERRORS_PANIC) 		panic ("EXT3-fs (device %s): panic forced after error\n",		       bdevname(sb->s_dev));	if (ext3_error_behaviour(sb) == EXT3_ERRORS_RO) {		printk (KERN_CRIT "Remounting filesystem read-only\n");		sb->s_flags |= MS_RDONLY;	}	ext3_commit_super(sb, es, 1);}void ext3_error (struct super_block * sb, const char * function,		 const char * fmt, ...){	va_list args;	va_start (args, fmt);	vsprintf (error_buf, fmt, args);	va_end (args);	printk (KERN_CRIT "EXT3-fs error (device %s): %s: %s\n",		bdevname(sb->s_dev), function, error_buf);	ext3_handle_error(sb);}const char *ext3_decode_error(struct super_block * sb, int errno, char nbuf[16]){	char *errstr = NULL;		switch (errno) {	case -EIO:		errstr = "IO failure";		break;	case -ENOMEM:		errstr = "Out of memory";		break;	case -EROFS:		if (!sb || EXT3_SB(sb)->s_journal->j_flags & JFS_ABORT)			errstr = "Journal has aborted";		else			errstr = "Readonly filesystem";		break;	default:		/* If the caller passed in an extra buffer for unknown		 * errors, textualise them now.  Else we just return		 * NULL. */		if (nbuf) {			/* Check for truncated error codes... */			if (snprintf(nbuf, 16, "error %d", -errno) >= 0)				errstr = nbuf;		}				break;	}	return errstr;}/* __ext3_std_error decodes expected errors from journaling functions * automatically and invokes the appropriate error response.  */void __ext3_std_error (struct super_block * sb, const char * function,		       int errno){	char nbuf[16];	const char *errstr = ext3_decode_error(sb, errno, nbuf);	printk (KERN_CRIT "EXT3-fs error (device %s) in %s: %s\n",		bdevname(sb->s_dev), function, errstr);		ext3_handle_error(sb);}/* * ext3_abort is a much stronger failure handler than ext3_error.  The * abort function may be used to deal with unrecoverable failures such * as journal IO errors or ENOMEM at a critical moment in log management. * * We unconditionally force the filesystem into an ABORT|READONLY state, * unless the error response on the fs has been set to panic in which * case we take the easy way out and panic immediately. */void ext3_abort (struct super_block * sb, const char * function,		 const char * fmt, ...){	va_list args;	printk (KERN_CRIT "ext3_abort called.\n");	va_start (args, fmt);	vsprintf (error_buf, fmt, args);	va_end (args);	if (ext3_error_behaviour(sb) == EXT3_ERRORS_PANIC)		panic ("EXT3-fs panic (device %s): %s: %s\n",		       bdevname(sb->s_dev), function, error_buf);	printk (KERN_CRIT "EXT3-fs abort (device %s): %s: %s\n",		bdevname(sb->s_dev), function, error_buf);	if (sb->s_flags & MS_RDONLY)		return;		printk (KERN_CRIT "Remounting filesystem read-only\n");	sb->u.ext3_sb.s_mount_state |= EXT3_ERROR_FS;	sb->s_flags |= MS_RDONLY;	sb->u.ext3_sb.s_mount_opt |= EXT3_MOUNT_ABORT;	journal_abort(EXT3_SB(sb)->s_journal, -EIO);}/* Deal with the reporting of failure conditions while running, such as * inconsistencies in operation or invalid system states. * * Use ext3_error() for cases of invalid filesystem states, as that will * record an error on disk and force a filesystem check on the next boot. */NORET_TYPE void ext3_panic (struct super_block * sb, const char * function,			    const char * fmt, ...){	va_list args;	va_start (args, fmt);	vsprintf (error_buf, fmt, args);	va_end (args);	/* this is to prevent panic from syncing this filesystem */	/* AKPM: is this sufficient? */	sb->s_flags |= MS_RDONLY;	panic ("EXT3-fs panic (device %s): %s: %s\n",	       bdevname(sb->s_dev), function, error_buf);}void ext3_warning (struct super_block * sb, const char * function,		   const char * fmt, ...){	va_list args;	va_start (args, fmt);	vsprintf (error_buf, fmt, args);	va_end (args);	printk (KERN_WARNING "EXT3-fs warning (device %s): %s: %s\n",		bdevname(sb->s_dev), function, error_buf);}void ext3_update_dynamic_rev(struct super_block *sb){	struct ext3_super_block *es = EXT3_SB(sb)->s_es;	if (le32_to_cpu(es->s_rev_level) > EXT3_GOOD_OLD_REV)		return;	ext3_warning(sb, __FUNCTION__,		     "updating to rev %d because of new feature flag, "		     "running e2fsck is recommended",		     EXT3_DYNAMIC_REV);	es->s_first_ino = cpu_to_le32(EXT3_GOOD_OLD_FIRST_INO);	es->s_inode_size = cpu_to_le16(EXT3_GOOD_OLD_INODE_SIZE);	es->s_rev_level = cpu_to_le32(EXT3_DYNAMIC_REV);	/* leave es->s_feature_*compat flags alone */	/* es->s_uuid will be set by e2fsck if empty */	/*	 * The rest of the superblock fields should be zero, and if not it	 * means they are likely already in use, so leave them alone.  We	 * can leave it up to e2fsck to clean up any inconsistencies there.	 */}/* * Open the external journal device */static struct block_device *ext3_blkdev_get(kdev_t dev){	struct block_device *bdev;	int err = -ENODEV;	bdev = bdget(kdev_t_to_nr(dev));	if (bdev == NULL)		goto fail;	err = blkdev_get(bdev, FMODE_READ|FMODE_WRITE, 0, BDEV_FS);	if (err < 0)		goto fail;	return bdev;fail:	printk(KERN_ERR "EXT3: failed to open journal device %s: %d\n",			bdevname(dev), err);	return NULL;}/* * Release the journal device */static int ext3_blkdev_put(struct block_device *bdev){	return blkdev_put(bdev, BDEV_FS);}static int ext3_blkdev_remove(struct ext3_sb_info *sbi){	struct block_device *bdev;	int ret = -ENODEV;	bdev = sbi->journal_bdev;	if (bdev) {		ret = ext3_blkdev_put(bdev);		sbi->journal_bdev = 0;	}	return ret;}#define orphan_list_entry(l) list_entry((l), struct inode, u.ext3_i.i_orphan)static void dump_orphan_list(struct super_block *sb, struct ext3_sb_info *sbi){	struct list_head *l;		printk(KERN_ERR "sb orphan head is %d\n", 	       le32_to_cpu(sbi->s_es->s_last_orphan));		printk(KERN_ERR "sb_info orphan list:\n");	list_for_each(l, &sbi->s_orphan) {		struct inode *inode = orphan_list_entry(l);		printk(KERN_ERR "  "		       "inode 0x%04x:%ld at %p: mode %o, nlink %d, next %d\n",		       inode->i_dev, inode->i_ino, inode,		       inode->i_mode, inode->i_nlink, 		       le32_to_cpu(NEXT_ORPHAN(inode)));	}}void ext3_put_super (struct super_block * sb){	struct ext3_sb_info *sbi = EXT3_SB(sb);	struct ext3_super_block *es = sbi->s_es;	kdev_t j_dev = sbi->s_journal->j_dev;	int i;	journal_destroy(sbi->s_journal);	if (!(sb->s_flags & MS_RDONLY)) {		EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);		es->s_state = le16_to_cpu(sbi->s_mount_state);		BUFFER_TRACE(sbi->s_sbh, "marking dirty");		mark_buffer_dirty(sbi->s_sbh);		ext3_commit_super(sb, es, 1);	}	for (i = 0; i < sbi->s_gdb_count; i++)		brelse(sbi->s_group_desc[i]);	kfree(sbi->s_group_desc);	for (i = 0; i < EXT3_MAX_GROUP_LOADED; i++)		brelse(sbi->s_inode_bitmap[i]);	for (i = 0; i < EXT3_MAX_GROUP_LOADED; i++)		brelse(sbi->s_block_bitmap[i]);	brelse(sbi->s_sbh);	/* Debugging code just in case the in-memory inode orphan list	 * isn't empty.  The on-disk one can be non-empty if we've	 * detected an error and taken the fs readonly, but the	 * in-memory list had better be clean by this point. */	if (!list_empty(&sbi->s_orphan))		dump_orphan_list(sb, sbi);	J_ASSERT(list_empty(&sbi->s_orphan));	invalidate_buffers(sb->s_dev);	if (j_dev != sb->s_dev) {		/*		 * Invalidate the journal device's buffers.  We don't want them		 * floating about in memory - the physical journal device may		 * hotswapped, and it breaks the `ro-after' testing code.		 */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女同ⅹxx女同tv| 欧美在线一二三| 91色porny蝌蚪| 欧美日韩国产综合久久| 欧美成人免费网站| 国产精品欧美一级免费| 亚洲一区二区三区中文字幕 | 欧美精选午夜久久久乱码6080| 欧美美女一区二区| 久久久久久97三级| 亚洲午夜电影在线观看| 精品一区二区三区免费播放| 91亚洲资源网| 欧美一级片免费看| 国产精品国产三级国产普通话蜜臀| 亚洲一区成人在线| 国产91精品免费| 在线成人av影院| 国产精品二区一区二区aⅴ污介绍| 偷拍与自拍一区| 成人免费高清视频| 欧美电影免费观看高清完整版在线观看 | 国产精品色婷婷| 日韩在线一区二区三区| 不卡高清视频专区| 日韩免费高清av| 亚洲国产一区二区三区青草影视| 国产麻豆欧美日韩一区| 精品视频999| ...xxx性欧美| 国产乱色国产精品免费视频| 欧美日韩高清一区二区三区| 国产精品色在线| 欧美精品自拍偷拍| 日韩伦理av电影| 国产麻豆91精品| 日韩手机在线导航| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品一二三| 日韩一区二区视频| 亚洲h精品动漫在线观看| 成人va在线观看| 久久亚洲二区三区| 久久国产日韩欧美精品| 欧美日韩久久一区| 亚洲男人的天堂在线aⅴ视频 | 欧美极品少妇xxxxⅹ高跟鞋 | 欧美成人精品3d动漫h| 亚洲一区在线电影| 99久久综合99久久综合网站| 久久久久久久久久久电影| 蜜臀av性久久久久蜜臀aⅴ | 蜜臀久久99精品久久久久宅男| 91精品福利视频| 亚洲色大成网站www久久九九| 国产高清亚洲一区| 久久综合久色欧美综合狠狠| 日本亚洲天堂网| 69精品人人人人| 在线免费亚洲电影| 中文字幕字幕中文在线中不卡视频| 国产成人在线视频免费播放| 久久免费偷拍视频| 免费黄网站欧美| 欧美一级免费观看| 青椒成人免费视频| 欧美一区午夜视频在线观看| 丝袜美腿亚洲一区二区图片| 337p亚洲精品色噜噜狠狠| 五月激情六月综合| 欧美肥胖老妇做爰| 美女性感视频久久| 精品三级在线观看| 国产伦精一区二区三区| 久久精品人人做人人爽人人| 国产一区二区三区av电影 | av网站一区二区三区| 国产精品免费视频网站| 9i看片成人免费高清| 亚洲天堂2014| 欧美日韩一区二区三区免费看 | 日韩欧美中文字幕制服| 麻豆视频一区二区| 久久青草国产手机看片福利盒子| 韩国一区二区三区| 国产欧美日韩精品一区| 99久久精品国产导航| 亚洲一区二区三区四区在线| 欧美男女性生活在线直播观看| 免费av成人在线| 精品不卡在线视频| 成人午夜电影久久影院| 亚洲人xxxx| 欧美日韩国产免费| 免费高清在线一区| 欧美激情一区二区在线| 色综合激情久久| 日韩成人午夜电影| 久久久久一区二区三区四区| 成人开心网精品视频| 亚洲综合色婷婷| 日韩片之四级片| 99在线热播精品免费| 亚洲bt欧美bt精品| 久久综合五月天婷婷伊人| 成人av在线网| 午夜精品aaa| 久久久久久电影| 在线亚洲欧美专区二区| 青青草精品视频| 国产精品你懂的在线欣赏| 欧美影片第一页| 国产在线视频不卡二| ...中文天堂在线一区| 在线播放中文字幕一区| 国产超碰在线一区| 香蕉久久夜色精品国产使用方法| 久久免费偷拍视频| 欧美吻胸吃奶大尺度电影| 国产呦萝稀缺另类资源| 亚洲在线观看免费视频| 久久色在线视频| 日本高清不卡aⅴ免费网站| 久久草av在线| 亚洲青青青在线视频| 精品国产凹凸成av人网站| 99久久er热在这里只有精品15 | 久久久噜噜噜久久中文字幕色伊伊 | 久久精品免视看| 欧美又粗又大又爽| 国产精一区二区三区| 亚洲成人在线网站| 国产精品久久久久久久久免费樱桃| 欧美日韩黄视频| 成人va在线观看| 激情亚洲综合在线| 亚洲国产精品综合小说图片区| 中文字幕成人网| 欧美一卡2卡3卡4卡| 91亚洲精品久久久蜜桃| 国产真实精品久久二三区| 亚洲国产精品一区二区www| 国产欧美一区在线| 日韩一区二区三区免费看| 91丝袜美女网| 国产aⅴ精品一区二区三区色成熟| 午夜精彩视频在线观看不卡| 亚洲欧洲精品一区二区精品久久久| 精品国产青草久久久久福利| 欧美午夜影院一区| 91捆绑美女网站| 国产 日韩 欧美大片| 精品在线一区二区| 视频一区在线播放| 一区二区三区在线视频播放| 国产精品国产馆在线真实露脸| 久久女同精品一区二区| 日韩精品中文字幕一区二区三区| 精品视频在线看| 在线视频国内自拍亚洲视频| 91丨九色丨黑人外教| 成人影视亚洲图片在线| 国产精品香蕉一区二区三区| 精品一区二区三区免费播放| 久久精品国产在热久久| 日韩精品一级二级| 日日夜夜精品视频天天综合网| 夜夜嗨av一区二区三区四季av | 欧美精品少妇一区二区三区| 色欧美88888久久久久久影院| av在线播放一区二区三区| 国产超碰在线一区| 大胆亚洲人体视频| 成人av中文字幕| 99久久综合99久久综合网站| 成人免费不卡视频| 99久久国产综合精品女不卡| 99久久99久久久精品齐齐| 9l国产精品久久久久麻豆| 91亚洲午夜精品久久久久久| 色综合久久天天| 色欧美片视频在线观看| 欧美午夜电影在线播放| 欧美精品在线观看播放| 欧美一区日本一区韩国一区| 制服丝袜一区二区三区| 91精品国产综合久久久蜜臀图片| 宅男在线国产精品| 欧美成人aa大片| 久久久国产午夜精品| 国产精品日日摸夜夜摸av| 国产精品狼人久久影院观看方式| 国产精品福利在线播放| 亚洲欧美另类图片小说| 一区二区三区精品| 丝袜美腿高跟呻吟高潮一区| 精品一区二区三区日韩| 风间由美性色一区二区三区| 91蜜桃免费观看视频| 欧美日韩精品高清|