All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lars Ellenberg <lars.ellenberg@linbit.com>
To: Valentin Vidic <Valentin.Vidic@CARNet.hr>
Cc: drbd-user@lists.linbit.com, "Jens Axboe" <axboe@kernel.dk>,
	"Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>,
	linux-kernel@vger.kernel.org, stable@vger.kernel.org,
	linux-block@vger.kernel.org, xen-devel@lists.xenproject.org,
	"Roger Pau Monné" <roger.pau@citrix.com>
Subject: Re: [DRBD-user] [PATCH] xen-blkback: Switch to closed state after releasing the backing device
Date: Mon, 10 Sep 2018 14:45:31 +0200	[thread overview]
Message-ID: <20180910124531.GA31737@soda.linbit> (raw)
In-Reply-To: <20180908073432.GP26705@gavran.carpriv.carnet.hr>

On Sat, Sep 08, 2018 at 09:34:32AM +0200, Valentin Vidic wrote:
> On Fri, Sep 07, 2018 at 07:14:59PM +0200, Valentin Vidic wrote:
> > In fact the first one is the original code path before I modified
> > blkback.  The problem is it gets executed async from workqueue so
> > it might not always run before the call to drbdadm secondary.
> 
> As the DRBD device gets released only when the last IO request
> has finished, I found a way to check and wait for this in the
> block-drbd script:

> --- block-drbd.orig     2018-09-08 09:07:23.499648515 +0200
> +++ block-drbd  2018-09-08 09:28:12.892193649 +0200
> @@ -230,6 +230,24 @@
>  and so cannot be mounted ${m2}${when}."
>  }
>  
> +wait_for_inflight()
> +{
> +  local dev="$1"
> +  local inflight="/sys/block/${dev#/dev/}/inflight"
> +  local rd wr
> +
> +  if ! [ -f "$inflight" ]; then
> +    return
> +  fi
> +
> +  while true; do
> +    read rd wr < $inflight
> +    if [ "$rd" = "0" -a "$wr" = "0" ]; then

If it is "idle" now, but still "open",
this will not sleep, and still fail the demotion below.

> +      return
> +    fi
> +    sleep 1
> +  done
> +}
>  
>  t=$(xenstore_read_default "$XENBUS_PATH/type" 'MISSING')
>  
> @@ -285,6 +303,8 @@
>          drbd_lrole="${drbd_role%%/*}"
>          drbd_dev="$(drbdadm sh-dev $drbd_resource)"
>  
> +        wait_for_inflight $drbd_dev
> +
>          if [ "$drbd_lrole" != 'Secondary' ]; then
>            drbdadm secondary $drbd_resource

You try to help it by "waiting forever until it appears to be idle".
I suggest to at least limit the retries by iteration or time.
And also (or, instead; but you'd potentially get a number of
"scary messages" in the logs) add something like:
	  for i in 1 2 3 5 7 x; do
            drbdadm secondary $drbd_resource && exit 0
            if [ $i = x ]; then
	      # ... "appears to still be in use, maybe by" ...
              fuser -v $drbd_dev
              exit 1
	    # else ... "will retry in $i seconds" ...
            fi
            sleep $i
	  done
...

