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 | } |
