Removed all the unused patches
Signed-off-by: Steve Dickson <steved@redhat.com>
This commit is contained in:
parent
dd8c110ca9
commit
06cc8a9e39
@ -1,75 +0,0 @@
|
||||
From a69f6aeb19841f5a95c3eb4f4e5fe5ca0db247f4 Mon Sep 17 00:00:00 2001
|
||||
From: Jim Rees <rees@umich.edu>
|
||||
Date: Tue, 15 May 2012 10:10:01 -0400
|
||||
Subject: [PATCH 1/1] blkmapd: remove pretty_sig()
|
||||
|
||||
This really only works against EMC servers. There is at least one server
|
||||
that returns unprintable signatures, which fill the log with garbage (the
|
||||
spec does not mandate printable signatures). It could be made more generic,
|
||||
for example by checking each byte for isprint(). But the signatures are
|
||||
really only of interest to developers, not admins, so it seems better to
|
||||
just remove it.
|
||||
|
||||
Signed-off-by: Jim Rees <rees@umich.edu>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
---
|
||||
utils/blkmapd/device-process.c | 29 -----------------------------
|
||||
1 files changed, 0 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/utils/blkmapd/device-process.c b/utils/blkmapd/device-process.c
|
||||
index 652a7a8..5fe3dff 100644
|
||||
--- a/utils/blkmapd/device-process.c
|
||||
+++ b/utils/blkmapd/device-process.c
|
||||
@@ -49,28 +49,6 @@
|
||||
|
||||
#include "device-discovery.h"
|
||||
|
||||
-static char *pretty_sig(char *sig, uint32_t siglen)
|
||||
-{
|
||||
- static char rs[100];
|
||||
- uint64_t sigval;
|
||||
- unsigned int i;
|
||||
-
|
||||
- if (siglen <= sizeof(sigval)) {
|
||||
- sigval = 0;
|
||||
- for (i = 0; i < siglen; i++)
|
||||
- sigval |= ((unsigned char *)sig)[i] << (i * 8);
|
||||
- sprintf(rs, "0x%0llx", (unsigned long long) sigval);
|
||||
- } else {
|
||||
- if (siglen > sizeof rs - 4) {
|
||||
- siglen = sizeof rs - 4;
|
||||
- sprintf(&rs[siglen], "...");
|
||||
- } else
|
||||
- rs[siglen] = '\0';
|
||||
- memcpy(rs, sig, siglen);
|
||||
- }
|
||||
- return rs;
|
||||
-}
|
||||
-
|
||||
uint32_t *blk_overflow(uint32_t * p, uint32_t * end, size_t nbytes)
|
||||
{
|
||||
uint32_t *q = p + ((nbytes + 3) >> 2);
|
||||
@@ -109,9 +87,6 @@ static int decode_blk_signature(uint32_t **pp, uint32_t * end,
|
||||
* for mapping, then thrown away.
|
||||
*/
|
||||
comp->bs_string = (char *)p;
|
||||
- BL_LOG_INFO("%s: si_comps[%d]: bs_length %d, bs_string %s\n",
|
||||
- __func__, i, siglen,
|
||||
- pretty_sig(comp->bs_string, siglen));
|
||||
p += ((siglen + 3) >> 2);
|
||||
}
|
||||
*pp = p;
|
||||
@@ -152,10 +127,6 @@ read_cmp_blk_sig(struct bl_disk *disk, int fd, struct bl_sig_comp *comp)
|
||||
}
|
||||
|
||||
ret = memcmp(sig, comp->bs_string, siglen);
|
||||
- if (!ret)
|
||||
- BL_LOG_INFO("%s: %s sig %s at %lld\n", __func__, dev_name,
|
||||
- pretty_sig(sig, siglen),
|
||||
- (long long)comp->bs_offset);
|
||||
|
||||
out:
|
||||
if (sig)
|
||||
--
|
||||
1.7.7.6
|
||||
|
@ -1,50 +0,0 @@
|
||||
diff -up nfs-utils-1.2.2/configure.ac.orig nfs-utils-1.2.2/configure.ac
|
||||
--- nfs-utils-1.2.2/configure.ac.orig 2010-02-18 07:35:00.000000000 -0500
|
||||
+++ nfs-utils-1.2.2/configure.ac 2010-02-18 09:15:24.710128679 -0500
|
||||
@@ -22,6 +22,14 @@ AC_ARG_WITH(statedir,
|
||||
statedir=$withval,
|
||||
statedir=/var/lib/nfs)
|
||||
AC_SUBST(statedir)
|
||||
+AC_ARG_WITH(statdpath,
|
||||
+ [AC_HELP_STRING([--with-statdpath=/foo],
|
||||
+ [Causes statd put it's state file in /foo instead of statedir]
|
||||
+ )],
|
||||
+ statdpath=$withval,
|
||||
+ statdpath=""
|
||||
+ )
|
||||
+ AC_SUBST(statdpath)
|
||||
AC_ARG_WITH(statduser,
|
||||
[AC_HELP_STRING([--with-statduser=rpcuser],
|
||||
[statd to run under @<:@rpcuser or nobody@:>@]
|
||||
@@ -364,6 +372,9 @@ dnl ************************************
|
||||
dnl Export some path names to config.h
|
||||
dnl *************************************************************
|
||||
AC_DEFINE_UNQUOTED(NFS_STATEDIR, "$statedir", [This defines the location of the NFS state files. Warning: this must match definitions in config.mk!])
|
||||
+if test "$statdpath" != ""; then
|
||||
+ AC_DEFINE_UNQUOTED(NSM_STATD_PATH, "$statdpath", [Define this if you what statd file placed in somewhere other than NFS_STATEDIR])
|
||||
+fi
|
||||
|
||||
if test "x$cross_compiling" = "xno"; then
|
||||
CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-"$CFLAGS"}
|
||||
diff -up nfs-utils-1.2.2/support/nsm/file.c.orig nfs-utils-1.2.2/support/nsm/file.c
|
||||
--- nfs-utils-1.2.2/support/nsm/file.c.orig 2010-02-18 07:35:00.000000000 -0500
|
||||
+++ nfs-utils-1.2.2/support/nsm/file.c 2010-02-18 09:15:24.711128045 -0500
|
||||
@@ -93,12 +93,13 @@
|
||||
#define NSM_KERNEL_STATE_FILE "/proc/sys/fs/nfs/nsm_local_state"
|
||||
|
||||
/*
|
||||
- * Some distributions place statd's files in a subdirectory
|
||||
+ * Allow different places for statd's files
|
||||
*/
|
||||
-#define NSM_PATH_EXTENSION
|
||||
-/* #define NSM_PATH_EXTENSION "/statd" */
|
||||
-
|
||||
-#define NSM_DEFAULT_STATEDIR NFS_STATEDIR NSM_PATH_EXTENSION
|
||||
+#ifdef NSM_STATD_PATH
|
||||
+#define NSM_DEFAULT_STATEDIR NSM_STATD_PATH
|
||||
+#else
|
||||
+#define NSM_DEFAULT_STATEDIR NFS_STATEDIR
|
||||
+#endif
|
||||
|
||||
static char nsm_base_dirname[PATH_MAX] = NSM_DEFAULT_STATEDIR;
|
||||
|
@ -1,36 +0,0 @@
|
||||
commit 6f228ea26be06572de245aed5496aaa122cca5a8
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Fri Oct 15 17:20:28 2010 -0400
|
||||
|
||||
Removed duplicate entries in export man page
|
||||
|
||||
The man page's paragraphs about "refer=" and "replicas="
|
||||
each appear twice.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/utils/exportfs/exports.man b/utils/exportfs/exports.man
|
||||
index c726dd9..bfc4d42 100644
|
||||
--- a/utils/exportfs/exports.man
|
||||
+++ b/utils/exportfs/exports.man
|
||||
@@ -375,20 +375,6 @@ If the client asks for alternative locations for the export point, it
|
||||
will be given this list of alternatives. (Note that actual replication
|
||||
of the filesystem must be handled elsewhere.)
|
||||
|
||||
-.TP
|
||||
-.IR refer= path@host[+host][:path@host[+host]]
|
||||
-A client referencing the export point will be directed to choose from
|
||||
-the given list an alternative location for the filesystem.
|
||||
-(Note that the server must have a mountpoint here, though a different
|
||||
-filesystem is not required; so, for example,
|
||||
-.IR "mount --bind" " /path /path"
|
||||
-is sufficient.)
|
||||
-.TP
|
||||
-.IR replicas= path@host[+host][:path@host[+host]]
|
||||
-If the client asks for alternative locations for the export point, it
|
||||
-will be given this list of alternatives. (Note that actual replication
|
||||
-of the filesystem must be handled elsewhere.)
|
||||
-
|
||||
.SS User ID Mapping
|
||||
.PP
|
||||
.B nfsd
|
@ -1,37 +0,0 @@
|
||||
mount: fix for libmount from util-linux >= 2.20
|
||||
|
||||
The function mnt_fs_set_fs_options() has been removed from the final
|
||||
version of the libmount API.
|
||||
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
utils/mount/mount_libmount.c | 15 ++++++++++++---
|
||||
1 files changed, 12 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/utils/mount/mount_libmount.c b/utils/mount/mount_libmount.c
|
||||
index 6dd6484..cf6e58c 100644
|
||||
--- a/utils/mount/mount_libmount.c
|
||||
+++ b/utils/mount/mount_libmount.c
|
||||
@@ -61,10 +61,19 @@ int nomtab;
|
||||
* managed by libmount at all. We have to use "mount attributes" that are
|
||||
* private for mount.<type> helpers.
|
||||
*/
|
||||
-static void store_mount_options(struct libmnt_fs *fs, const char *opts)
|
||||
+static void store_mount_options(struct libmnt_fs *fs, const char *nfs_opts)
|
||||
{
|
||||
- mnt_fs_set_fs_options(fs, opts); /* for mtab */
|
||||
- mnt_fs_set_attributes(fs, opts); /* for non-mtab systems */
|
||||
+ char *o = NULL;
|
||||
+
|
||||
+ mnt_fs_set_attributes(fs, nfs_opts); /* for non-mtab systems */
|
||||
+
|
||||
+ /* for mtab create a new options list */
|
||||
+ mnt_optstr_append_option(&o, mnt_fs_get_vfs_options(fs), NULL);
|
||||
+ mnt_optstr_append_option(&o, nfs_opts, NULL);
|
||||
+ mnt_optstr_append_option(&o, mnt_fs_get_user_options(fs), NULL);
|
||||
+
|
||||
+ mnt_fs_set_options(fs, o);
|
||||
+ free(o);
|
||||
}
|
||||
|
||||
/*
|
@ -1,323 +0,0 @@
|
||||
commit 0e94118815e8ff9c1142117764ee3e6cddba0395
|
||||
Author: Chuck Lever <chuck.lever@oracle.com>
|
||||
Date: Fri Oct 1 15:04:20 2010 -0400
|
||||
|
||||
libnfs.a: Allow multiple RPC listeners to share listener port number
|
||||
|
||||
Normally, when "-p" is not specified on the mountd command line, the
|
||||
TI-RPC library chooses random port numbers for each listener. If a
|
||||
port number _is_ specified on the command line, all the listeners
|
||||
will get the same port number, so SO_REUSEADDR needs to be set on
|
||||
each socket.
|
||||
|
||||
Thus we can't let TI-RPC create the listener sockets for us in this
|
||||
case; we must create them ourselves and then set SO_REUSEADDR (and
|
||||
other socket options) by hand.
|
||||
|
||||
Different versions of the same RPC program have to share the same
|
||||
listener and SVCXPRT, so we have to cache xprts we create, and re-use
|
||||
them when additional requests for registration come from the
|
||||
application.
|
||||
|
||||
Though it doesn't look like it, this fix was "copied" from the legacy
|
||||
rpc_init() function. It's more complicated for TI-RPC, of course,
|
||||
since you can have an arbitrary number of listeners, not just two
|
||||
(one for AF_INET UDP and one for AF_INET TCP).
|
||||
|
||||
Fix for:
|
||||
|
||||
https://bugzilla.linux-nfs.org/show_bug.cgi?id=190
|
||||
|
||||
There have been no reports of problems with specifying statd's
|
||||
listener port, but I expect this is a problem for statd too.
|
||||
|
||||
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
|
||||
|
||||
diff --git a/support/nfs/svc_create.c b/support/nfs/svc_create.c
|
||||
index 59ba505..fdc4846 100644
|
||||
--- a/support/nfs/svc_create.c
|
||||
+++ b/support/nfs/svc_create.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <memory.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
+#include <errno.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
@@ -41,11 +42,68 @@
|
||||
#include "tcpwrapper.h"
|
||||
#endif
|
||||
|
||||
+#include "sockaddr.h"
|
||||
#include "rpcmisc.h"
|
||||
#include "xlog.h"
|
||||
|
||||
#ifdef HAVE_LIBTIRPC
|
||||
|
||||
+#define SVC_CREATE_XPRT_CACHE_SIZE (8)
|
||||
+static SVCXPRT *svc_create_xprt_cache[SVC_CREATE_XPRT_CACHE_SIZE] = { NULL, };
|
||||
+
|
||||
+/*
|
||||
+ * Cache an SVC xprt, in case there are more programs or versions to
|
||||
+ * register against it.
|
||||
+ */
|
||||
+static void
|
||||
+svc_create_cache_xprt(SVCXPRT *xprt)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ /* Check if we've already got this one... */
|
||||
+ for (i = 0; i < SVC_CREATE_XPRT_CACHE_SIZE; i++)
|
||||
+ if (svc_create_xprt_cache[i] == xprt)
|
||||
+ return;
|
||||
+
|
||||
+ /* No, we don't. Cache it. */
|
||||
+ for (i = 0; i < SVC_CREATE_XPRT_CACHE_SIZE; i++)
|
||||
+ if (svc_create_xprt_cache[i] == NULL) {
|
||||
+ svc_create_xprt_cache[i] = xprt;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ xlog(L_ERROR, "%s: Failed to cache an xprt", __func__);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Find a previously cached SVC xprt structure with the given bind address
|
||||
+ * and transport semantics.
|
||||
+ *
|
||||
+ * Returns pointer to a SVC xprt.
|
||||
+ *
|
||||
+ * If no matching SVC XPRT can be found, NULL is returned.
|
||||
+ */
|
||||
+static SVCXPRT *
|
||||
+svc_create_find_xprt(const struct sockaddr *bindaddr, const struct netconfig *nconf)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < SVC_CREATE_XPRT_CACHE_SIZE; i++) {
|
||||
+ SVCXPRT *xprt = svc_create_xprt_cache[i];
|
||||
+ struct sockaddr *sap;
|
||||
+
|
||||
+ if (xprt == NULL)
|
||||
+ continue;
|
||||
+ if (strcmp(nconf->nc_netid, xprt->xp_netid) != 0)
|
||||
+ continue;
|
||||
+ sap = (struct sockaddr *)xprt->xp_ltaddr.buf;
|
||||
+ if (!nfs_compare_sockaddr(bindaddr, sap))
|
||||
+ continue;
|
||||
+ return xprt;
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Set up an appropriate bind address, given @port and @nconf.
|
||||
*
|
||||
@@ -98,17 +156,112 @@ svc_create_bindaddr(struct netconfig *nconf, const uint16_t port)
|
||||
return ai;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Create a listener socket on a specific bindaddr, and set
|
||||
+ * special socket options to allow it to share the same port
|
||||
+ * as other listeners.
|
||||
+ *
|
||||
+ * Returns an open, bound, and possibly listening network
|
||||
+ * socket on success.
|
||||
+ *
|
||||
+ * Otherwise returns -1 if some error occurs.
|
||||
+ */
|
||||
+static int
|
||||
+svc_create_sock(const struct sockaddr *sap, socklen_t salen,
|
||||
+ struct netconfig *nconf)
|
||||
+{
|
||||
+ int fd, type, protocol;
|
||||
+ int one = 1;
|
||||
+
|
||||
+ switch(nconf->nc_semantics) {
|
||||
+ case NC_TPI_CLTS:
|
||||
+ type = SOCK_DGRAM;
|
||||
+ break;
|
||||
+ case NC_TPI_COTS_ORD:
|
||||
+ type = SOCK_STREAM;
|
||||
+ break;
|
||||
+ default:
|
||||
+ xlog(D_GENERAL, "%s: Unrecognized bind address semantics: %u",
|
||||
+ __func__, nconf->nc_semantics);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (strcmp(nconf->nc_proto, NC_UDP) == 0)
|
||||
+ protocol = (int)IPPROTO_UDP;
|
||||
+ else if (strcmp(nconf->nc_proto, NC_TCP) == 0)
|
||||
+ protocol = (int)IPPROTO_TCP;
|
||||
+ else {
|
||||
+ xlog(D_GENERAL, "%s: Unrecognized bind address protocol: %s",
|
||||
+ __func__, nconf->nc_proto);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ fd = socket((int)sap->sa_family, type, protocol);
|
||||
+ if (fd == -1) {
|
||||
+ xlog(L_ERROR, "Could not make a socket: (%d) %m",
|
||||
+ errno);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+#ifdef IPV6_SUPPORTED
|
||||
+ if (sap->sa_family == AF_INET6) {
|
||||
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
+ &one, sizeof(one)) == -1) {
|
||||
+ xlog(L_ERROR, "Failed to set IPV6_V6ONLY: (%d) %m",
|
||||
+ errno);
|
||||
+ (void)close(fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+#endif /* IPV6_SUPPORTED */
|
||||
+
|
||||
+ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
|
||||
+ &one, sizeof(one)) == -1) {
|
||||
+ xlog(L_ERROR, "Failed to set SO_REUSEADDR: (%d) %m",
|
||||
+ errno);
|
||||
+ (void)close(fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (bind(fd, sap, salen) == -1) {
|
||||
+ xlog(L_ERROR, "Could not bind socket: (%d) %m",
|
||||
+ errno);
|
||||
+ (void)close(fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (nconf->nc_semantics == NC_TPI_COTS_ORD)
|
||||
+ if (listen(fd, SOMAXCONN) == -1) {
|
||||
+ xlog(L_ERROR, "Could not listen on socket: (%d) %m",
|
||||
+ errno);
|
||||
+ (void)close(fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return fd;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * The simple case is allowing the TI-RPC library to create a
|
||||
+ * transport itself, given just the bind address and transport
|
||||
+ * semantics.
|
||||
+ *
|
||||
+ * The port is chosen at random by the library; we don't know
|
||||
+ * what it is. So the new xprt cannot be cached here.
|
||||
+ *
|
||||
+ * Returns the count of started listeners (one or zero).
|
||||
+ */
|
||||
static unsigned int
|
||||
-svc_create_nconf(const char *name, const rpcprog_t program,
|
||||
+svc_create_nconf_rand_port(const char *name, const rpcprog_t program,
|
||||
const rpcvers_t version,
|
||||
void (*dispatch)(struct svc_req *, SVCXPRT *),
|
||||
- const uint16_t port, struct netconfig *nconf)
|
||||
+ struct netconfig *nconf)
|
||||
{
|
||||
struct t_bind bindaddr;
|
||||
struct addrinfo *ai;
|
||||
SVCXPRT *xprt;
|
||||
|
||||
- ai = svc_create_bindaddr(nconf, port);
|
||||
+ ai = svc_create_bindaddr(nconf, 0);
|
||||
if (ai == NULL)
|
||||
return 0;
|
||||
|
||||
@@ -119,7 +272,7 @@ svc_create_nconf(const char *name, const rpcprog_t program,
|
||||
freeaddrinfo(ai);
|
||||
if (xprt == NULL) {
|
||||
xlog(D_GENERAL, "Failed to create listener xprt "
|
||||
- "(%s, %u, %s)", name, version, nconf->nc_netid);
|
||||
+ "(%s, %u, %s)", name, version, nconf->nc_netid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -133,6 +286,81 @@ svc_create_nconf(const char *name, const rpcprog_t program,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * If a port is specified on the command line, that port value will be
|
||||
+ * the same for all listeners created here. Create each listener socket
|
||||
+ * in advance and set SO_REUSEADDR, rather than allowing the RPC library
|
||||
+ * to create the listeners for us on a randomly chosen port (RPC_ANYFD).
|
||||
+ *
|
||||
+ * Also, to support multiple RPC versions on the same listener, register
|
||||
+ * any new versions on the same transport that is already handling other
|
||||
+ * versions on the same bindaddr and transport. To accomplish this,
|
||||
+ * cache previously created xprts on a list, and check that list before
|
||||
+ * creating a new socket for this [program, version].
|
||||
+ *
|
||||
+ * Returns the count of started listeners (one or zero).
|
||||
+ */
|
||||
+static unsigned int
|
||||
+svc_create_nconf_fixed_port(const char *name, const rpcprog_t program,
|
||||
+ const rpcvers_t version,
|
||||
+ void (*dispatch)(struct svc_req *, SVCXPRT *),
|
||||
+ const uint16_t port, struct netconfig *nconf)
|
||||
+{
|
||||
+ struct addrinfo *ai;
|
||||
+ SVCXPRT *xprt;
|
||||
+
|
||||
+ ai = svc_create_bindaddr(nconf, port);
|
||||
+ if (ai == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
+ xprt = svc_create_find_xprt(ai->ai_addr, nconf);
|
||||
+ if (xprt == NULL) {
|
||||
+ int fd;
|
||||
+
|
||||
+ fd = svc_create_sock(ai->ai_addr, ai->ai_addrlen, nconf);
|
||||
+ if (fd == -1)
|
||||
+ goto out_free;
|
||||
+
|
||||
+ xprt = svc_tli_create(fd, nconf, NULL, 0, 0);
|
||||
+ if (xprt == NULL) {
|
||||
+ xlog(D_GENERAL, "Failed to create listener xprt "
|
||||
+ "(%s, %u, %s)", name, version, nconf->nc_netid);
|
||||
+ (void)close(fd);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!svc_reg(xprt, program, version, dispatch, nconf)) {
|
||||
+ /* svc_reg(3) destroys @xprt in this case */
|
||||
+ xlog(D_GENERAL, "Failed to register (%s, %u, %s)",
|
||||
+ name, version, nconf->nc_netid);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+
|
||||
+ svc_create_cache_xprt(xprt);
|
||||
+
|
||||
+ freeaddrinfo(ai);
|
||||
+ return 1;
|
||||
+
|
||||
+out_free:
|
||||
+ freeaddrinfo(ai);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static unsigned int
|
||||
+svc_create_nconf(const char *name, const rpcprog_t program,
|
||||
+ const rpcvers_t version,
|
||||
+ void (*dispatch)(struct svc_req *, SVCXPRT *),
|
||||
+ const uint16_t port, struct netconfig *nconf)
|
||||
+{
|
||||
+ if (port != 0)
|
||||
+ return svc_create_nconf_fixed_port(name, program,
|
||||
+ version, dispatch, port, nconf);
|
||||
+
|
||||
+ return svc_create_nconf_rand_port(name, program,
|
||||
+ version, dispatch, nconf);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* nfs_svc_create - start up RPC svc listeners
|
||||
* @name: C string containing name of new service
|
@ -1,42 +0,0 @@
|
||||
commit 264ad7d77e7ebb5d83c0f02bcb1800b254cd5ccf
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Wed Oct 19 16:37:34 2011 -0400
|
||||
|
||||
rpcdebug: Add missing debug flags
|
||||
|
||||
This patch added the following debug flags:
|
||||
|
||||
fscache - enable FSCache debugging
|
||||
pnfs - enable general pNFS debugging
|
||||
pnfs_ld - enable pNFS layout debugging
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/support/include/nfs/debug.h b/support/include/nfs/debug.h
|
||||
index d391e91..dbec5ba 100644
|
||||
--- a/support/include/nfs/debug.h
|
||||
+++ b/support/include/nfs/debug.h
|
||||
@@ -76,6 +76,9 @@ enum {
|
||||
#define NFSDBG_CALLBACK 0x0100
|
||||
#define NFSDBG_CLIENT 0x0200
|
||||
#define NFSDBG_MOUNT 0x0400
|
||||
+#define NFSDBG_FSCACHE 0x0800
|
||||
+#define NFSDBG_PNFS 0x1000
|
||||
+#define NFSDBG_PNFS_LD 0x2000
|
||||
#define NFSDBG_ALL 0xFFFF
|
||||
|
||||
#endif /* _NFS_DEBUG_H */
|
||||
diff --git a/tools/rpcdebug/rpcdebug.c b/tools/rpcdebug/rpcdebug.c
|
||||
index 275a491..444616d 100644
|
||||
--- a/tools/rpcdebug/rpcdebug.c
|
||||
+++ b/tools/rpcdebug/rpcdebug.c
|
||||
@@ -167,6 +167,9 @@ static struct flagmap {
|
||||
FLAG(NFS, CALLBACK),
|
||||
FLAG(NFS, CLIENT),
|
||||
FLAG(NFS, MOUNT),
|
||||
+ FLAG(NFS, FSCACHE),
|
||||
+ FLAG(NFS, PNFS),
|
||||
+ FLAG(NFS, PNFS_LD),
|
||||
FLAG(NFS, ALL),
|
||||
|
||||
/* nfsd */
|
@ -1,168 +0,0 @@
|
||||
diff -up nfs-utils-1.3.1/support/include/nfslib.h.save nfs-utils-1.3.1/support/include/nfslib.h
|
||||
--- nfs-utils-1.3.1/support/include/nfslib.h.save 2014-11-13 13:36:10.054248000 -0500
|
||||
+++ nfs-utils-1.3.1/support/include/nfslib.h 2014-11-13 13:37:14.045142000 -0500
|
||||
@@ -174,6 +174,7 @@ void closeall(int min);
|
||||
|
||||
int svctcp_socket (u_long __number, int __reuse);
|
||||
int svcudp_socket (u_long __number);
|
||||
+int svcsock_nonblock (int __sock);
|
||||
|
||||
/* Misc shared code prototypes */
|
||||
size_t strlcat(char *, const char *, size_t);
|
||||
diff -up nfs-utils-1.3.1/support/nfs/rpcmisc.c.save nfs-utils-1.3.1/support/nfs/rpcmisc.c
|
||||
--- nfs-utils-1.3.1/support/nfs/rpcmisc.c.save 2014-11-13 13:36:19.386524000 -0500
|
||||
+++ nfs-utils-1.3.1/support/nfs/rpcmisc.c 2014-11-13 13:37:14.051143000 -0500
|
||||
@@ -104,7 +104,7 @@ makesock(int port, int proto)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- return sock;
|
||||
+ return svcsock_nonblock(sock);
|
||||
}
|
||||
|
||||
void
|
||||
diff -up nfs-utils-1.3.1/support/nfs/svc_create.c.save nfs-utils-1.3.1/support/nfs/svc_create.c
|
||||
--- nfs-utils-1.3.1/support/nfs/svc_create.c.save 2014-11-13 13:36:44.554269000 -0500
|
||||
+++ nfs-utils-1.3.1/support/nfs/svc_create.c 2014-11-13 13:37:29.571601000 -0500
|
||||
@@ -49,6 +49,8 @@
|
||||
|
||||
#ifdef HAVE_LIBTIRPC
|
||||
|
||||
+#include <rpc/rpc_com.h>
|
||||
+
|
||||
#define SVC_CREATE_XPRT_CACHE_SIZE (8)
|
||||
static SVCXPRT *svc_create_xprt_cache[SVC_CREATE_XPRT_CACHE_SIZE] = { NULL, };
|
||||
|
||||
@@ -277,6 +279,12 @@ svc_create_nconf_rand_port(const char *n
|
||||
"(%s, %u, %s)", name, version, nconf->nc_netid);
|
||||
return 0;
|
||||
}
|
||||
+ if (svcsock_nonblock(xprt->xp_fd) < 0) {
|
||||
+ /* close() already done by svcsock_nonblock() */
|
||||
+ xprt->xp_fd = RPC_ANYFD;
|
||||
+ SVC_DESTROY(xprt);
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
if (!svc_reg(xprt, program, version, dispatch, nconf)) {
|
||||
/* svc_reg(3) destroys @xprt in this case */
|
||||
@@ -332,6 +340,7 @@ svc_create_nconf_fixed_port(const char *
|
||||
int fd;
|
||||
|
||||
fd = svc_create_sock(ai->ai_addr, ai->ai_addrlen, nconf);
|
||||
+ fd = svcsock_nonblock(fd);
|
||||
if (fd == -1)
|
||||
goto out_free;
|
||||
|
||||
@@ -394,6 +403,7 @@ nfs_svc_create(char *name, const rpcprog
|
||||
const struct sigaction create_sigaction = {
|
||||
.sa_handler = SIG_IGN,
|
||||
};
|
||||
+ int maxrec = RPC_MAXDATASIZE;
|
||||
unsigned int visible, up, servport;
|
||||
struct netconfig *nconf;
|
||||
void *handlep;
|
||||
@@ -405,6 +415,20 @@ nfs_svc_create(char *name, const rpcprog
|
||||
*/
|
||||
(void)sigaction(SIGPIPE, &create_sigaction, NULL);
|
||||
|
||||
+ /*
|
||||
+ * Setting MAXREC also enables non-blocking mode for tcp connections.
|
||||
+ * This avoids DOS attacks by a client sending many requests but never
|
||||
+ * reading the reply:
|
||||
+ * - if a second request already is present for reading in the socket,
|
||||
+ * after the first request just was read, libtirpc will break the
|
||||
+ * connection. Thus an attacker can't simply send requests as fast as
|
||||
+ * he can without waiting for the response.
|
||||
+ * - if the write buffer of the socket is full, the next write() will
|
||||
+ * fail with EAGAIN. libtirpc will retry the write in a loop for max.
|
||||
+ * 2 seconds. If write still fails, the connection will be closed.
|
||||
+ */
|
||||
+ rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec);
|
||||
+
|
||||
handlep = setnetconfig();
|
||||
if (handlep == NULL) {
|
||||
xlog(L_ERROR, "Failed to access local netconfig database: %s",
|
||||
diff -up nfs-utils-1.3.1/support/nfs/svc_socket.c.save nfs-utils-1.3.1/support/nfs/svc_socket.c
|
||||
--- nfs-utils-1.3.1/support/nfs/svc_socket.c.save 2014-11-13 13:36:29.925836000 -0500
|
||||
+++ nfs-utils-1.3.1/support/nfs/svc_socket.c 2014-11-13 13:37:14.055142000 -0500
|
||||
@@ -76,6 +76,39 @@ int getservport(u_long number, const cha
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int
|
||||
+svcsock_nonblock(int sock)
|
||||
+{
|
||||
+ int flags;
|
||||
+
|
||||
+ if (sock < 0)
|
||||
+ return sock;
|
||||
+
|
||||
+ /* This socket might be shared among multiple processes
|
||||
+ * if mountd is run multi-threaded. So it is safest to
|
||||
+ * make it non-blocking, else all threads might wake
|
||||
+ * one will get the data, and the others will block
|
||||
+ * indefinitely.
|
||||
+ * In all cases, transaction on this socket are atomic
|
||||
+ * (accept for TCP, packet-read and packet-write for UDP)
|
||||
+ * so O_NONBLOCK will not confuse unprepared code causing
|
||||
+ * it to corrupt messages.
|
||||
+ * It generally safest to have O_NONBLOCK when doing an accept
|
||||
+ * as if we get a RST after the SYN and before accept runs,
|
||||
+ * we can block despite being told there was an acceptable
|
||||
+ * connection.
|
||||
+ */
|
||||
+ if ((flags = fcntl(sock, F_GETFL)) < 0)
|
||||
+ perror(_("svc_socket: can't get socket flags"));
|
||||
+ else if (fcntl(sock, F_SETFL, flags|O_NONBLOCK) < 0)
|
||||
+ perror(_("svc_socket: can't set socket flags"));
|
||||
+ else
|
||||
+ return sock;
|
||||
+
|
||||
+ (void) __close(sock);
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
svc_socket (u_long number, int type, int protocol, int reuse)
|
||||
{
|
||||
@@ -113,38 +146,7 @@ svc_socket (u_long number, int type, int
|
||||
sock = -1;
|
||||
}
|
||||
|
||||
- if (sock >= 0)
|
||||
- {
|
||||
- /* This socket might be shared among multiple processes
|
||||
- * if mountd is run multi-threaded. So it is safest to
|
||||
- * make it non-blocking, else all threads might wake
|
||||
- * one will get the data, and the others will block
|
||||
- * indefinitely.
|
||||
- * In all cases, transaction on this socket are atomic
|
||||
- * (accept for TCP, packet-read and packet-write for UDP)
|
||||
- * so O_NONBLOCK will not confuse unprepared code causing
|
||||
- * it to corrupt messages.
|
||||
- * It generally safest to have O_NONBLOCK when doing an accept
|
||||
- * as if we get a RST after the SYN and before accept runs,
|
||||
- * we can block despite being told there was an acceptable
|
||||
- * connection.
|
||||
- */
|
||||
- int flags;
|
||||
- if ((flags = fcntl(sock, F_GETFL)) < 0)
|
||||
- {
|
||||
- perror (_("svc_socket: can't get socket flags"));
|
||||
- (void) __close (sock);
|
||||
- sock = -1;
|
||||
- }
|
||||
- else if (fcntl(sock, F_SETFL, flags|O_NONBLOCK) < 0)
|
||||
- {
|
||||
- perror (_("svc_socket: can't set socket flags"));
|
||||
- (void) __close (sock);
|
||||
- sock = -1;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return sock;
|
||||
+ return svcsock_nonblock(sock);
|
||||
}
|
||||
|
||||
/*
|
@ -1,25 +0,0 @@
|
||||
commit 17a3e5bffb7110d46de1bf42b64b90713ff5ea50
|
||||
Author: Chris Mayo <aklhfex@gmail.com>
|
||||
Date: Sun Feb 1 12:03:46 2015 -0500
|
||||
|
||||
statd: Fix test for foreground mode
|
||||
|
||||
daemon_init parameter has the opposite sense
|
||||
to code removed in commit 7addf9d
|
||||
|
||||
Signed-off-by: Chris Mayo <aklhfex@gmail.com>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/utils/statd/statd.c b/utils/statd/statd.c
|
||||
index 60ce6d1..2b7a167 100644
|
||||
--- a/utils/statd/statd.c
|
||||
+++ b/utils/statd/statd.c
|
||||
@@ -393,7 +393,7 @@ int main (int argc, char **argv)
|
||||
simulator (--argc, ++argv); /* simulator() does exit() */
|
||||
#endif
|
||||
|
||||
- daemon_init(!(run_mode & MODE_NODAEMON));
|
||||
+ daemon_init((run_mode & MODE_NODAEMON));
|
||||
|
||||
if (run_mode & MODE_LOG_STDERR) {
|
||||
xlog_syslog(0);
|
@ -1,35 +0,0 @@
|
||||
From 650633d4e956dc6b628da30c868e39fba76a0b29 Mon Sep 17 00:00:00 2001
|
||||
From: Steve Dickson <steved@redhat.com>
|
||||
Date: Mon, 9 Feb 2015 08:54:54 -0500
|
||||
Subject: [PATCH] rpc-statd-notify: Don't wait for the network to come up
|
||||
|
||||
rpc-statd-notify only needs to wait for the network
|
||||
interface to be configured not to be connected since
|
||||
it forks into background and will wait 15mins for
|
||||
the network to come up.
|
||||
|
||||
This decrease boot times when networks are not
|
||||
and will not be connected.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
Reported-By: Eric Work <work.eric@gmail.com>
|
||||
---
|
||||
systemd/rpc-statd-notify.service | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/systemd/rpc-statd-notify.service b/systemd/rpc-statd-notify.service
|
||||
index 941afe5..a655445 100644
|
||||
--- a/systemd/rpc-statd-notify.service
|
||||
+++ b/systemd/rpc-statd-notify.service
|
||||
@@ -1,7 +1,7 @@
|
||||
[Unit]
|
||||
Description=Notify NFS peers of a restart
|
||||
Requires=network-online.target
|
||||
-After=network-online.target nss-lookup.target
|
||||
+After=network.target nss-lookup.target
|
||||
|
||||
# if we run an nfs server, it needs to be running before we
|
||||
# tell clients that it has restarted.
|
||||
--
|
||||
2.1.0
|
||||
|
Loading…
Reference in New Issue
Block a user