aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2011-12-06 16:21:30 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-09 08:52:47 -0800
commite006de470fa793b770cb098b39b46212a35b1b2b (patch)
treebad621880251cd5687e75c95044f5a4ccc720cdd /kernel
parentedb9a31845c5ba0ff325daa58f17f881d60d1559 (diff)
downloadkernel_samsung_smdk4412-e006de470fa793b770cb098b39b46212a35b1b2b.zip
kernel_samsung_smdk4412-e006de470fa793b770cb098b39b46212a35b1b2b.tar.gz
kernel_samsung_smdk4412-e006de470fa793b770cb098b39b46212a35b1b2b.tar.bz2
xfs: fix attr2 vs large data fork assert
commit 4c393a6059f8442a70512a48ce4639b882b6f6ad upstream. With Dmitry fsstress updates I've seen very reproducible crashes in xfs_attr_shortform_remove because xfs_attr_shortform_bytesfit claims that the attributes would not fit inline into the inode after removing an attribute. It turns out that we were operating on an inode with lots of delalloc extents, and thus an if_bytes values for the data fork that is larger than biggest possible on-disk storage for it which utterly confuses the code near the end of xfs_attr_shortform_bytesfit. Fix this by always allowing the current attribute fork, like we already do for the attr1 format, given that delalloc conversion will take care for moving either the data or attribute area out of line if it doesn't fit at that point - or making the point moot by merging extents at this point. Also document the function better, and clean up some loose bits. Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ben Myers <bpm@sgi.com> Acked-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions