diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2011-11-10 16:53:35 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-11-10 16:53:35 +0100 |
commit | a86e02492d7700ce8cb4108f53646dfb025c2dff (patch) | |
tree | f14b9aa002cec6351214bbfccdd49bf4a1de9c59 | |
parent | fae473c81b98a1b2290b7efcd4ee9a8ebbb3b1e6 (diff) | |
download | busybox-w32-a86e02492d7700ce8cb4108f53646dfb025c2dff.tar.gz busybox-w32-a86e02492d7700ce8cb4108f53646dfb025c2dff.tar.bz2 busybox-w32-a86e02492d7700ce8cb4108f53646dfb025c2dff.zip |
mount: make FEATURE_MOUNT_NFS not needed for Linux 2.6.23+
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | util-linux/Config.src | 11 | ||||
-rw-r--r-- | util-linux/mount.c | 47 |
2 files changed, 49 insertions, 9 deletions
diff --git a/util-linux/Config.src b/util-linux/Config.src index 888bc8f3b..57a52cefb 100644 --- a/util-linux/Config.src +++ b/util-linux/Config.src | |||
@@ -485,13 +485,18 @@ config FEATURE_MOUNT_LABEL | |||
485 | This also enables label or uuid support for swapon. | 485 | This also enables label or uuid support for swapon. |
486 | 486 | ||
487 | config FEATURE_MOUNT_NFS | 487 | config FEATURE_MOUNT_NFS |
488 | bool "Support mounting NFS file systems" | 488 | bool "Support mounting NFS file systems on Linux < 2.6.23" |
489 | default y | 489 | default n |
490 | depends on MOUNT | 490 | depends on MOUNT |
491 | select FEATURE_HAVE_RPC | 491 | select FEATURE_HAVE_RPC |
492 | select FEATURE_SYSLOG | 492 | select FEATURE_SYSLOG |
493 | help | 493 | help |
494 | Enable mounting of NFS file systems. | 494 | Enable mounting of NFS file systems on Linux kernels prior |
495 | to version 2.6.23. Note that in this case mounting of NFS | ||
496 | over IPv6 will not be possible. | ||
497 | |||
498 | Note that this option links in RPC support from libc, | ||
499 | which is rather large (~10 kbytes on uclibc). | ||
495 | 500 | ||
496 | config FEATURE_MOUNT_CIFS | 501 | config FEATURE_MOUNT_CIFS |
497 | bool "Support mounting CIFS/SMB file systems" | 502 | bool "Support mounting CIFS/SMB file systems" |
diff --git a/util-linux/mount.c b/util-linux/mount.c index 1dd4c0c43..7ae1981c8 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c | |||
@@ -1144,7 +1144,7 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts) | |||
1144 | pathname = s + 1; | 1144 | pathname = s + 1; |
1145 | *s = '\0'; | 1145 | *s = '\0'; |
1146 | /* Ignore all but first hostname in replicated mounts | 1146 | /* Ignore all but first hostname in replicated mounts |
1147 | until they can be fully supported. (mack@sgi.com) */ | 1147 | * until they can be fully supported. (mack@sgi.com) */ |
1148 | s = strchr(hostname, ','); | 1148 | s = strchr(hostname, ','); |
1149 | if (s) { | 1149 | if (s) { |
1150 | *s = '\0'; | 1150 | *s = '\0'; |
@@ -1683,7 +1683,6 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts) | |||
1683 | 1683 | ||
1684 | /* Perform actual mount */ | 1684 | /* Perform actual mount */ |
1685 | do_mount: | 1685 | do_mount: |
1686 | mp->mnt_type = (char*)"nfs"; | ||
1687 | retval = mount_it_now(mp, vfsflags, (char*)&data); | 1686 | retval = mount_it_now(mp, vfsflags, (char*)&data); |
1688 | goto ret; | 1687 | goto ret; |
1689 | 1688 | ||
@@ -1708,8 +1707,43 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts) | |||
1708 | 1707 | ||
1709 | #else // !ENABLE_FEATURE_MOUNT_NFS | 1708 | #else // !ENABLE_FEATURE_MOUNT_NFS |
1710 | 1709 | ||
1711 | // Never called. Call should be optimized out. | 1710 | /* Linux 2.6.23+ supports nfs mounts with options passed as a string. |
1712 | int nfsmount(struct mntent *mp, long vfsflags, char *filteropts); | 1711 | * For older kernels, you must build busybox with ENABLE_FEATURE_MOUNT_NFS. |
1712 | * (However, note that then you lose any chances that NFS over IPv6 would work). | ||
1713 | */ | ||
1714 | static int nfsmount(struct mntent *mp, long vfsflags, char *filteropts) | ||
1715 | { | ||
1716 | len_and_sockaddr *lsa; | ||
1717 | char *opts; | ||
1718 | char *end; | ||
1719 | char *dotted; | ||
1720 | int ret; | ||
1721 | |||
1722 | # if ENABLE_FEATURE_IPV6 | ||
1723 | end = strchr(mp->mnt_fsname, ']'); | ||
1724 | if (end && end[1] == ':') | ||
1725 | end++; | ||
1726 | else | ||
1727 | # endif | ||
1728 | /* mount_main() guarantees that ':' is there */ | ||
1729 | end = strchr(mp->mnt_fsname, ':'); | ||
1730 | |||
1731 | *end = '\0'; | ||
1732 | lsa = xdotted2sockaddr(mp->mnt_fsname, /*port:*/ 0); | ||
1733 | *end = ':'; | ||
1734 | dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa); | ||
1735 | if (ENABLE_FEATURE_CLEAN_UP) free(lsa); | ||
1736 | opts = xasprintf("%s%saddr=%s", | ||
1737 | filteropts ? filteropts : "", | ||
1738 | filteropts ? "," : "", | ||
1739 | dotted | ||
1740 | ); | ||
1741 | if (ENABLE_FEATURE_CLEAN_UP) free(dotted); | ||
1742 | ret = mount_it_now(mp, vfsflags, opts); | ||
1743 | if (ENABLE_FEATURE_CLEAN_UP) free(opts); | ||
1744 | |||
1745 | return ret; | ||
1746 | } | ||
1713 | 1747 | ||
1714 | #endif // !ENABLE_FEATURE_MOUNT_NFS | 1748 | #endif // !ENABLE_FEATURE_MOUNT_NFS |
1715 | 1749 | ||
@@ -1800,10 +1834,11 @@ static int singlemount(struct mntent *mp, int ignore_busy) | |||
1800 | } | 1834 | } |
1801 | 1835 | ||
1802 | // Might this be an NFS filesystem? | 1836 | // Might this be an NFS filesystem? |
1803 | if (ENABLE_FEATURE_MOUNT_NFS | 1837 | if ((!mp->mnt_type || strncmp(mp->mnt_type, "nfs", 3) == 0) |
1804 | && (!mp->mnt_type || strcmp(mp->mnt_type, "nfs") == 0) | ||
1805 | && strchr(mp->mnt_fsname, ':') != NULL | 1838 | && strchr(mp->mnt_fsname, ':') != NULL |
1806 | ) { | 1839 | ) { |
1840 | if (!mp->mnt_type) | ||
1841 | mp->mnt_type = (char*)"nfs"; | ||
1807 | rc = nfsmount(mp, vfsflags, filteropts); | 1842 | rc = nfsmount(mp, vfsflags, filteropts); |
1808 | goto report_error; | 1843 | goto report_error; |
1809 | } | 1844 | } |