mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
btrfs: don't return EINTR
It is basically a good thing if we are interruptible when waiting for free space, but the generality in which it is implemented currently leads to system calls being interruptible that are not documented this way. For example git can't handle interrupted unlink(), leading to corrupt repos under space pressure. Instead we raise the bar to only be interruptible by SIGKILL. Thanks to David Sterba for suggesting this. Signed-off-by: Arne Jansen <sensille@gmx.net>
This commit is contained in:
parent
253beebd5a
commit
b9688bb845
1 changed files with 3 additions and 6 deletions
|
@ -3771,13 +3771,10 @@ static int reserve_metadata_bytes(struct btrfs_root *root,
|
|||
*/
|
||||
if (current->journal_info)
|
||||
return -EAGAIN;
|
||||
ret = wait_event_interruptible(space_info->wait,
|
||||
!space_info->flush);
|
||||
/* Must have been interrupted, return */
|
||||
if (ret) {
|
||||
printk(KERN_DEBUG "btrfs: %s returning -EINTR\n", __func__);
|
||||
ret = wait_event_killable(space_info->wait, !space_info->flush);
|
||||
/* Must have been killed, return */
|
||||
if (ret)
|
||||
return -EINTR;
|
||||
}
|
||||
|
||||
spin_lock(&space_info->lock);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue