-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
These are the ext2 related parts. Ext2 now uses the xip_* file operations along with the get_xip_page aop when mounted with -o xip. Signed-off-by: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
- Loading branch information
Carsten Otte
authored and
Linus Torvalds
committed
Jun 24, 2005
1 parent
ceffc07
commit 6d79125
Showing
11 changed files
with
223 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* 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); | ||
} | ||
|
||
int | ||
ext2_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) | ||
return rc; | ||
clear_page((void*)data); | ||
return 0; | ||
} | ||
|
||
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)) { | ||
if ((sb->s_bdev == NULL) || | ||
sb->s_bdev->bd_disk == NULL || | ||
sb->s_bdev->bd_disk->fops == NULL || | ||
sb->s_bdev->bd_disk->fops->direct_access == NULL) { | ||
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 blockno, | ||
int create) | ||
{ | ||
int rc; | ||
unsigned long data; | ||
struct buffer_head tmp; | ||
|
||
tmp.b_state = 0; | ||
tmp.b_blocknr = 0; | ||
rc = ext2_get_block(mapping->host, blockno/(PAGE_SIZE/512) , &tmp, | ||
create); | ||
if (rc) | ||
return ERR_PTR(rc); | ||
if (tmp.b_blocknr == 0) { | ||
/* SPARSE block */ | ||
BUG_ON(create); | ||
return ERR_PTR(-ENODATA); | ||
} | ||
|
||
rc = __inode_direct_access | ||
(mapping->host,tmp.b_blocknr*(PAGE_SIZE/512) ,&data); | ||
if (rc) | ||
return ERR_PTR(rc); | ||
|
||
SetPageUptodate(virt_to_page(data)); | ||
return virt_to_page(data); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* linux/fs/ext2/xip.h | ||
* | ||
* Copyright (C) 2005 IBM Corporation | ||
* Author: Carsten Otte (cotte@de.ibm.com) | ||
*/ | ||
|
||
#ifdef CONFIG_EXT2_FS_XIP | ||
extern void ext2_xip_verify_sb (struct super_block *); | ||
extern int ext2_clear_xip_target (struct inode *, int); | ||
|
||
static inline int ext2_use_xip (struct super_block *sb) | ||
{ | ||
struct ext2_sb_info *sbi = EXT2_SB(sb); | ||
return (sbi->s_mount_opt & EXT2_MOUNT_XIP); | ||
} | ||
struct page* ext2_get_xip_page (struct address_space *, sector_t, int); | ||
#define mapping_is_xip(map) unlikely(map->a_ops->get_xip_page) | ||
#else | ||
#define mapping_is_xip(map) 0 | ||
#define ext2_xip_verify_sb(sb) do { } while (0) | ||
#define ext2_use_xip(sb) 0 | ||
#define ext2_clear_xip_target(inode, chain) 0 | ||
#define ext2_get_xip_page NULL | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters