Hello Thank you everyone for integrating my patches for NetBSD support. Attached is a second round of patches. * af.patch Makes sure glusterfsd listen on the same address family as glusterd does. * netbsd-buildfix.patch Adds an #include to fix the build (missing sigemptyset/sigaddset) * netbsd-extattr.patch Make sure .attribute extended attribute backing store for NetBSD's UFS1 filesystem is not distributed in glusterfs volume (that hurts!) * o_directory.patch On some systems, O_DIRECTORY is unused and we #define it as 0, hence ((flags & O_DIRECTORY) == O_DIRECTORY) always evaluate to true. Use (flags & O_DIRECTORY) instead. Every diff is against todays' git. -- Emmanuel Dreyfus manu@xxxxxxxxxx
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index c06b193..b371274 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -91,6 +91,50 @@ glusterd_unset_lock_owner (uuid_t owner) return 0; } +static const char * +glusterd_listener_family_name(void) +{ + xlator_t *this = NULL; + glusterd_conf_t *conf = NULL; + rpcsvc_listener_t *listener = NULL; + struct sockaddr_storage ss; + + this = THIS; + GF_ASSERT (this); + conf = this->private; + GF_ASSERT (conf); + GF_ASSERT (conf->rpc); + + list_for_each_entry (listener, &conf->rpc->listeners, list) + break; /* grab first one */ + + GF_ASSERT (listener->trans); + + if (rpc_transport_get_myaddr(listener->trans, NULL, 0, + &ss, sizeof(ss)) != 0) { + gf_log ("glusterd", GF_LOG_ERROR, + "rpc_transport_get_myname failed: %s", + strerror(errno)); + return NULL; + } + + switch (ss.ss_family) { + case AF_INET: + return "inet"; + break; + case AF_INET6: + return "inet6"; + break; + default: + gf_log ("glusterd", GF_LOG_ERROR, + "unknown address family %d", + ss.ss_family); + break; + } + + return NULL; +} + gf_boolean_t glusterd_is_loopback_localhost (const struct sockaddr *sa, char *hostname) { @@ -1032,6 +1076,7 @@ glusterd_volume_start_glusterfs (glusterd_volinfo_t *volinfo, FILE *file = NULL; gf_boolean_t is_locked = _gf_false; char socketpath[PATH_MAX] = {0}; + const char *family_name; GF_ASSERT (volinfo); GF_ASSERT (brickinfo); @@ -1135,6 +1180,14 @@ glusterd_volume_start_glusterfs (glusterd_volinfo_t *volinfo, runner_argprintf (&runner, "%s-server.listen-port=%d", volinfo->volname, port); + if ((family_name = glusterd_listener_family_name()) != NULL) { + runner_add_arg (&runner, "--xlator-option"); + runner_argprintf (&runner, + "%s-server.transport.address-family=%s", + volinfo->volname, family_name); + } + + runner_log (&runner, "", GF_LOG_DEBUG, "Starting GlusterFS"); ret = runner_run (&runner);
diff --git a/libglusterfs/src/run.c b/libglusterfs/src/run.c index 4160120..fceb7c7 100644 --- a/libglusterfs/src/run.c +++ b/libglusterfs/src/run.c @@ -30,6 +30,7 @@ #include <fcntl.h> #include <dirent.h> #include <assert.h> +#include <signal.h> #include <sys/wait.h> #ifdef RUN_STANDALONE
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 95926bb..7ad2c11 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -4116,6 +4116,19 @@ posix_do_readdir (call_frame_t *frame, xlator_t *this, if ((!strcmp(real_path, base_path)) && (!strcmp(entry->d_name, GF_REPLICATE_TRASH_DIR))) continue; +#ifdef __NetBSD__ + /* + * NetBSD with UFS1 backend uses backing files for + * extended attributes. They can be found in a + * .attribute file located at the root of the filesystem + * We hide it to glusterfs clients, since chaos will occur + * when the cluster/dht xlator decides to distribute + * exended attribute backing file accross storage servers. + */ + if ((!strcmp(real_path, base_path)) + && (!strcmp(entry->d_name, ".attribute"))) + continue; +#endif /* __NetBSD__ */ if ((!strcmp (real_path, base_path)) && (!strncmp (GF_HIDDEN_PATH, entry->d_name,
diff --git a/xlators/performance/quick-read/src/quick-read.c b/xlators/performance/quick-read/src/quick-read.c index d19fa2c..da87a60 100644 --- a/xlators/performance/quick-read/src/quick-read.c +++ b/xlators/performance/quick-read/src/quick-read.c @@ -729,7 +729,7 @@ qr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, } UNLOCK (&table->lock); - if (content_cached && ((flags & O_DIRECTORY) == O_DIRECTORY)) { + if (content_cached && (flags & O_DIRECTORY)) { op_ret = -1; op_errno = ENOTDIR; gf_log (this->name, GF_LOG_WARNING,