| From c2ca0fcd202863b14bd041a7fece2e789926c225 Mon Sep 17 00:00:00 2001 |
| From: Mikulas Patocka <mpatocka@redhat.com> |
| Date: Sun, 27 Jul 2014 13:00:41 -0400 |
| Subject: fs: make cont_expand_zero interruptible |
| |
| From: Mikulas Patocka <mpatocka@redhat.com> |
| |
| commit c2ca0fcd202863b14bd041a7fece2e789926c225 upstream. |
| |
| This patch makes it possible to kill a process looping in |
| cont_expand_zero. A process may spend a lot of time in this function, so |
| it is desirable to be able to kill it. |
| |
| It happened to me that I wanted to copy a piece data from the disk to a |
| file. By mistake, I used the "seek" parameter to dd instead of "skip". Due |
| to the "seek" parameter, dd attempted to extend the file and became stuck |
| doing so - the only possibility was to reset the machine or wait many |
| hours until the filesystem runs out of space and cont_expand_zero fails. |
| We need this patch to be able to terminate the process. |
| |
| Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> |
| Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/buffer.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/fs/buffer.c |
| +++ b/fs/buffer.c |
| @@ -2318,6 +2318,11 @@ static int cont_expand_zero(struct file |
| err = 0; |
| |
| balance_dirty_pages_ratelimited(mapping); |
| + |
| + if (unlikely(fatal_signal_pending(current))) { |
| + err = -EINTR; |
| + goto out; |
| + } |
| } |
| |
| /* page covers the boundary, find the boundary offset */ |