public inbox for fstests@vger.kernel.org
 help / color / mirror / Atom feed
From: Eryu Guan <eguan@redhat.com>
To: Tahsin Erdogan <tahsin@google.com>
Cc: fstests@vger.kernel.org, Theodore Ts'o <tytso@mit.edu>
Subject: Re: [PATCH] generic/208: do not leave pending async ios behind during process exit
Date: Sat, 11 Jun 2016 23:28:36 +0800	[thread overview]
Message-ID: <20160611152836.GW5140@eguan.usersys.redhat.com> (raw)
In-Reply-To: <1463696380-20169-1-git-send-email-tahsin@google.com>

On Thu, May 19, 2016 at 03:19:40PM -0700, Tahsin Erdogan wrote:
> An inflight async io could keep the filesystem busy and cause umount
> -EBUSY errors after process exit. When the async io process is killed
> forcibly with SIGKILL, it doesn't get a chance to wait for ios to
> complete.
> 
> With this patch, instead of killing the children processes, we let them
> exit on their own after the timeout expires.
> 
> Signed-off-by: Tahsin Erdogan <tahsin@google.com>
> ---
>  src/aio-dio-regress/aio-dio-invalidate-failure.c | 89 ++++++++++++++----------
>  1 file changed, 54 insertions(+), 35 deletions(-)
> 
> diff --git a/src/aio-dio-regress/aio-dio-invalidate-failure.c b/src/aio-dio-regress/aio-dio-invalidate-failure.c
> index 24f3e3c..474a83c 100644
> --- a/src/aio-dio-regress/aio-dio-invalidate-failure.c
> +++ b/src/aio-dio-regress/aio-dio-invalidate-failure.c

[snip]

> @@ -152,38 +181,28 @@ int main(int argc, char **argv)
>  		exit(0);
>  	}
>  
> -	memset(&sa, 0, sizeof(sa));
> -	sa.sa_handler = alarm_handler;
> -	sigemptyset(&sa.sa_mask);
> -	if (sigaction(SIGALRM, &sa, NULL) == -1)
> -		fail("sigaction: %d\n", errno);
>  
> -	alarm(SECONDS);
> +	/* Child processes will exit on their own when timeout expires. */
> +	pid = waitpid(dio_pid, &status, 0);
> +	printf("dio_pid %d, pid %d, status %#x\n", dio_pid, pid, status);
>  
> -	pid = wait(&status);
> -	if (pid < 0 && errno == EINTR) {
> -		/* if we timed out then we're done */
> -		kill(buffered_pid, SIGKILL);
> -		kill(dio_pid, SIGKILL);
> +	dio_exit = (pid == dio_pid && WIFEXITED(status)) ?
> +			WEXITSTATUS(status) : 1;
>  
> -		waitpid(buffered_pid, NULL, 0);
> -		waitpid(dio_pid, NULL, 0);
> +	pid = waitpid(buffered_pid, &status, 0);
> +	printf("buffered_pid %d, pid %d, status %#x\n", buffered_pid, pid, status);

These two "printf" breaks generic/208

--- tests/generic/208.out       2016-06-02 12:38:40.111000000 +0800
+++ /root/workspace/xfstests/results//ext3_2k/generic/208.out.bad 2016-06-11 23:10:01.578000000 +0800
@@ -1,2 +1,4 @@
 QA output created by 208
 +dio_pid 17541, pid 17541, status 0
 +buffered_pid 17540, pid 17540, status 0
  ran for 200 seconds without error, passing

Thanks,
Eryu

  parent reply	other threads:[~2016-06-11 15:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-19 22:19 [PATCH] generic/208: do not leave pending async ios behind during process exit Tahsin Erdogan
2016-05-20 14:40 ` Jeff Moyer
2016-05-20 17:00   ` Tahsin Erdogan
2016-05-20 17:21     ` Jeff Moyer
2016-06-11 15:28 ` Eryu Guan [this message]
2016-06-11 19:02   ` Tahsin Erdogan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160611152836.GW5140@eguan.usersys.redhat.com \
    --to=eguan@redhat.com \
    --cc=fstests@vger.kernel.org \
    --cc=tahsin@google.com \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox