linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Randy Dunlap <rdunlap@infradead.org>
To: Matthew Wilcox <willy@infradead.org>, linux-kernel@vger.kernel.org
Cc: Alexander Viro <viro@zeniv.linux.org.uk>, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 05/26] fs: Convert unnamed_dev_ida to new API
Date: Fri, 22 Jun 2018 12:45:10 -0700	[thread overview]
Message-ID: <a403bace-a7b4-aa3e-8fa7-4c47051a7916@infradead.org> (raw)
In-Reply-To: <20180621212835.5636-6-willy@infradead.org>

On 06/21/2018 02:28 PM, Matthew Wilcox wrote:
> The new API is much easier for this user.  Also add kerneldoc for
> get_anon_bdev().
> 
> Signed-off-by: Matthew Wilcox <willy@infradead.org>
> ---
>  fs/super.c | 63 +++++++++++++++++++-----------------------------------
>  1 file changed, 22 insertions(+), 41 deletions(-)
> 
> diff --git a/fs/super.c b/fs/super.c
> index 50728d9c1a05..3e7a0aea716a 100644
> --- a/fs/super.c
> +++ b/fs/super.c
> @@ -978,58 +978,42 @@ void emergency_thaw_all(void)
>  	}
>  }
>  
> -/*
> - * Unnamed block devices are dummy devices used by virtual
> - * filesystems which don't use real block-devices.  -- jrs
> - */
> -
>  static DEFINE_IDA(unnamed_dev_ida);
> -static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */
> -/* Many userspace utilities consider an FSID of 0 invalid.
> - * Always return at least 1 from get_anon_bdev.
> - */
> -static int unnamed_dev_start = 1;
>  
> +/**
> + * get_anon_bdev - Allocate a block device for filesystems which don't have one.
> + * @p: Pointer to a dev_t.
> + *
> + * Filesystems which don't use real block devices can call this function
> + * to allocate a virtual block device.
> + *
> + * Context: Any context.  Frequently called while holding sb_lock.
> + * Return: 0 on success, -EMFILE if there are no anonymous bdevs left
> + * or -EAGAIN if memory allocation failed.

Looks to me like the code used to return -ENOMEM and used -EAGAIN as an
internal retry code.

confused?  (/me)

> + */
>  int get_anon_bdev(dev_t *p)
>  {
>  	int dev;
> -	int error;
>  
> - retry:
> -	if (ida_pre_get(&unnamed_dev_ida, GFP_ATOMIC) == 0)
> -		return -ENOMEM;
> -	spin_lock(&unnamed_dev_lock);
> -	error = ida_get_new_above(&unnamed_dev_ida, unnamed_dev_start, &dev);
> -	if (!error)
> -		unnamed_dev_start = dev + 1;
> -	spin_unlock(&unnamed_dev_lock);
> -	if (error == -EAGAIN)
> -		/* We raced and lost with another CPU. */
> -		goto retry;
> -	else if (error)
> +	/*
> +	 * Many userspace utilities consider an FSID of 0 invalid.
> +	 * Always return at least 1 from get_anon_bdev.
> +	 */
> +	dev = ida_alloc_range(&unnamed_dev_ida, 1, (1 << MINORBITS) - 1,
> +			GFP_ATOMIC);
> +	if (dev == -ENOSPC)
> +		return -EMFILE;
> +	if (dev < 0)
>  		return -EAGAIN;
>  
> -	if (dev >= (1 << MINORBITS)) {
> -		spin_lock(&unnamed_dev_lock);
> -		ida_remove(&unnamed_dev_ida, dev);
> -		if (unnamed_dev_start > dev)
> -			unnamed_dev_start = dev;
> -		spin_unlock(&unnamed_dev_lock);
> -		return -EMFILE;
> -	}
> -	*p = MKDEV(0, dev & MINORMASK);
> +	*p = MKDEV(0, dev);
>  	return 0;
>  }
>  EXPORT_SYMBOL(get_anon_bdev);



-- 
~Randy

  reply	other threads:[~2018-06-22 19:45 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-21 21:28 [PATCH 00/26] New IDA API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 01/26] radix tree test suite: fix build Matthew Wilcox
2018-06-21 21:28 ` [PATCH 02/26] ida: Lock the IDA in ida_destroy Matthew Wilcox
2018-06-21 21:28 ` [PATCH 03/26] ida: Add new API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 04/26] mtip32xx: Convert to new IDA API Matthew Wilcox
2018-06-25  8:20   ` Johannes Thumshirn
2018-06-21 21:28 ` [PATCH 05/26] fs: Convert unnamed_dev_ida to new API Matthew Wilcox
2018-06-22 19:45   ` Randy Dunlap [this message]
2018-06-22 21:12     ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 06/26] fs: Convert namespace IDAs " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 07/26] devpts: Convert to new IDA API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 08/26] sd: Convert to new IDA interface Matthew Wilcox
2018-06-21 21:28 ` [PATCH 09/26] osd: Convert to new IDA API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 10/26] rsxx: " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 11/26] cb710: " Matthew Wilcox
2018-06-21 21:33   ` Michał Mirosław
2018-06-21 21:28 ` [PATCH 12/26] Convert net_namespace " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 13/26] ppc: Convert mmu context allocation " Matthew Wilcox
2018-06-22  2:15   ` Nicholas Piggin
2018-06-22  4:38     ` Matthew Wilcox
2018-06-22  4:53       ` Nicholas Piggin
2018-06-22  5:47       ` Aneesh Kumar K.V
2018-06-22  5:47     ` Aneesh Kumar K.V
2018-06-21 21:28 ` [PATCH 14/26] media: Convert entity ID " Matthew Wilcox
2018-07-24 11:05   ` Sakari Ailus
2018-07-30 14:55     ` Mauro Carvalho Chehab
2018-07-31 18:16       ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 15/26] ppc: Convert vas " Matthew Wilcox
2018-07-05 12:17   ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 16/26] dmaengine: Convert " Matthew Wilcox
2018-06-23 12:30   ` Vinod
2018-06-23 23:06     ` Matthew Wilcox
2018-06-24  7:57   ` Lars-Peter Clausen
2018-06-26 23:00     ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 17/26] drm/vmwgfx: " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 18/26] target/iscsi: Allocate session IDs from an IDA Matthew Wilcox
2018-07-26 16:48   ` Mike Christie
2018-07-26 16:50     ` Mike Christie
2018-07-26 17:13     ` Mike Christie
2018-07-27 19:38       ` Matthew Wilcox
2018-07-27 21:05         ` Mike Christie
2018-07-31  2:03           ` Martin K. Petersen
2018-07-31 18:15             ` Matthew Wilcox
2018-07-31 18:55               ` Mike Christie
2018-06-21 21:28 ` [PATCH 19/26] ida: Start new test_ida module Matthew Wilcox
2018-06-21 21:28 ` [PATCH 20/26] idr-test: Convert ida_check_nomem to new API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 21/26] test_ida: Move ida_check_leaf Matthew Wilcox
2018-06-21 21:28 ` [PATCH 22/26] test_ida: Move ida_check_max Matthew Wilcox
2018-06-21 21:28 ` [PATCH 23/26] test_ida: Convert check_ida_conv to new API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 24/26] test_ida: check_ida_destroy and check_ida_alloc Matthew Wilcox
2018-06-21 21:28 ` [PATCH 25/26] ida: Remove old API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 26/26] ida: Change ida_get_new_above to return the id Matthew Wilcox

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=a403bace-a7b4-aa3e-8fa7-4c47051a7916@infradead.org \
    --to=rdunlap@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).