[2/2] init, mount: export the name_to_dev_t symbol
diff mbox series

Message ID 1274802411-26613-2-git-send-email-wad@chromium.org
State New, archived
Headers show
Series
  • [1/2] init: make the path argument a const in name_to_dev_t
Related show

Commit Message

Will Drewry May 25, 2010, 3:46 p.m. UTC
This change only adds EXPORT_SYMBOL() for name_to_dev_t.

name_to_dev_t is in use outside of init/ but is not 'officially'
exported.  It provides behavior that is useful for any code that may be
need to lookup a block device by major:minor or registered kernel name,
especially before there is a root filesystem.

Hopefully, this is the appropriate use of EXPORT_SYMBOL().  This
specific function seems to be a stable interface and is available
in include/linux/mount.h.

Signed-off-by: Will Drewry <wad@chromium.org>
---
 init/do_mounts.c      |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

Comments

Christoph Hellwig May 25, 2010, 3:55 p.m. UTC | #1
On Tue, May 25, 2010 at 10:46:51AM -0500, Will Drewry wrote:
> This change only adds EXPORT_SYMBOL() for name_to_dev_t.
> 
> name_to_dev_t is in use outside of init/ but is not 'officially'
> exported.  It provides behavior that is useful for any code that may be
> need to lookup a block device by major:minor or registered kernel name,
> especially before there is a root filesystem.
> 
> Hopefully, this is the appropriate use of EXPORT_SYMBOL().  This
> specific function seems to be a stable interface and is available
> in include/linux/mount.h.

NACK.  It's really a hack for the boot code, there's no offical name to
dev_t mapping.

What are you trying to use it for?

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Alasdair G Kergon May 25, 2010, 4:05 p.m. UTC | #2
On Tue, May 25, 2010 at 11:55:35AM -0400, Christoph Hellwig wrote:
> NACK.  It's really a hack for the boot code, there's no offical name to
> dev_t mapping.
> What are you trying to use it for?
 
Device-mapper contains a subset of that code, so he's proposing we
use it here:

