projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[GFS2] Fix list corruption in lops.c
[powerpc.git]
/
fs
/
ext3
/
dir.c
diff --git
a/fs/ext3/dir.c
b/fs/ext3/dir.c
index
d0b54f3
..
665adee
100644
(file)
--- a/
fs/ext3/dir.c
+++ b/
fs/ext3/dir.c
@@
-103,7
+103,7
@@
static int ext3_readdir(struct file * filp,
struct ext3_dir_entry_2 *de;
struct super_block *sb;
int err;
struct ext3_dir_entry_2 *de;
struct super_block *sb;
int err;
- struct inode *inode = filp->f_dentry->d_inode;
+ struct inode *inode = filp->f_
path.
dentry->d_inode;
int ret = 0;
sb = inode->i_sb;
int ret = 0;
sb = inode->i_sb;
@@
-122,7
+122,7
@@
static int ext3_readdir(struct file * filp,
* We don't set the inode dirty flag since it's not
* critical that it get flushed back to the disk.
*/
* We don't set the inode dirty flag since it's not
* critical that it get flushed back to the disk.
*/
- EXT3_I(filp->f_dentry->d_inode)->i_flags &= ~EXT3_INDEX_FL;
+ EXT3_I(filp->f_
path.
dentry->d_inode)->i_flags &= ~EXT3_INDEX_FL;
}
#endif
stored = 0;
}
#endif
stored = 0;
@@
-154,6
+154,9
@@
static int ext3_readdir(struct file * filp,
ext3_error (sb, "ext3_readdir",
"directory #%lu contains a hole at offset %lu",
inode->i_ino, (unsigned long)filp->f_pos);
ext3_error (sb, "ext3_readdir",
"directory #%lu contains a hole at offset %lu",
inode->i_ino, (unsigned long)filp->f_pos);
+ /* corrupt size? Maybe no more blocks to read */
+ if (filp->f_pos > inode->i_blocks << 9)
+ break;
filp->f_pos += sb->s_blocksize - offset;
continue;
}
filp->f_pos += sb->s_blocksize - offset;
continue;
}
@@
-399,7
+402,7
@@
static int call_filldir(struct file * filp, void * dirent,
{
struct dir_private_info *info = filp->private_data;
loff_t curr_pos;
{
struct dir_private_info *info = filp->private_data;
loff_t curr_pos;
- struct inode *inode = filp->f_dentry->d_inode;
+ struct inode *inode = filp->f_
path.
dentry->d_inode;
struct super_block * sb;
int error;
struct super_block * sb;
int error;
@@
-429,7
+432,7
@@
static int ext3_dx_readdir(struct file * filp,
void * dirent, filldir_t filldir)
{
struct dir_private_info *info = filp->private_data;
void * dirent, filldir_t filldir)
{
struct dir_private_info *info = filp->private_data;
- struct inode *inode = filp->f_dentry->d_inode;
+ struct inode *inode = filp->f_
path.
dentry->d_inode;
struct fname *fname;
int ret;
struct fname *fname;
int ret;