[Devel] [PATCH RH9] dm-ploop: port the standby mode feature.

Alexander Atanasov alexander.atanasov at virtuozzo.com
Fri Oct 14 12:42:06 MSK 2022


Hello,

On 14.10.22 8:57, Kui Liu wrote:
> 
> 
> -----Original Message-----
> From: Alexander Atanasov <alexander.atanasov at virtuozzo.com>
> Date: Thursday, 13 October 2022 at 11:26 PM
> To: Kui Liu <Kui.Liu at acronis.com>, Konstantin Khorenko <khorenko at virtuozzo.com>, Alexey Kuznetsov <kuznet at acronis.com>
> Cc: Devel <devel at openvz.org>, Alexander Mikhalitsyn <alexander.mikhalitsyn at virtuozzo.com>
> Subject: Re: [Devel] [PATCH RH9] dm-ploop: port the standby mode feature.
> 
>      On 13.10.22 16:33, Kui Liu wrote:
>      > Hello,
>      >
>      > First of all, please bear in mind that this patch is a port of a patchset currently present in VZ 7 kernel.
>      > Original patches were added just to address a problem that would only happen in our particular use case,
>      > where we need to use ploop devices as the back store for  iSCSI target, while ploop devices are backed
>      > by files stored in vstorage filesystem.
> 
> 
>      Ok, i don't quite get this yet. Since it is specific to vstorage can we
>      check the queue on init and see if it is backed by that iSCSI target and
>      set a static key or flag to enable the checks only if that is the case?
>      check can be done via queue->disk->major/minor/diskname/fops/pick-one
>      from a quick look.
> 
> [LIU]: Do you mean that you want a 'check standby mode enable' flag so that the check
> is done only when the enable flag is true, and the flag should be set by iSCSI target when the
> ploop device is attached iSCSI target?
> Well, it can be done, but I'm not sure why that's necessary?  Current code is kind copied
> directly from original implementation, where there wasn't such 'enable' flag, the question would
> be why it wasn't implemented back then?

Yes, I think it is better to be explicit and not blindly assume that it 
wouldn't affect anything. Old ploop code might not needed it. But 
dm-ploop is new code and it might need that flag - point is that it is 
better be safe and we know that we run on exactly that target.

> 
>      [snip]
> 
>      >      >> +    /* move to standby if delta lease was stolen or mount is gone */
>      >      >> +    if (res != -EBUSY && res != -ENOTCONN && res != -EIO) {
>      >      >> +        return;
>      >      >> +    }
>      >      >> +
>      >      >> +    spin_lock_irq(&q->queue_lock);
>      >      >> +    prev = blk_queue_flag_test_and_set(QUEUE_FLAG_STANDBY, q);
>      >      >> +    spin_unlock_irq(&q->queue_lock);
>      >      >> +
>      >      >> +    if (!prev)
>      >      >> +        pr_info("ploop: switch into standby mode\n");
>      >      >> +}
>      >
>      >
>      >      What guarantees that we got EBUSY, EIO or ENOTCONN for the reasons
>      >      listed in the description - "This mode shows that a delta lease was
>      >      stolen and it is impossible to handle any requests." - what if we got
>      >      such an error for other reason? If the problem comes from nfs why not
>      >      suspend device mapper from there ?
>      >
>      > [LIU]: I would assume vstorage filesystem guarantees that only EBUSY, EIO, or ENOTCONN
>      > will be returned when the described event happens, and it doesn't matter whether we could
>      > get these errors for other reasons.  And what matters is, in our use case, once the 3 errors are
>      > returned, the ploop device need to be flagged as 'standby mode' which needs to be passed to
>      >   iSCSI target driver.  As for what happens when used with other filesystems, we actually don't care,
>      >   however you can see that the changes don't affect ploop's normal behaviour either. >
>      >      Also do this errors actually reach dm-ploop ? From my recent tests i
>      >      observed that if you have and EIO the filesystem gets it and remounts RO
>      >      - it might not reach ploop code at all. Even if you suspend/resume the
>      >      queue it would not help with the RO fs.
>      >
>      > [LIU]:  When used with vstorage filesystem, these errors do reach dm-ploop.  Again, we really
>      > don’t care about other filesystems as long as it doesn't break anything.
> 
>      If there is no check for the specific target and some of the errors
>      comes from other device - ploop will say it is into standby but no
>      device will check the flags - so it will not be true. My point is that
>      it is hard to say it won't break anything.
> 
> [LIU]: Currently only iSCSI target driver is aware of this flag, and of course we have code in iSCSI target driver
> to deal with this flag.  However for any other ploop users who are not aware of the standby flag,  the flag is just
>   transparent, and it doesn't matter whether the flag is set or clear anyway, then how does it break anything?
> 
> Or is your concern that there may be users that would test the entire flag without masking out uninterested bits?
> I don’t believe such use exists in the kernel code.

My concern is more about the debug message in case some other driver 
return one of the errors.

> 
> 
> 
>      [snip]
>      There is ploop->ti->table->md->queue, why not use it but cache queue ptr
>      here ? Is it guaranteed that queue won't change and leave ploop with
>      dangling ptr?
> 
> [LIU]: Because of convenience,  and yes, it is guaranteed that the queue won't change
> during ploop's lifespan. Looking at dm-mapper's code, apparently  the 'md', hence 'md->queue',
> outlives 'ploop', and md->queue can't be changed while ploop is still alive.
> In case of table reload,  a new ploop instance will allocated and initialized,  the old one will be destroyed.


Ok, i double checked and you are right about this.


-- 
Regards,
Alexander Atanasov



More information about the Devel mailing list