@@ -434,17 +435,13 @@ static int __table_get_device(struct dm_
 	int r;
 	dev_t uninitialized_var(dev);
 	struct dm_dev_internal *dd;
-	unsigned int major, minor;
 
 	BUG_ON(!t);
 
-	if (sscanf(path, "%u:%u", &major, &minor) == 2) {
-		/* Extract the major/minor numbers */
-		dev = MKDEV(major, minor);
-		if (MAJOR(dev) != major || MINOR(dev) != minor)
-			return -EOVERFLOW;
-	} else {
-		/* convert the path to a device */
+	/* lookup by major:minor or registered device name */
+	dev = name_to_dev_t(path);
+	if (!dev) {
+		/* convert the path to a device by finding its inode */
 		struct block_device *bdev = lookup_bdev(path);
 
 		if (IS_ERR(bdev))

Alasdair

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Will Drewry May 25, 2010, 4:11 p.m. UTC | #3
On Tue, May 25, 2010 at 11:05 AM, Alasdair G Kergon <agk@redhat.com> wrote:
> On Tue, May 25, 2010 at 11:55:35AM -0400, Christoph Hellwig wrote:
>> NACK.  It's really a hack for the boot code, there's no offical name to
>> dev_t mapping.
>> What are you trying to use it for?
>
> Device-mapper contains a subset of that code, so he's proposing we
> use it here:
>
> @@ -434,17 +435,13 @@ static int __table_get_device(struct dm_
>        int r;
>        dev_t uninitialized_var(dev);
>        struct dm_dev_internal *dd;
> -       unsigned int major, minor;
>
>        BUG_ON(!t);
>
> -       if (sscanf(path, "%u:%u", &major, &minor) == 2) {
> -               /* Extract the major/minor numbers */
> -               dev = MKDEV(major, minor);
> -               if (MAJOR(dev) != major || MINOR(dev) != minor)
> -                       return -EOVERFLOW;
> -       } else {
> -               /* convert the path to a device */
> +       /* lookup by major:minor or registered device name */
> +       dev = name_to_dev_t(path);
> +       if (!dev) {
> +               /* convert the path to a device by finding its inode */
>                struct block_device *bdev = lookup_bdev(path);
>
>                if (IS_ERR(bdev))

In addition to getting rid of the code duplication, I'd like device-mapper
to be able to resolve slave devices at boot-time to accommodate a
do_mounts_dm.c equivalent to do_mounts_md.c:

  https://patchwork.kernel.org/patch/101024/

(which I neglected to mail to the other init-related maintainers - sorry!
 I'll correct that when I mail out the next revision.)

thanks!
will
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Christoph Hellwig May 25, 2010, 5:21 p.m. UTC | #4
On Tue, May 25, 2010 at 11:11:33AM -0500, Will Drewry wrote:
> In addition to getting rid of the code duplication, I'd like device-mapper
> to be able to resolve slave devices at boot-time to accommodate a
> do_mounts_dm.c equivalent to do_mounts_md.c:

So please add a do_mounts_dm.c instead of pushing this somewhere it
doesn't belong to.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Mike Snitzer May 25, 2010, 6:30 p.m. UTC | #5
On Tue, May 25 2010 at  1:21pm -0400,
Christoph Hellwig <hch@infradead.org> wrote:

> On Tue, May 25, 2010 at 11:11:33AM -0500, Will Drewry wrote:
> > In addition to getting rid of the code duplication, I'd like device-mapper
> > to be able to resolve slave devices at boot-time to accommodate a
> > do_mounts_dm.c equivalent to do_mounts_md.c:
> 
> So please add a do_mounts_dm.c instead of pushing this somewhere it
> doesn't belong to.

He is proposing doing just that, you cut out the patchwork url he
already shared: https://patchwork.kernel.org/patch/101024/

Will's intentions are good: avoid code duplication.

He is also trying to keep DM-specific common code in drivers/md/

So in this instance, avoiding the need to export name_to_dev_t would
require splitting the internal DM __table_get_device (or more likely:
dm_get_device) out to a public facing interface that takes a dev_t.

Mike
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Will Drewry June 8, 2010, 4:02 p.m. UTC | #6
On Tue, May 25, 2010 at 1:30 PM, Mike Snitzer <snitzer@redhat.com> wrote:
> On Tue, May 25 2010 at  1:21pm -0400,
> Christoph Hellwig <hch@infradead.org> wrote:
>
>> On Tue, May 25, 2010 at 11:11:33AM -0500, Will Drewry wrote:
>> > In addition to getting rid of the code duplication, I'd like device-mapper
>> > to be able to resolve slave devices at boot-time to accommodate a
>> > do_mounts_dm.c equivalent to do_mounts_md.c:
>>
>> So please add a do_mounts_dm.c instead of pushing this somewhere it
>> doesn't belong to.
>
> He is proposing doing just that, you cut out the patchwork url he
> already shared: https://patchwork.kernel.org/patch/101024/
>
> Will's intentions are good: avoid code duplication.
>
> He is also trying to keep DM-specific common code in drivers/md/
>
> So in this instance, avoiding the need to export name_to_dev_t would
> require splitting the internal DM __table_get_device (or more likely:
> dm_get_device) out to a public facing interface that takes a dev_t.

FWIW, I mailed out a new patchset which does not expect the dm core
code to understand device paths before there is a root device.  Now it
walks the target parameters supplied to do_mounts_dm.c and attempts
a best-guess replacement with major:minor numbers.  It's not as succinct,
but it achieves the isolation requested and negates the need for the
patch on this thread.

The relevant init-time patchwork link:
  https://patchwork.kernel.org/patch/104861/
(Full patchset is 58-61)

Any and all comments will be appreciated - thanks!
will
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Patch
diff mbox series

diff --git a/init/do_mounts.c b/init/do_mounts.c
index a322b13..b9206e7 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -144,6 +144,7 @@  fail:
 done:
 	return res;
 }
+EXPORT_SYMBOL(name_to_dev_t);
 
 static int __init root_dev_setup(char *line)
 {