[PATCH] ufs: fix hang during `rm'
authorEvgeniy Dushistov <dushistov@mail.ru>
Fri, 3 Feb 2006 11:04:06 +0000 (03:04 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 3 Feb 2006 16:32:04 +0000 (08:32 -0800)
commit09114eb8c53d2d3b2ff9523e011cb68b2e245dce
treec66d4590814072f91d74f185c798a3935d933209
parente295cfcb2907ae4c5df57f5d4ada1ce6f3ae4657
[PATCH] ufs: fix hang during `rm'

This fixes the code like this:

bh = sb_find_get_block (sb, tmp + j);
if ((bh && DATA_BUFFER_USED(bh)) || tmp != fs32_to_cpu(sb, *p)) {
retry = 1;
brelse (bh);
goto next1;
}
bforget (bh);

sb_find_get_block() ordinarily returns a buffer_head with b_count>=2, and
this code assume that in case if "b_count>1" buffer is used, so this caused
infinite loop.

(akpm: that is-the-buffer-busy code is incomprehensible.  Good riddance.  Use
of block_truncate_page() seems sane).

Signed-off-by: Evgeniy Dushistov <dushistov@mail.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/ufs/inode.c
fs/ufs/truncate.c
include/linux/ufs_fs.h