X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=fs%2Fjfs%2Fjfs_metapage.c;h=831ee09c2b9b7923b1d458c7d5c99a80cbbc909c;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=8c94bb015c845f3ad26988f3880176ae86b15ba6;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index 8c94bb015..831ee09c2 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c @@ -225,8 +225,16 @@ struct metapage *__get_metapage(struct inode *inode, unsigned long lblock, if (absolute) mapping = inode->i_sb->s_bdev->bd_inode->i_mapping; - else + else { + /* + * If an nfs client tries to read an inode that is larger + * than any existing inodes, we may try to read past the + * end of the inode map + */ + if ((lblock << inode->i_blkbits) >= inode->i_size) + return NULL; mapping = inode->i_mapping; + } hash_ptr = meta_hash(mapping, lblock); again: @@ -320,7 +328,7 @@ again: atomic_set(&mp->nohomeok,0); mp->mapping = mapping; mp->index = lblock; - mp->page = 0; + mp->page = NULL; mp->logical_size = size; add_to_hash(mp, hash_ptr); spin_unlock(&meta_lock); @@ -465,7 +473,7 @@ void release_metapage(struct metapage * mp) set_bit(META_stale, &mp->flag); spin_unlock(&meta_lock); kunmap(mp->page); - mp->data = 0; + mp->data = NULL; if (test_bit(META_dirty, &mp->flag)) __write_metapage(mp); if (test_bit(META_sync, &mp->flag)) { @@ -491,7 +499,7 @@ void release_metapage(struct metapage * mp) */ log = mp->log; LOGSYNC_LOCK(log); - mp->log = 0; + mp->log = NULL; mp->lsn = 0; mp->clsn = 0; log->count--;