Or, well, yes, fix blkback to not "defer" the final close "too long",
if at all possible.

    Lars

  reply	other threads:[~2018-09-10 12:45 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29  6:52 [PATCH] xen-blkback: Switch to closed state after releasing the backing device Valentin Vidic
2018-08-29  6:52 ` Valentin Vidic
2018-08-29  8:16 ` Juergen Gross
2018-08-29  8:27   ` Valentin Vidic
2018-08-29  8:27   ` Valentin Vidic
2018-08-29  8:43     ` Juergen Gross
2018-08-29  9:23       ` Valentin Vidic
2018-08-29  9:23       ` Valentin Vidic
2018-08-29  9:29         ` Juergen Gross
2018-08-29  9:29         ` Juergen Gross
2018-08-29  8:43     ` Juergen Gross
2018-08-29  8:16 ` Juergen Gross
2018-09-05 10:36 ` Roger Pau Monné
2018-09-05 16:27   ` Valentin Vidic
2018-09-05 16:27   ` Valentin Vidic
2018-09-05 16:27     ` Valentin Vidic
2018-09-05 16:27     ` Valentin Vidic
2018-09-06 16:14     ` Roger Pau Monné
2018-09-06 16:14     ` Roger Pau Monné
2018-09-06 16:14       ` Roger Pau Monné
2018-09-06 22:03       ` Valentin Vidic
2018-09-06 22:03         ` Valentin Vidic
2018-09-06 22:03       ` Valentin Vidic
2018-09-07 12:03     ` [DRBD-user] " Lars Ellenberg
2018-09-07 12:03     ` Lars Ellenberg
2018-09-07 12:03       ` Lars Ellenberg
2018-09-07 12:13       ` Valentin Vidic
2018-09-07 12:13       ` Valentin Vidic
2018-09-07 13:28         ` Lars Ellenberg
2018-09-07 16:45           ` Valentin Vidic
2018-09-07 16:45           ` Valentin Vidic
2018-09-07 17:14             ` Valentin Vidic
2018-09-07 17:14             ` Valentin Vidic
2018-09-08  7:34               ` Valentin Vidic
2018-09-08  7:34               ` Valentin Vidic
2018-09-10 12:45                 ` Lars Ellenberg [this message]
2018-09-10 13:22                   ` Valentin Vidic
2018-09-10 13:22                   ` Valentin Vidic
2018-09-10 15:00                     ` Roger Pau Monné
2018-09-10 16:18                       ` Valentin Vidic
2018-09-10 16:18                       ` Valentin Vidic
2018-09-10 16:18                         ` Valentin Vidic
2018-09-13 15:08                         ` Roger Pau Monné
2018-09-13 15:08                           ` Roger Pau Monné
2018-09-14 11:49                           ` Valentin Vidic
2018-09-14 11:49                             ` Valentin Vidic
2018-09-14 16:18                             ` Roger Pau Monné
2018-09-14 16:18                             ` Roger Pau Monné
2018-09-14 16:18                               ` Roger Pau Monné
2018-09-14 11:49                           ` Valentin Vidic
2018-09-13 15:08                         ` Roger Pau Monné
2018-09-10 15:00                     ` Roger Pau Monné
2018-09-10 12:45                 ` Lars Ellenberg
2018-09-07 13:28         ` Lars Ellenberg
     [not found]   ` <20180905113515.GU26705@gavran.carpriv.carnet.hr>
2018-09-05 16:28     ` Valentin Vidic
2018-09-06 16:29       ` Roger Pau Monné
2018-09-06 16:29       ` Roger Pau Monné
2018-09-06 22:19         ` Valentin Vidic
2018-09-06 22:19           ` Valentin Vidic
2018-09-07  7:15           ` Roger Pau Monné
2018-09-07  7:15           ` Roger Pau Monné
2018-09-07  7:15             ` Roger Pau Monné
2018-09-07  7:23             ` Valentin Vidic
2018-09-07  7:23               ` Valentin Vidic
2018-09-07  7:54               ` Roger Pau Monné
2018-09-07  7:54               ` Roger Pau Monné
2018-09-07  7:54                 ` Roger Pau Monné
2018-09-07 10:20                 ` Valentin Vidic
2018-09-07 10:20                 ` Valentin Vidic
2018-09-07 10:20                   ` Valentin Vidic
2018-09-07 10:43                   ` Roger Pau Monné
2018-09-07 10:43                     ` Roger Pau Monné
2018-09-07 11:15                     ` Valentin Vidic
2018-09-07 11:15                     ` Valentin Vidic
2018-09-07 11:15                       ` Valentin Vidic
2018-09-07 10:43                   ` Roger Pau Monné
2018-09-07  7:23             ` Valentin Vidic
2018-09-06 22:19         ` Valentin Vidic
2018-09-05 16:28     ` Valentin Vidic
2018-09-05 10:36 ` Roger Pau Monné

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=20180910124531.GA31737@soda.linbit \
    --to=lars.ellenberg@linbit.com \
    --cc=Valentin.Vidic@CARNet.hr \
    --cc=axboe@kernel.dk \
    --cc=drbd-user@lists.linbit.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=roger.pau@citrix.com \
    --cc=stable@vger.kernel.org \
    --cc=xen-devel@lists.xenproject.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.