⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsync.c

📁 嵌入式系统设计与实例开发实验教材二源码 多线程应用程序设计 串行端口程序设计 AD接口实验 CAN总线通信实验 GPS通信实验 Linux内核移植与编译实验 IC卡读写实验 SD驱动使
💻 C
字号:
/* *  linux/fs/ext3/fsync.c * *  Copyright (C) 1993  Stephen Tweedie (sct@redhat.com) *  from *  Copyright (C) 1992  Remy Card (card@masi.ibp.fr) *                      Laboratoire MASI - Institut Blaise Pascal *                      Universite Pierre et Marie Curie (Paris VI) *  from *  linux/fs/minix/truncate.c   Copyright (C) 1991, 1992  Linus Torvalds *  *  ext3fs fsync primitive * *  Big-endian to little-endian byte-swapping/bitmaps by *        David S. Miller (davem@caip.rutgers.edu), 1995 *  *  Removed unnecessary code duplication for little endian machines *  and excessive __inline__s.  *        Andi Kleen, 1997 * * Major simplications and cleanup - we only need to do the metadata, because * we can depend on generic_block_fdatasync() to sync the data blocks. */#include <linux/sched.h>#include <linux/fs.h>#include <linux/jbd.h>#include <linux/ext3_fs.h>#include <linux/ext3_jbd.h>#include <linux/jbd.h>#include <linux/smp_lock.h>/* * akpm: A new design for ext3_sync_file(). * * This is only called from sys_fsync(), sys_fdatasync() and sys_msync(). * There cannot be a transaction open by this task. (AKPM: quotas?) * Another task could have dirtied this inode.  Its data can be in any * state in the journalling system. * * What we do is just kick off a commit and wait on it.  This will snapshot the * inode to disk. * * Note that there is a serious optimisation we can make here: if the current * inode is not part of j_running_transaction or j_committing_transaction * then we have nothing to do.  That would require implementation of t_ilist, * which isn't too hard. */int ext3_sync_file(struct file * file, struct dentry *dentry, int datasync){	struct inode *inode = dentry->d_inode;	int ret;	J_ASSERT(ext3_journal_current_handle() == 0);	/*	 * fsync_inode_buffers() just walks i_dirty_buffers and waits	 * on them.  It's a no-op for full data journalling because	 * i_dirty_buffers will be ampty.	 * Really, we only need to start I/O on the dirty buffers -	 * we'll end up waiting on them in commit.	 */	ret = fsync_inode_buffers(inode);	ret |= fsync_inode_data_buffers(inode);	ext3_force_commit(inode->i_sb);	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -