Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 359350
b: refs/heads/master
c: c9d76be
h: refs/heads/master
v: v3
  • Loading branch information
Tejun Heo authored and Linus Torvalds committed Feb 28, 2013
1 parent 1dcd135 commit f28dd4d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 40 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 80f22b4430cd5c108a4676803439ecb0c5cfeca1
refs/heads/master: c9d76be696bbb76ba1081d2b0fc0086f449788da
54 changes: 15 additions & 39 deletions trunk/drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1755,62 +1755,38 @@ static void free_minor(int minor)
*/
static int specific_minor(int minor)
{
int r, m;
int r;

if (minor >= (1 << MINORBITS))
return -EINVAL;

r = idr_pre_get(&_minor_idr, GFP_KERNEL);
if (!r)
return -ENOMEM;

idr_preload(GFP_KERNEL);
spin_lock(&_minor_lock);

if (idr_find(&_minor_idr, minor)) {
r = -EBUSY;
goto out;
}

r = idr_get_new_above(&_minor_idr, MINOR_ALLOCED, minor, &m);
if (r)
goto out;
r = idr_alloc(&_minor_idr, MINOR_ALLOCED, minor, minor + 1, GFP_NOWAIT);

if (m != minor) {
idr_remove(&_minor_idr, m);
r = -EBUSY;
goto out;
}

out:
spin_unlock(&_minor_lock);
return r;
idr_preload_end();
if (r < 0)
return r == -ENOSPC ? -EBUSY : r;
return 0;
}

static int next_free_minor(int *minor)
{
int r, m;

r = idr_pre_get(&_minor_idr, GFP_KERNEL);
if (!r)
return -ENOMEM;
int r;

idr_preload(GFP_KERNEL);
spin_lock(&_minor_lock);

r = idr_get_new(&_minor_idr, MINOR_ALLOCED, &m);
if (r)
goto out;

if (m >= (1 << MINORBITS)) {
idr_remove(&_minor_idr, m);
r = -ENOSPC;
goto out;
}

*minor = m;
r = idr_alloc(&_minor_idr, MINOR_ALLOCED, 0, 1 << MINORBITS, GFP_NOWAIT);

out:
spin_unlock(&_minor_lock);
return r;
idr_preload_end();
if (r < 0)
return r;
*minor = r;
return 0;
}

static const struct block_device_operations dm_blk_dops;
Expand Down

0 comments on commit f28dd4d

Please sign in to comment.