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

📄 journal_xfs.c

📁 嵌入式系统设计与实例开发实验教材二源码 多线程应用程序设计 串行端口程序设计 AD接口实验 CAN总线通信实验 GPS通信实验 Linux内核移植与编译实验 IC卡读写实验 SD驱动使
💻 C
字号:
/* *  * Intermezzo. (C) 1998 Peter J. Braam *   */#include <linux/types.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/vmalloc.h>#include <linux/stat.h>#include <linux/errno.h>#include <linux/locks.h>#include <asm/segment.h>#include <asm/uaccess.h>#include <linux/string.h>#ifdef CONFIG_FS_XFS#include <linux/xfs_fs.h>#endif#include <linux/intermezzo_fs.h>#include <linux/intermezzo_upcall.h>#include <linux/intermezzo_psdev.h>#include <linux/intermezzo_kml.h>#include <linux/intermezzo_journal.h>#if 0/* XFS has journalling, but these functions do nothing yet... */static unsigned long presto_xfs_freespace(struct presto_file_set *fset,                                         struct super_block *sb){#if 0        vfs_t *vfsp = LINVFS_GET_VFS(sb);        struct statvfs_t stat;         bhv_desc_t *bdp;        unsigned long avail;         int rc;        VFS_STATVFS(vfsp, &stat, NULL, rc);        avail = statp.f_bfree;        return sbp->sb_fdblocks;; #endif        return 0x0fffffff;}/* start the filesystem journal operations */static void *presto_xfs_trans_start(struct presto_file_set *fset,		       struct inode *inode, int op){	int xfs_op;	/* do a free blocks check as in journal_ext3? does anything protect	 * the space in that case or can it disappear out from under us	 * anyway? */	/* copied from xfs_trans.h, skipping header maze for now */#define XFS_TRANS_SETATTR_NOT_SIZE      1#define XFS_TRANS_SETATTR_SIZE          2#define XFS_TRANS_INACTIVE              3#define XFS_TRANS_CREATE                4#define XFS_TRANS_CREATE_TRUNC          5#define XFS_TRANS_TRUNCATE_FILE         6#define XFS_TRANS_REMOVE                7#define XFS_TRANS_LINK                  8#define XFS_TRANS_RENAME                9#define XFS_TRANS_MKDIR                 10#define XFS_TRANS_RMDIR                 11#define XFS_TRANS_SYMLINK               12	/* map the op onto the values for XFS so it can do reservation. if	 * we don't have enough info to differentiate between e.g. setattr	 * with or without size, what do we do? will it adjust? */	switch (op) {	case PRESTO_OP_SETATTR:		/* or XFS_TRANS_SETATTR_NOT_SIZE? */	        xfs_op = XFS_TRANS_SETATTR_SIZE;		break;	case PRESTO_OP_CREATE:		/* or CREATE_TRUNC? */		xfs_op = XFS_TRANS_CREATE;		break;	case PRESTO_OP_LINK:		xfs_op = XFS_TRANS_LINK;		break;	case PRESTO_OP_UNLINK:		xfs_op = XFS_TRANS_REMOVE;		break;	case PRESTO_OP_SYMLINK:		xfs_op = XFS_TRANS_SYMLINK;		break;	case PRESTO_OP_MKDIR:		xfs_op = XFS_TRANS_MKDIR;		break;	case PRESTO_OP_RMDIR:		xfs_op = XFS_TRANS_RMDIR;		break;	case PRESTO_OP_MKNOD:		/* XXX can't find an analog for mknod? */		xfs_op = XFS_TRANS_CREATE;		break;	case PRESTO_OP_RENAME:		xfs_op = XFS_TRANS_RENAME;		break;	default:		CDEBUG(D_JOURNAL, "invalid operation %d for journal\n", op);		return NULL;	}	return xfs_trans_start(inode, xfs_op);}static void presto_xfs_trans_commit(struct presto_file_set *fset, void *handle){	/* assert (handle == current->j_handle) */	xfs_trans_stop(handle);}void presto_xfs_journal_file_data(struct inode *inode){        return; }struct journal_ops presto_xfs_journal_ops = {        tr_avail: presto_xfs_freespace,        tr_start:  presto_xfs_trans_start,        tr_commit: presto_xfs_trans_commit,        tr_journal_data: presto_xfs_journal_file_data};#endif /* CONFIG_XFS_FS */

⌨️ 快捷键说明

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