CEPH-Devel Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] ceph: add 'noshare' mount option support
@ 2020-10-13 10:31 xiubli
  2020-10-13 12:31 ` Jeff Layton
  0 siblings, 1 reply; 5+ messages in thread
From: xiubli @ 2020-10-13 10:31 UTC (permalink / raw)
  To: jlayton; +Cc: idryomov, zyan, pdonnell, ceph-devel, Xiubo Li

From: Xiubo Li <xiubli@redhat.com>

This will disable different mount points to share superblocks.

URL: https://tracker.ceph.com/issues/46883
Signed-off-by: Xiubo Li <xiubli@redhat.com>
---
 fs/ceph/super.c | 12 ++++++++++++
 fs/ceph/super.h |  1 +
 2 files changed, 13 insertions(+)

diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index 2f530a111b3a..6f283e4d62ee 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -159,6 +159,7 @@ enum {
 	Opt_quotadf,
 	Opt_copyfrom,
 	Opt_wsync,
+	Opt_sharesb,
 };
 
 enum ceph_recover_session_mode {
@@ -199,6 +200,7 @@ static const struct fs_parameter_spec ceph_mount_parameters[] = {
 	fsparam_string	("source",			Opt_source),
 	fsparam_u32	("wsize",			Opt_wsize),
 	fsparam_flag_no	("wsync",			Opt_wsync),
+	fsparam_flag_no	("sharesb",			Opt_sharesb),
 	{}
 };
 
@@ -455,6 +457,12 @@ static int ceph_parse_mount_param(struct fs_context *fc,
 		else
 			fsopt->flags |= CEPH_MOUNT_OPT_ASYNC_DIROPS;
 		break;
+	case Opt_sharesb:
+		if (!result.negated)
+			fsopt->flags &= ~CEPH_MOUNT_OPT_NO_SHARE_SB;
+		else
+			fsopt->flags |= CEPH_MOUNT_OPT_NO_SHARE_SB;
+		break;
 	default:
 		BUG();
 	}
@@ -1007,6 +1015,10 @@ static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
 
 	dout("ceph_compare_super %p\n", sb);
 
+	if (fsopt->flags & CEPH_MOUNT_OPT_NO_SHARE_SB ||
+	    other->mount_options->flags & CEPH_MOUNT_OPT_NO_SHARE_SB)
+		return 0;
+
 	if (compare_mount_options(fsopt, opt, other)) {
 		dout("monitor(s)/mount options don't match\n");
 		return 0;
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index f097237a5ad3..e877c21196e5 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -44,6 +44,7 @@
 #define CEPH_MOUNT_OPT_NOQUOTADF       (1<<13) /* no root dir quota in statfs */
 #define CEPH_MOUNT_OPT_NOCOPYFROM      (1<<14) /* don't use RADOS 'copy-from' op */
 #define CEPH_MOUNT_OPT_ASYNC_DIROPS    (1<<15) /* allow async directory ops */
+#define CEPH_MOUNT_OPT_NO_SHARE_SB     (1<<16) /* disable sharing the same superblock */
 
 #define CEPH_MOUNT_OPT_DEFAULT			\
 	(CEPH_MOUNT_OPT_DCACHE |		\
-- 
2.18.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ceph: add 'noshare' mount option support
  2020-10-13 10:31 [PATCH] ceph: add 'noshare' mount option support xiubli
@ 2020-10-13 12:31 ` Jeff Layton
  2020-10-13 12:44   ` Xiubo Li
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff Layton @ 2020-10-13 12:31 UTC (permalink / raw)
  To: xiubli; +Cc: idryomov, zyan, pdonnell, ceph-devel

On Tue, 2020-10-13 at 18:31 +0800, xiubli@redhat.com wrote:
> From: Xiubo Li <xiubli@redhat.com>
> 
> This will disable different mount points to share superblocks.
> 

Why? What problem does this solve? Don't make us dig through random
tracker bugs to determine this, please. :)

Also, the subject mentions a "noshare" mount option, but the code below
will be expecting sharesb/nosharesb.

> URL: https://tracker.ceph.com/issues/46883
> Signed-off-by: Xiubo Li <xiubli@redhat.com>
> ---
>  fs/ceph/super.c | 12 ++++++++++++
>  fs/ceph/super.h |  1 +
>  2 files changed, 13 insertions(+)
> 
> diff --git a/fs/ceph/super.c b/fs/ceph/super.c
> index 2f530a111b3a..6f283e4d62ee 100644
> --- a/fs/ceph/super.c
> +++ b/fs/ceph/super.c
> @@ -159,6 +159,7 @@ enum {
>  	Opt_quotadf,
>  	Opt_copyfrom,
>  	Opt_wsync,
> +	Opt_sharesb,
>  };
>  
>  enum ceph_recover_session_mode {
> @@ -199,6 +200,7 @@ static const struct fs_parameter_spec ceph_mount_parameters[] = {
>  	fsparam_string	("source",			Opt_source),
>  	fsparam_u32	("wsize",			Opt_wsize),
>  	fsparam_flag_no	("wsync",			Opt_wsync),
> +	fsparam_flag_no	("sharesb",			Opt_sharesb),
>  	{}
>  };
>  
> @@ -455,6 +457,12 @@ static int ceph_parse_mount_param(struct fs_context *fc,
>  		else
>  			fsopt->flags |= CEPH_MOUNT_OPT_ASYNC_DIROPS;
>  		break;
> +	case Opt_sharesb:
> +		if (!result.negated)
> +			fsopt->flags &= ~CEPH_MOUNT_OPT_NO_SHARE_SB;
> +		else
> +			fsopt->flags |= CEPH_MOUNT_OPT_NO_SHARE_SB;
> +		break;
>  	default:
>  		BUG();
>  	}
> @@ -1007,6 +1015,10 @@ static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
>  
>  	dout("ceph_compare_super %p\n", sb);
>  
> +	if (fsopt->flags & CEPH_MOUNT_OPT_NO_SHARE_SB ||
> +	    other->mount_options->flags & CEPH_MOUNT_OPT_NO_SHARE_SB)
> +		return 0;
> +
>  	if (compare_mount_options(fsopt, opt, other)) {
>  		dout("monitor(s)/mount options don't match\n");
>  		return 0;
> diff --git a/fs/ceph/super.h b/fs/ceph/super.h
> index f097237a5ad3..e877c21196e5 100644
> --- a/fs/ceph/super.h
> +++ b/fs/ceph/super.h
> @@ -44,6 +44,7 @@
>  #define CEPH_MOUNT_OPT_NOQUOTADF       (1<<13) /* no root dir quota in statfs */
>  #define CEPH_MOUNT_OPT_NOCOPYFROM      (1<<14) /* don't use RADOS 'copy-from' op */
>  #define CEPH_MOUNT_OPT_ASYNC_DIROPS    (1<<15) /* allow async directory ops */
> +#define CEPH_MOUNT_OPT_NO_SHARE_SB     (1<<16) /* disable sharing the same superblock */
>  
>  #define CEPH_MOUNT_OPT_DEFAULT			\
>  	(CEPH_MOUNT_OPT_DCACHE |		\

-- 
Jeff Layton <jlayton@kernel.org>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ceph: add 'noshare' mount option support
  2020-10-13 12:31 ` Jeff Layton
