diff options
author | Eric Sandeen <sandeen@sandeen.net> | 2008-04-17 16:50:09 +1000 |
---|---|---|
committer | Lachlan McIlroy <lachlan@redback.melbourne.sgi.com> | 2008-04-18 12:03:40 +1000 |
commit | cb49dbb130e17a6f9af4cb4714cf6976cf09afdf (patch) | |
tree | 33e0c38d5b4f67455804c793e625a0f7e91aec5c /fs/xfs/xfs_attr_leaf.c | |
parent | f6485057c5cfbc84e5eff639ddea1ce0d668607b (diff) | |
download | linux-cb49dbb130e17a6f9af4cb4714cf6976cf09afdf.tar.gz linux-cb49dbb130e17a6f9af4cb4714cf6976cf09afdf.tar.bz2 linux-cb49dbb130e17a6f9af4cb4714cf6976cf09afdf.zip |
[XFS] Always use di_forkoff when checking for attr space.
In the case where we mount a filesystem which was previously using the
attr2 format as attr1, returning the default mp->m_attroffset instead of
the per-inode di_forkoff for inline attribute fit calculations, may result
in corruption, if for example, the data fork is already taking more space
than the default fork offset and we try to add an extended attribute. Fix
tested by xfstests/186.
SGI-PV: 979606
SGI-Modid: xfs-linux-melb:xfs-kern:30861a
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Signed-off-by: Tim Shimmin <tes@sgi.com>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_attr_leaf.c')
-rw-r--r-- | fs/xfs/xfs_attr_leaf.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 96ba6aa4ed8c..303d41e4217b 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c @@ -166,7 +166,7 @@ xfs_attr_shortform_bytesfit(xfs_inode_t *dp, int bytes) if (!(mp->m_flags & XFS_MOUNT_ATTR2)) { if (bytes <= XFS_IFORK_ASIZE(dp)) - return mp->m_attroffset >> 3; + return dp->i_d.di_forkoff; return 0; } |