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
[email protected]
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,
_______________________________________________
Gluster-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/gluster-devel

Reply via email to