@ 2020-10-13 12:44   ` Xiubo Li
  2020-10-13 13:41     ` Jeff Layton
  0 siblings, 1 reply; 5+ messages in thread
From: Xiubo Li @ 2020-10-13 12:44 UTC (permalink / raw)
  To: Jeff Layton; +Cc: idryomov, zyan, pdonnell, ceph-devel

On 2020/10/13 20:31, Jeff Layton wrote:
> On Tue, 2020-10-13 at 18:31 +0800, xiubli@redhat.com wrote:
>> From: Xiubo Li <xiubli@redhat.com>
>>
>> This will disable different mount points to share superblocks.
>>
> Why? What problem does this solve? Don't make us dig through random
> tracker bugs to determine this, please. :)

So, should we just mannully trigger to crash the kernel to get the 
coredump ?


> Also, the subject mentions a "noshare" mount option, but the code below
> will be expecting sharesb/nosharesb.
>
>> URL: https://tracker.ceph.com/issues/46883
>> Signed-off-by: Xiubo Li <xiubli@redhat.com>
>> ---
>>   fs/ceph/super.c | 12 ++++++++++++
>>   fs/ceph/super.h |  1 +
>>   2 files changed, 13 insertions(+)
>>
>> diff --git a/fs/ceph/super.c b/fs/ceph/super.c
>> index 2f530a111b3a..6f283e4d62ee 100644
>> --- a/fs/ceph/super.c
>> +++ b/fs/ceph/super.c
>> @@ -159,6 +159,7 @@ enum {
>>   	Opt_quotadf,
>>   	Opt_copyfrom,
>>   	Opt_wsync,
>> +	Opt_sharesb,
>>   };
>>   
>>   enum ceph_recover_session_mode {
>> @@ -199,6 +200,7 @@ static const struct fs_parameter_spec ceph_mount_parameters[] = {
>>   	fsparam_string	("source",			Opt_source),
>>   	fsparam_u32	("wsize",			Opt_wsize),
>>   	fsparam_flag_no	("wsync",			Opt_wsync),
>> +	fsparam_flag_no	("sharesb",			Opt_sharesb),
>>   	{}
>>   };
>>   
>> @@ -455,6 +457,12 @@ static int ceph_parse_mount_param(struct fs_context *fc,
>>   		else
>>   			fsopt->flags |= CEPH_MOUNT_OPT_ASYNC_DIROPS;
>>   		break;
>> +	case Opt_sharesb:
>> +		if (!result.negated)
>> +			fsopt->flags &= ~CEPH_MOUNT_OPT_NO_SHARE_SB;
>> +		else
>> +			fsopt->flags |= CEPH_MOUNT_OPT_NO_SHARE_SB;
>> +		break;
>>   	default:
>>   		BUG();
>>   	}
>> @@ -1007,6 +1015,10 @@ static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
>>   
>>   	dout("ceph_compare_super %p\n", sb);
>>   
>> +	if (fsopt->flags & CEPH_MOUNT_OPT_NO_SHARE_SB ||
>> +	    other->mount_options->flags & CEPH_MOUNT_OPT_NO_SHARE_SB)
>> +		return 0;
>> +
>>   	if (compare_mount_options(fsopt, opt, other)) {
>>   		dout("monitor(s)/mount options don't match\n");
>>   		return 0;
>> diff --git a/fs/ceph/super.h b/fs/ceph/super.h
>> index f097237a5ad3..e877c21196e5 100644
>> --- a/fs/ceph/super.h
>> +++ b/fs/ceph/super.h
>> @@ -44,6 +44,7 @@
>>   #define CEPH_MOUNT_OPT_NOQUOTADF       (1<<13) /* no root dir quota in statfs */
>>   #define CEPH_MOUNT_OPT_NOCOPYFROM      (1<<14) /* don't use RADOS 'copy-from' op */
>>   #define CEPH_MOUNT_OPT_ASYNC_DIROPS    (1<<15) /* allow async directory ops */
>> +#define CEPH_MOUNT_OPT_NO_SHARE_SB     (1<<16) /* disable sharing the same superblock */
>>   
>>   #define CEPH_MOUNT_OPT_DEFAULT			\
>>   	(CEPH_MOUNT_OPT_DCACHE |		\



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ceph: add 'noshare' mount option support
  2020-10-13 12:44   ` Xiubo Li
@ 2020-10-13 13:41     ` Jeff Layton
  2020-10-14 10:19       ` Xiubo Li
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff Layton @ 2020-10-13 13:41 UTC (permalink / raw)
  To: Xiubo Li; +Cc: idryomov, zyan, pdonnell, ceph-devel

On Tue, 2020-10-13 at 20:44 +0800, Xiubo Li wrote:
> On 2020/10/13 20:31, Jeff Layton wrote:
> > On Tue, 2020-10-13 at 18:31 +0800, xiubli@redhat.com wrote:
> > > From: Xiubo Li <xiubli@redhat.com>
> > > 
> > > This will disable different mount points to share superblocks.
> > > 
> > Why? What problem does this solve? Don't make us dig through random
> > tracker bugs to determine this, please. :)
> 
> So, should we just mannully trigger to crash the kernel to get the 
> coredump ?
> 

Looking at the tracker ticket, it looks like you want this to work
around some issues with lazy unmounts in tests.  If so, then sure,
forcing a coredump might give you an indication of what happened.

In general though, this sounds like a hacky workaround for the problem
in that tracker. I suggest we don't do this and work toward solving the
real problems that caused the test writers to use lazy umounts in the
first place...

> 
> > Also, the subject mentions a "noshare" mount option, but the code below
> > will be expecting sharesb/nosharesb.
> > 
> > > URL: https://tracker.ceph.com/issues/46883
> > > Signed-off-by: Xiubo Li <xiubli@redhat.com>
> > > ---
> > >   fs/ceph/super.c | 12 ++++++++++++
> > >   fs/ceph/super.h |  1 +
> > >   2 files changed, 13 insertions(+)
> > > 
> > > diff --git a/fs/ceph/super.c b/fs/ceph/super.c
> > > index 2f530a111b3a..6f283e4d62ee 100644
> > > --- a/fs/ceph/super.c
> > > +++ b/fs/ceph/super.c
> > > @@ -159,6 +159,7 @@ enum {
> > >   	Opt_quotadf,
> > >   	Opt_copyfrom,
> > >   	Opt_wsync,
> > > +	Opt_sharesb,
> > >   };
> > >   
> > >   enum ceph_recover_session_mode {
> > > @@ -199,6 +200,7 @@ static const struct fs_parameter_spec ceph_mount_parameters[] = {
> > >   	fsparam_string	("source",			Opt_source),
> > >   	fsparam_u32	("wsize",			Opt_wsize),
> > >   	fsparam_flag_no	("wsync",			Opt_wsync),
> > > +	fsparam_flag_no	("sharesb",			Opt_sharesb),
> > >   	{}
> > >   };
> > >   
> > > @@ -455,6 +457,12 @@ static int ceph_parse_mount_param(struct fs_context *fc,
> > >   		else
> > >   			fsopt->flags |= CEPH_MOUNT_OPT_ASYNC_DIROPS;
> > >   		break;
> > > +	case Opt_sharesb:
> > > +		if (!result.negated)
> > > +			fsopt->flags &= ~CEPH_MOUNT_OPT_NO_SHARE_SB;
> > > +		else
> > > +			fsopt->flags |= CEPH_MOUNT_OPT_NO_SHARE_SB;
> > > +		break;
> > >   	default:
> > >   		BUG();
> > >   	}
> > > @@ -1007,6 +1015,10 @@ static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
> > >   
> > >   	dout("ceph_compare_super %p\n", sb);
> > >   
> > > +	if (fsopt->flags & CEPH_MOUNT_OPT_NO_SHARE_SB ||
> > > +	    other->mount_options->flags & CEPH_MOUNT_OPT_NO_SHARE_SB)
> > > +		return 0;
> > > +
> > >   	if (compare_mount_options(fsopt, opt, other)) {
> > >   		dout("monitor(s)/mount options don't match\n");
> > >   		return 0;
> > > diff --git a/fs/ceph/super.h b/fs/ceph/super.h
> > > index f097237a5ad3..e877c21196e5 100644
> > > --- a/fs/ceph/super.h
> > > +++ b/fs/ceph/super.h
> > > @@ -44,6 +44,7 @@
> > >   #define CEPH_MOUNT_OPT_NOQUOTADF       (1<<13) /* no root dir quota in statfs */
> > >   #define CEPH_MOUNT_OPT_NOCOPYFROM      (1<<14) /* don't use RADOS 'copy-from' op */
> > >   #define CEPH_MOUNT_OPT_ASYNC_DIROPS    (1<<15) /* allow async directory ops */
> > > +#define CEPH_MOUNT_OPT_NO_SHARE_SB     (1<<16) /* disable sharing the same superblock */
> > >   
> > >   #define CEPH_MOUNT_OPT_DEFAULT			\
> > >   	(CEPH_MOUNT_OPT_DCACHE |		\
> 
> 

-- 
Jeff Layton <jlayton@kernel.org>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] ceph: add 'noshare' mount option support
  2020-10-13 13:41     ` Jeff Layton
@ 2020-10-14 10:19       ` Xiubo Li
  0 siblings, 0 replies; 5+ messages in thread
From: Xiubo Li @ 2020-10-14 10:19 UTC (permalink / raw)
  To: Jeff Layton; +Cc: idryomov, zyan, pdonnell, ceph-devel

On 2020/10/13 21:41, Jeff Layton wrote:
> On Tue, 2020-10-13 at 20:44 +0800, Xiubo Li wrote:
>> On 2020/10/13 20:31, Jeff Layton wrote:
>>> On Tue, 2020-10-13 at 18:31 +0800, xiubli@redhat.com wrote:
>>>> From: Xiubo Li <xiubli@redhat.com>
>>>>
>>>> This will disable different mount points to share superblocks.
>>>>
>>> Why? What problem does this solve? Don't make us dig through random
>>> tracker bugs to determine this, please. :)
>> So, should we just mannully trigger to crash the kernel to get the
>> coredump ?
>>
> Looking at the tracker ticket, it looks like you want this to work
> around some issues with lazy unmounts in tests.  If so, then sure,
> forcing a coredump might give you an indication of what happened.
>
> In general though, this sounds like a hacky workaround for the problem
> in that tracker. I suggest we don't do this and work toward solving the
> real problems that caused the test writers to use lazy umounts in the
> first place...

Okay, will try this.

Thanks.


>>> Also, the subject mentions a "noshare" mount option, but the code below
>>> will be expecting sharesb/nosharesb.
>>>
>>>> URL: https://tracker.ceph.com/issues/46883
>>>> Signed-off-by: Xiubo Li <xiubli@redhat.com>
>>>> ---
>>>>    fs/ceph/super.c | 12 ++++++++++++
>>>>    fs/ceph/super.h |  1 +
>>>>    2 files changed, 13 insertions(+)
>>>>
>>>> diff --git a/fs/ceph/super.c b/fs/ceph/super.c
>>>> index 2f530a111b3a..6f283e4d62ee 100644
>>>> --- a/fs/ceph/super.c
>>>> +++ b/fs/ceph/super.c
>>>> @@ -159,6 +159,7 @@ enum {
>>>>    	Opt_quotadf,
>>>>    	Opt_copyfrom,
>>>>    	Opt_wsync,
>>>> +	Opt_sharesb,
>>>>    };
>>>>    
>>>>    enum ceph_recover_session_mode {
>>>> @@ -199,6 +200,7 @@ static const struct fs_parameter_spec ceph_mount_parameters[] = {
>>>>    	fsparam_string	("source",			Opt_source),
>>>>    	fsparam_u32	("wsize",			Opt_wsize),
>>>>    	fsparam_flag_no	("wsync",			Opt_wsync),
>>>> +	fsparam_flag_no	("sharesb",			Opt_sharesb),
>>>>    	{}
>>>>    };
>>>>    
>>>> @@ -455,6 +457,12 @@ static int ceph_parse_mount_param(struct fs_context *fc,
>>>>    		else
>>>>    			fsopt->flags |= CEPH_MOUNT_OPT_ASYNC_DIROPS;
>>>>    		break;
>>>> +	case Opt_sharesb:
>>>> +		if (!result.negated)
>>>> +			fsopt->flags &= ~CEPH_MOUNT_OPT_NO_SHARE_SB;
>>>> +		else
>>>> +			fsopt->flags |= CEPH_MOUNT_OPT_NO_SHARE_SB;
>>>> +		break;
>>>>    	default:
>>>>    		BUG();
>>>>    	}
>>>> @@ -1007,6 +1015,10 @@ static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
>>>>    
>>>>    	dout("ceph_compare_super %p\n", sb);
>>>>    
>>>> +	if (fsopt->flags & CEPH_MOUNT_OPT_NO_SHARE_SB ||
>>>> +	    other->mount_options->flags & CEPH_MOUNT_OPT_NO_SHARE_SB)
>>>> +		return 0;
>>>> +
>>>>    	if (compare_mount_options(fsopt, opt, other)) {
>>>>    		dout("monitor(s)/mount options don't match\n");
>>>>    		return 0;
>>>> diff --git a/fs/ceph/super.h b/fs/ceph/super.h
>>>> index f097237a5ad3..e877c21196e5 100644
>>>> --- a/fs/ceph/super.h
>>>> +++ b/fs/ceph/super.h
>>>> @@ -44,6 +44,7 @@
>>>>    #define CEPH_MOUNT_OPT_NOQUOTADF       (1<<13) /* no root dir quota in statfs */
>>>>    #define CEPH_MOUNT_OPT_NOCOPYFROM      (1<<14) /* don't use RADOS 'copy-from' op */
>>>>    #define CEPH_MOUNT_OPT_ASYNC_DIROPS    (1<<15) /* allow async directory ops */
>>>> +#define CEPH_MOUNT_OPT_NO_SHARE_SB     (1<<16) /* disable sharing the same superblock */
>>>>    
>>>>    #define CEPH_MOUNT_OPT_DEFAULT			\
>>>>    	(CEPH_MOUNT_OPT_DCACHE |		\
>>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, back to index

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-13 10:31 [PATCH] ceph: add 'noshare' mount option support xiubli
2020-10-13 12:31 ` Jeff Layton
2020-10-13 12:44   ` Xiubo Li
2020-10-13 13:41     ` Jeff Layton
2020-10-14 10:19       ` Xiubo Li

CEPH-Devel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/ceph-devel/0 ceph-devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ceph-devel ceph-devel/ https://lore.kernel.org/ceph-devel \
		ceph-devel@vger.kernel.org
	public-inbox-index ceph-devel

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.ceph-devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git