aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext3/xattr.c
diff options
context:
space:
mode:
authorAndreas Gruenbacher <agruen@suse.de>2005-01-25 04:42:01 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-01-25 04:42:01 -0800
commit8183c4b297edc372e1cc7207e4545c50195e78ad (patch)
tree99a9d02360368b45e6a2949e7eb89af8c814a39a /fs/ext3/xattr.c
parent53a6bb2fc2d1a6664f205a86eb582dc1294ba337 (diff)
downloadhistory-8183c4b297edc372e1cc7207e4545c50195e78ad.tar.gz
[PATCH] ext3/ea: ix i_extra_isize check
We are checking for (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE) to find out if we can set in-inode attributes; the test fails for inodes that have been created before the ea-in-inode patch. Those inodes have (i_extra_isize == 0), so we end up with the attributes overlapping the i_extra_isize field. Checking for (i_extra_isize == 0) instead fixes this case. The EXT3_STATE_XATTR flag is only set if (i_extra_isize > 0) and the inodes has in-inode attributes, so that is enough in the first two tests. Signed-off-by: Andreas Gruenbacher <agruen@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/ext3/xattr.c')
-rw-r--r--fs/ext3/xattr.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c
index 98555e51cc2fbc..4f6e37c1199ecd 100644
--- a/fs/ext3/xattr.c
+++ b/fs/ext3/xattr.c
@@ -272,8 +272,7 @@ ext3_xattr_ibody_get(struct inode *inode, int name_index, const char *name,
void *end;
int error;
- if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE ||
- !(EXT3_I(inode)->i_state & EXT3_STATE_XATTR))
+ if (!(EXT3_I(inode)->i_state & EXT3_STATE_XATTR))
return -ENODATA;
error = ext3_get_inode_loc(inode, &iloc);
if (error)
@@ -399,8 +398,7 @@ ext3_xattr_ibody_list(struct inode *inode, char *buffer, size_t buffer_size)
void *end;
int error;
- if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE ||
- !(EXT3_I(inode)->i_state & EXT3_STATE_XATTR))
+ if (!(EXT3_I(inode)->i_state & EXT3_STATE_XATTR))
return 0;
error = ext3_get_inode_loc(inode, &iloc);
if (error)
@@ -865,7 +863,7 @@ ext3_xattr_ibody_find(struct inode *inode, struct ext3_xattr_info *i,
struct ext3_inode *raw_inode;
int error;
- if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
+ if (EXT3_I(inode)->i_extra_isize == 0)
return 0;
raw_inode = ext3_raw_inode(&is->iloc);
header = IHDR(inode, raw_inode);
@@ -896,7 +894,7 @@ ext3_xattr_ibody_set(handle_t *handle, struct inode *inode,
struct ext3_xattr_search *s = &is->s;
int error;
- if (EXT3_SB(inode->i_sb)->s_inode_size <= EXT3_GOOD_OLD_INODE_SIZE)
+ if (EXT3_I(inode)->i_extra_isize == 0)
return -ENOSPC;
error = ext3_xattr_set_entry(i, s);
if (error)