diff options
author | Christoph Hellwig <hch@infradead.org> | 2011-01-25 04:06:20 -0500 |
---|---|---|
committer | Alex Elder <aelder@sgi.com> | 2011-02-07 14:29:14 -0500 |
commit | 0d8b30ad19bf13197cbcd786e2cd5a2ecef72e68 (patch) | |
tree | 506a96797323f3052ea2cbba28c3b30cbf551c58 /fs | |
parent | 04e99455ea5bb17ea7c2e7bb0970168efb736242 (diff) |
xfs: fix xfs_get_extsz_hint for a zero extent size hint
We can easily set the extsize flag without setting an extent size
hint, or one that evaluates to zero. Historically the di_extsize
field was only used when it was non-zero, but the commit
"Cleanup inode extent size hint extraction"
broke this. Restore the old behaviour, thus fixing xfsqa 090 with
a debug kernel.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/xfs_rw.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/fs/xfs/xfs_rw.c b/fs/xfs/xfs_rw.c index 56861d5daaef..ccd3adf640ee 100644 --- a/fs/xfs/xfs_rw.c +++ b/fs/xfs/xfs_rw.c | |||
@@ -173,17 +173,9 @@ xfs_extlen_t | |||
173 | xfs_get_extsz_hint( | 173 | xfs_get_extsz_hint( |
174 | struct xfs_inode *ip) | 174 | struct xfs_inode *ip) |
175 | { | 175 | { |
176 | xfs_extlen_t extsz; | 176 | if ((ip->i_d.di_flags & XFS_DIFLAG_EXTSIZE) && ip->i_d.di_extsize) |
177 | 177 | return ip->i_d.di_extsize; | |
178 | if (unlikely(XFS_IS_REALTIME_INODE(ip))) { | 178 | if (XFS_IS_REALTIME_INODE(ip)) |
179 | extsz = (ip->i_d.di_flags & XFS_DIFLAG_EXTSIZE) | 179 | return ip->i_mount->m_sb.sb_rextsize; |
180 | ? ip->i_d.di_extsize | 180 | return 0; |
181 | : ip->i_mount->m_sb.sb_rextsize; | ||
182 | ASSERT(extsz); | ||
183 | } else { | ||
184 | extsz = (ip->i_d.di_flags & XFS_DIFLAG_EXTSIZE) | ||
185 | ? ip->i_d.di_extsize : 0; | ||
186 | } | ||
187 | |||
188 | return extsz; | ||
189 | } | 181 | } |