From: Jan Kiszka <jan.kiszka@web.de>
To: Michael Tokarev <mjt@tls.msk.ru>
Cc: mtosatti@redhat.com, qemu-devel@nongnu.org,
Luiz Capitulino <lcapitulino@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] do not call monitor_resume() from migrate_fd_put_buffer() error path
Date: Fri, 05 Aug 2011 09:11:33 +0200 [thread overview]
Message-ID: <4E3B97A5.6090802@web.de> (raw)
In-Reply-To: <4E3B92F0.4050801@msgid.tls.msk.ru>
[-- Attachment #1: Type: text/plain, Size: 5529 bytes --]
On 2011-08-05 08:51, Michael Tokarev wrote:
> 05.08.2011 02:19, Jan Kiszka wrote:
> []
>> Resume on error in migrate_fd_put_buffer raced with migrate_fd_cleanup
>> triggered via migrate_fd_put_ready called from migrate_fd_connect.
>>
>> This migration code is a horrible maze. Patch below tries to move
>> monitor_resume a bit out of this. Please check if it works for you, then
>> I'll send it out properly.
>
> Yes it's a maze.
>
> The patch was mime-damaged, I had to apply it manually, but it
> wasn't difficult (since it's understandable what it does etc).
Sorry, likely forgot to disable line-wrapping before hitting send.
>
> And now I can't trigger the original problem anymore, with any
> of my variants.
>
> Here we go:
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:cat > /tmp/foo"
> (qemu) migrate "exec:cat > /tmp/foo"
> (qemu) migrate "exec:foo"
> sh: foo: not found
> (qemu) migrate "exec:foo"
> sh: foo: not found
>
> (qemu) q
>
> As you can see, I can hit either of the two cases - with
> and without extra newline, and in both cases (and in
> successful case too) it works correctly.
>
> There's a difference still between the two - namely that
> extra newline - but that's something else and merely
> cosmetic.
>
> I also verified that -incoming migration works as expected,
> in both failure and success cases - and indeed it works.
>
> Speaking of the patch: shouldn't migrate_fd_close() be
> called from migrate_fd_cleanup(),
Maybe. But it requires careful review what the migration close callbacks
are doing and if that is always equivalent (or harmless).
> or vise versa, or both
> be combined into one? In migrate_fd_cleanup(), the new
> logic is not clear still. New version of it:
>
> int migrate_fd_cleanup(FdMigrationState *s)
> {
> int ret = 0;
>
> qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
>
> if (s->file) {
> DPRINTF("closing file\n");
> if (qemu_fclose(s->file) != 0) {
> ret = -1;
> }
> s->file = NULL;
> } else {
> if (s->mon) {
> monitor_resume(s->mon);
> }
> }
>
> if (s->fd != -1) {
> close(s->fd);
> s->fd = -1;
> }
>
> return ret;
> }
>
> Why it's EITHER s->file OR s->mon, but not both? Shouldn't
> the s->mon thing be unconditional?
See description of the patch I just sent out.
>
> And the whole thing is waiting coroutine conversion badly,
> since the logic is indeed a maze ;)
Yeah, though I think this will not magically remove all windings here.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
next prev parent reply other threads:[~2011-08-05 7:11 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-03 14:51 [Qemu-devel] [PATCH] do not call monitor_resume() from migrate_fd_put_buffer() error path Michael Tokarev
2011-08-04 19:24 ` Luiz Capitulino
2011-08-04 19:52 ` Michael Tokarev
2011-08-04 20:00 ` Michael Tokarev
2011-08-04 22:19 ` Jan Kiszka
2011-08-05 6:51 ` Michael Tokarev
2011-08-05 7:11 ` Jan Kiszka [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-07-19 11:46 Michael Tokarev
2011-07-19 21:48 ` Jan Kiszka
2011-07-20 16:34 ` Marcelo Tosatti
2011-07-20 22:06 ` Jan Kiszka
2011-08-03 7:38 ` Michael Tokarev
2011-08-03 13:22 ` Jan Kiszka
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=4E3B97A5.6090802@web.de \
--to=jan.kiszka@web.de \
--cc=lcapitulino@redhat.com \
--cc=mjt@tls.msk.ru \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.