Re: [PATCH v2] rbd: support timeout in rbd_wait_state_locked

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

 



On Mon, Mar 26, 2018 at 11:50 AM, Dongsheng Yang
<dongsheng.yang@xxxxxxxxxxxx> wrote:
> currently, the rbd_wait_state_locked() will wait forever if we
> can't get our state locked. Example:
>
> rbd map --exclusive test1  --> /dev/rbd0
> rbd map test1  --> /dev/rbd1
> dd if=/dev/zero of=/dev/rbd1 bs=1M count=1 --> IO blocked
>
> To avoid this problem, this patch introduce a timeout design
> in rbd_wait_state_locked(). Then rbd_wait_state_locked() will
> return error when we reach a timeout.
>
> This patch allow user to set the lock_timeout in rbd mapping.
>
> Signed-off-by: Dongsheng Yang <dongsheng.yang@xxxxxxxxxxxx>
> ---
>  drivers/block/rbd.c | 51 +++++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 39 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index f1d9e60..8824053 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -726,6 +726,7 @@ static struct rbd_client *rbd_client_find(struct ceph_options *ceph_opts)
>   */
>  enum {
>         Opt_queue_depth,
> +       Opt_lock_timeout,
>         Opt_last_int,
>         /* int args above */
>         Opt_last_string,
> @@ -739,6 +740,7 @@ enum {
>
>  static match_table_t rbd_opts_tokens = {
>         {Opt_queue_depth, "queue_depth=%d"},
> +       {Opt_lock_timeout, "lock_timeout=%d"},
>         /* int args above */
>         /* string args above */
>         {Opt_read_only, "read_only"},
> @@ -751,16 +753,18 @@ enum {
>  };
>
>  struct rbd_options {
> -       int     queue_depth;
> -       bool    read_only;
> -       bool    lock_on_read;
> -       bool    exclusive;
> +       int             queue_depth;
> +       unsigned long   lock_timeout;
> +       bool            read_only;
> +       bool            lock_on_read;
> +       bool            exclusive;

No need to change whitespace, just add lock_timeout field.

>  };
>
> -#define RBD_QUEUE_DEPTH_DEFAULT        BLKDEV_MAX_RQ
> -#define RBD_READ_ONLY_DEFAULT  false
> -#define RBD_LOCK_ON_READ_DEFAULT false
> -#define RBD_EXCLUSIVE_DEFAULT  false
> +#define RBD_QUEUE_DEPTH_DEFAULT                BLKDEV_MAX_RQ
> +#define RBD_READ_ONLY_DEFAULT          false
> +#define RBD_LOCK_ON_READ_DEFAULT       false
> +#define RBD_EXCLUSIVE_DEFAULT          false
> +#define RBD_LOCK_TIMEOUT_DEFAULT       0  /* no timeout */

Same here.

Thanks,

                Ilya
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux