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

📄 xip.c

📁 linux 内核源代码
💻 C
字号:
/* *  linux/fs/ext2/xip.c * * Copyright (C) 2005 IBM Corporation * Author: Carsten Otte (cotte@de.ibm.com) */#include <linux/mm.h>#include <linux/fs.h>#include <linux/genhd.h>#include <linux/buffer_head.h>#include <linux/ext2_fs_sb.h>#include <linux/ext2_fs.h>#include "ext2.h"#include "xip.h"static inline int__inode_direct_access(struct inode *inode, sector_t sector,		      unsigned long *data){	BUG_ON(!inode->i_sb->s_bdev->bd_disk->fops->direct_access);	return inode->i_sb->s_bdev->bd_disk->fops		->direct_access(inode->i_sb->s_bdev,sector,data);}static inline int__ext2_get_sector(struct inode *inode, sector_t offset, int create,		   sector_t *result){	struct buffer_head tmp;	int rc;	memset(&tmp, 0, sizeof(struct buffer_head));	rc = ext2_get_block(inode, offset/ (PAGE_SIZE/512), &tmp,			    create);	*result = tmp.b_blocknr;	/* did we get a sparse block (hole in the file)? */	if (!tmp.b_blocknr && !rc) {		BUG_ON(create);		rc = -ENODATA;	}	return rc;}intext2_clear_xip_target(struct inode *inode, int block){	sector_t sector = block * (PAGE_SIZE/512);	unsigned long data;	int rc;	rc = __inode_direct_access(inode, sector, &data);	if (!rc)		clear_page((void*)data);	return rc;}void ext2_xip_verify_sb(struct super_block *sb){	struct ext2_sb_info *sbi = EXT2_SB(sb);	if ((sbi->s_mount_opt & EXT2_MOUNT_XIP) &&	    !sb->s_bdev->bd_disk->fops->direct_access) {		sbi->s_mount_opt &= (~EXT2_MOUNT_XIP);		ext2_warning(sb, __FUNCTION__,			     "ignoring xip option - not supported by bdev");	}}struct page *ext2_get_xip_page(struct address_space *mapping, sector_t offset,		   int create){	int rc;	unsigned long data;	sector_t sector;	/* first, retrieve the sector number */	rc = __ext2_get_sector(mapping->host, offset, create, &sector);	if (rc)		goto error;	/* retrieve address of the target data */	rc = __inode_direct_access		(mapping->host, sector * (PAGE_SIZE/512), &data);	if (!rc)		return virt_to_page(data); error:	return ERR_PTR(rc);}

⌨️ 快捷键说明

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