Thanks for looking into this Vladimir! > reiserfs panic labeled PAP-5680 which you encountered indicates that file > truncate did not complete. Actually, reiserfs does not have to panic, it > has to return EIO or something suitable. Indeed, that would be much better behaviour. Maybe the attached patch is okay. It compiles fine with 2.6.19.1. However, I don't see how to test it.
> Could it be hardware fault? In case you saw the smartd warnings concerning /dev/hda, the reiserfs panic occurred with a reiserfs on an S-ATA software raid 5 (/dev/sd[a-g]1) I got a few months ago. The P-ATA boot disk is the only old component. I don't remember any worrying S-ATA or raid messages in my syslog. Unfortunately, I cannot have a closer look at the moment as I'm away on holiday. Regards, Joachim
--- stree.orig 2006-12-11 20:32:53.000000000 +0100 +++ stree.c 2006-12-26 14:53:48.000000000 +0100 @@ -1898,9 +1898,30 @@ goto out; reiserfs_update_inode_transaction(p_s_inode); } - } while (n_file_size > ROUND_UP(n_new_file_size) && - search_for_position_by_key(p_s_inode->i_sb, &s_item_key, - &s_search_path) == POSITION_FOUND); + if (n_file_size > ROUND_UP(n_new_file_size)) { + retval = search_for_position_by_key(p_s_inode->i_sb, + &s_item_key, &s_search_path); + if (retval == IO_ERROR) { + reiserfs_warning(p_s_inode->i_sb, + "jw-5670: reiserfs_do_truncate: " + "i/o failure occurred searching for %K", + &s_item_key); + err = -EIO; + goto out; + } + if (retval == FILE_NOT_FOUND) { + reiserfs_warning(p_s_inode->i_sb, + "jw-5672: reiserfs_do_truncate: " + "file not found searching for %K", + &s_item_key); + err = -EIO; + goto out; + } + } + else + retval = POSITION_NOT_FOUND; + + } while (retval == POSITION_FOUND); RFALSE(n_file_size > ROUND_UP(n_new_file_size), "PAP-5680: truncate did not finish: new_file_size %Ld, current %Ld, oid %d",