qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [for-2.9 PATCH 1/3] 9pfs: clear migration blocker at se


From: 李强
Subject: Re: [Qemu-devel] [for-2.9 PATCH 1/3] 9pfs: clear migration blocker at session reset
Date: Sat, 1 Apr 2017 01:32:38 +0000


> -----Original Message-----
> From: Greg Kurz [mailto:address@hidden
> Sent: Friday, March 31, 2017 7:27 PM
> To: address@hidden
> Cc: Eric Blake; 李强; Greg Kurz
> Subject: [for-2.9 PATCH 1/3] 9pfs: clear migration blocker at session reset
> 
> The migration blocker survives a device reset: if the guest mounts a 9p share
> and then gets rebooted with system_reset, it will be unmigratable until it
> remounts and umounts the 9p share again.
> 
> This happens because the migration blocker is supposed to be cleared when we
> put the last reference on the root fid, but virtfs_reset() wrongly calls
> free_fid() instead of put_fid().
> 
> This patch fixes virtfs_reset() so that it honor the way fids are supposed to 
> be
> manipulated: first get a reference and later put it back when you're done.
> 
> Signed-off-by: Greg Kurz <address@hidden>
> ---

Reviewed-by: Li Qiang <address@hidden>

>  hw/9pfs/9p.c |   11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 48babce836b6..cc109367b030
> 100644
> --- a/hw/9pfs/9p.c
> +++ b/hw/9pfs/9p.c
> @@ -539,14 +539,15 @@ static void coroutine_fn virtfs_reset(V9fsPDU *pdu)
> 
>      /* Free all fids */
>      while (s->fid_list) {
> +        /* Get fid */
>          fidp = s->fid_list;
> +        fidp->ref++;
> +
> +        /* Clunk fid */
>          s->fid_list = fidp->next;
> +        fidp->clunked = 1;
> 
> -        if (fidp->ref) {
> -            fidp->clunked = 1;
> -        } else {
> -            free_fid(pdu, fidp);
> -        }
> +        put_fid(pdu, fidp);
>      }
>  }
> 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]