simplify get_cramfs_inode()
Subsystems (2)
PATCH 9/58 simplify get_cramfs_inode()
simply don't hash the inodes that don't have real inumber instead of skipping them during iget5_locked(); as the result, simple iget_locked() would do and we can get rid of cramfs ->drop_inode() as well.
Signed-off-by Al Viro <[email protected]>
--- fs/cramfs/inode.c | 88 +++++++++++++++++++++++------------------------------ 1 files changed, 38 insertions(+), 50 deletions(-)
fs/cramfs/inode.c +38 -50
@@ -39,66 +39,55 @@ static DEFINE_MUTEX(read_mutex);#define CRAMINO (x) (((x)->offset && (x)->size)?(x)->offset<<2:1)#define OFFSET (x) ((x)->i_ino) - -static int cramfs_iget5_test (struct inode *inode,void *opaque) -{ -struct cramfs_inode *cramfs_inode = opaque; -return inode->i_ino ==CRAMINO (cramfs_inode) && inode->i_ino !=1 ; -} - -static int cramfs_iget5_set (struct inode *inode,void *opaque) +static void setup_inode (struct inode *inode,struct cramfs_inode * cramfs_inode) { -struct cramfs_inode *cramfs_inode = opaque; - inode->i_ino =CRAMINO (cramfs_inode); -return 0 ; +static struct timespec zerotime; + inode->i_mode = cramfs_inode->mode; + inode->i_uid = cramfs_inode->uid; + inode->i_size = cramfs_inode->size; + inode->i_blocks = (cramfs_inode->size -1 ) /512 +1 ; + inode->i_gid = cramfs_inode->gid; +/* Struct copy intentional */ + inode->i_mtime = inode->i_atime = inode->i_ctime = zerotime; +/* inode->i_nlink is left 1 - arguably wrong for directories, +but it's the best we can do without reading the directory +contents. 1 yields the right result in GNU find, even +without -noleaf option. */ +if (S_ISREG (inode->i_mode)) { + inode->i_fop = &generic_ro_fops; + inode->i_data.a_ops = &cramfs_aops; + }else if (S_ISDIR (inode->i_mode)) { + inode->i_op = &cramfs_dir_inode_operations; + inode->i_fop = &cramfs_directory_operations; + }else if (S_ISLNK (inode->i_mode)) { + inode->i_op = &page_symlink_inode_operations; + inode->i_data.a_ops = &cramfs_aops; + }else { +init_special_inode (inode, inode->i_mode, +old_decode_dev (cramfs_inode->size)); + } }static struct inode *get_cramfs_inode (struct super_block *sb,struct cramfs_inode * cramfs_inode) { -struct inode *inode =iget5_locked (sb,CRAMINO (cramfs_inode), - cramfs_iget5_test, cramfs_iget5_set, - cramfs_inode); -static struct timespec zerotime; - -if (inode && (inode->i_state &I_NEW )) { - inode->i_mode = cramfs_inode->mode; - inode->i_uid = cramfs_inode->uid; - inode->i_size = cramfs_inode->size; - inode->i_blocks = (cramfs_inode->size -1 ) /512 +1 ; - inode->i_gid = cramfs_inode->gid; -/* Struct copy intentional */ - inode->i_mtime = inode->i_atime = inode->i_ctime = zerotime; -/* inode->i_nlink is left 1 - arguably wrong for directories, -but it's the best we can do without reading the directory -contents. 1 yields the right result in GNU find, even -without -noleaf option. */ -if (S_ISREG (inode->i_mode)) { - inode->i_fop = &generic_ro_fops; - inode->i_data.a_ops = &cramfs_aops; - }else if (S_ISDIR (inode->i_mode)) { - inode->i_op = &cramfs_dir_inode_operations; - inode->i_fop = &cramfs_directory_operations; - }else if (S_ISLNK (inode->i_mode)) { - inode->i_op = &page_symlink_inode_operations; - inode->i_data.a_ops = &cramfs_aops; - }else { -init_special_inode (inode, inode->i_mode, -old_decode_dev (cramfs_inode->size)); +struct inode *inode; +if (CRAMINO (cramfs_inode) ==1 ) { + inode =new_inode (sb); +if (inode) { + inode->i_ino =1 ; +setup_inode (inode, cramfs_inode); + } + }else { + inode =iget_locked (sb,CRAMINO (cramfs_inode)); +if (inode) { +setup_inode (inode, cramfs_inode); +unlock_new_inode (inode); } -unlock_new_inode (inode); }return inode; } -static void cramfs_drop_inode (struct inode *inode) -{ -if (inode->i_ino ==1 ) -generic_delete_inode (inode); -else -generic_drop_inode (inode); -} -/* * We have our own block cache: don't fill up the buffer cache * with the rom-image, because the way the filesystem is set
@@ -542,7 +531,6 @@ static const struct super_operations cramfs_ops = { .put_super = cramfs_put_super, .remount_fs = cramfs_remount, .statfs = cramfs_statfs, - .drop_inode = cramfs_drop_inode, }; static int cramfs_get_sb(struct file_system_type *fs_type,
Signature · 1 line
1.5.6.5