diff options
Diffstat (limited to 'drivers/md/dm-table.c')
| -rw-r--r-- | drivers/md/dm-table.c | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 798e468103b8..61f441409234 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c | |||
| @@ -316,29 +316,12 @@ static inline int check_space(struct dm_table *t) | |||
| 316 | */ | 316 | */ |
| 317 | static int lookup_device(const char *path, dev_t *dev) | 317 | static int lookup_device(const char *path, dev_t *dev) |
| 318 | { | 318 | { |
| 319 | int r; | 319 | struct block_device *bdev = lookup_bdev(path); |
| 320 | struct nameidata nd; | 320 | if (IS_ERR(bdev)) |
| 321 | struct inode *inode; | 321 | return PTR_ERR(bdev); |
| 322 | 322 | *dev = bdev->bd_dev; | |
| 323 | if ((r = path_lookup(path, LOOKUP_FOLLOW, &nd))) | 323 | bdput(bdev); |
| 324 | return r; | 324 | return 0; |
| 325 | |||
| 326 | inode = nd.path.dentry->d_inode; | ||
| 327 | if (!inode) { | ||
| 328 | r = -ENOENT; | ||
| 329 | goto out; | ||
| 330 | } | ||
| 331 | |||
| 332 | if (!S_ISBLK(inode->i_mode)) { | ||
| 333 | r = -ENOTBLK; | ||
| 334 | goto out; | ||
| 335 | } | ||
| 336 | |||
| 337 | *dev = inode->i_rdev; | ||
| 338 | |||
| 339 | out: | ||
| 340 | path_put(&nd.path); | ||
| 341 | return r; | ||
| 342 | } | 325 | } |
| 343 | 326 | ||
| 344 | /* | 327 | /* |
