diff options
-rw-r--r-- | contrib/apple/daemon.c | 92 | ||||
-rw-r--r-- | contrib/apple/daemon.h | 20 | ||||
-rw-r--r-- | glusterfsd/src/Makefile.am | 6 | ||||
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 16 | ||||
-rw-r--r-- | libglusterfs/src/logging.h | 12 | ||||
-rw-r--r-- | xlators/cluster/unify/src/unify.c | 6 | ||||
-rw-r--r-- | xlators/debug/trace/src/trace.c | 12 | ||||
-rw-r--r-- | xlators/storage/posix/src/posix.c | 4 |
8 files changed, 153 insertions, 15 deletions
diff --git a/contrib/apple/daemon.c b/contrib/apple/daemon.c new file mode 100644 index 00000000000..9389201a1af --- /dev/null +++ b/contrib/apple/daemon.c @@ -0,0 +1,92 @@ +/* + Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> + + Based on http://www.opensource.apple.com/source/Libc/Libc-583/gen/FreeBSD/daemon.c + */ + +/*- + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <errno.h> +#include <fcntl.h> +#include <paths.h> +#include <signal.h> +#include <unistd.h> + +int +os_daemon(nochdir, noclose) + int nochdir, noclose; +{ + struct sigaction osa, sa; + int fd; + pid_t newgrp; + int oerrno; + int osa_ok; + + /* A SIGHUP may be thrown when the parent exits below. */ + sigemptyset(&sa.sa_mask); + sa.sa_handler = SIG_IGN; + sa.sa_flags = 0; + osa_ok = sigaction(SIGHUP, &sa, &osa); + + switch (fork()) { + case -1: + return (-1); + case 0: + break; + default: + _exit(0); + } + + newgrp = setsid(); + oerrno = errno; + if (osa_ok != -1) + sigaction(SIGHUP, &osa, NULL); + + if (newgrp == -1) { + errno = oerrno; + return (-1); + } + + if (!nochdir) + (void)chdir("/"); + + if (!noclose && (fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { + (void)dup2(fd, STDIN_FILENO); + (void)dup2(fd, STDOUT_FILENO); + (void)dup2(fd, STDERR_FILENO); + if (fd > 2) + (void)close(fd); + } + return (0); +} diff --git a/contrib/apple/daemon.h b/contrib/apple/daemon.h new file mode 100644 index 00000000000..7a2824b6a47 --- /dev/null +++ b/contrib/apple/daemon.h @@ -0,0 +1,20 @@ +/* + Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> + This file is part of GlusterFS. + + GlusterFS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + GlusterFS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see + <http://www.gnu.org/licenses/>. +*/ + +int os_daemon(int nochdir, int noclose); diff --git a/glusterfsd/src/Makefile.am b/glusterfsd/src/Makefile.am index 060917930de..38151fd5cfd 100644 --- a/glusterfsd/src/Makefile.am +++ b/glusterfsd/src/Makefile.am @@ -1,6 +1,9 @@ sbin_PROGRAMS = glusterfsd glusterfsd_SOURCES = glusterfsd.c fetch-spec.c +if GF_DARWIN_HOST_OS +glusterfsd_SOURCES += $(CONTRIBDIR)/apple/daemon.c +endif glusterfsd_LDADD = $(top_builddir)/libglusterfs/src/libglusterfs.la $(GF_LDADD) glusterfsd_LDFLAGS = $(GF_LDFLAGS) $(GF_GLUSTERFS_LDFLAGS) noinst_HEADERS = glusterfsd.h @@ -8,6 +11,9 @@ noinst_HEADERS = glusterfsd.h AM_CFLAGS = -fPIC -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D$(GF_HOST_OS)\ -I$(top_srcdir)/libglusterfs/src -DDATADIR=\"$(localstatedir)\" \ -DCONFDIR=\"$(sysconfdir)/glusterfs\" $(GF_GLUSTERFS_CFLAGS) +if GF_DARWIN_HOST_OS +AM_CFLAGS += -I$(CONTRIBDIR)/apple +endif CLEANFILES = diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index afd9cafa655..8ffa3ac461b 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -73,6 +73,13 @@ #include <fnmatch.h> +#ifdef GF_DARWIN_HOST_OS +#include "daemon.h" +#else +#define os_daemon(u, v) daemon (u, v) +#endif + + /* using argp for command line parsing */ static char gf_doc[] = ""; static char argp_doc[] = "--volfile-server=SERVER [MOUNT-POINT]\n" \ @@ -207,7 +214,7 @@ gf_daemon (int *pipe_fd) /*child continues*/ close (pipe_fd[0]); - if (daemon (0, 0) == -1) { + if (os_daemon (0, 0) == -1) { gf_log ("glusterfs", GF_LOG_ERROR, "unable to run in daemon mode: %s", strerror (errno)); @@ -1063,7 +1070,12 @@ zr_build_process_uuid () localtime_r (&tv.tv_sec, &now); strftime (now_str, 32, "%Y/%m/%d-%H:%M:%S", &now); - snprintf (tmp_str, 1024, "%s-%d-%s:%ld", + snprintf (tmp_str, 1024, "%s-%d-%s:%" +#ifdef GF_DARWIN_HOST_OS + PRId32, +#else + "ld", +#endif hostname, getpid(), now_str, tv.tv_usec); return gf_strdup (tmp_str); diff --git a/libglusterfs/src/logging.h b/libglusterfs/src/logging.h index 3c197c01588..8c78a3ee1d6 100644 --- a/libglusterfs/src/logging.h +++ b/libglusterfs/src/logging.h @@ -30,11 +30,17 @@ #include <stdio.h> #include <stdarg.h> -#define GF_PRI_FSBLK PRId64 +#ifdef GF_DARWIN_HOST_OS +#define GF_PRI_FSBLK "u" +#define GF_PRI_DEV PRId32 +#define GF_PRI_NLINK PRIu16 +#else +#define GF_PRI_FSBLK PRIu64 +#define GF_PRI_DEV PRIu64 +#define GF_PRI_NLINK PRIu32 +#endif #define GF_PRI_BLKSIZE PRId32 #define GF_PRI_SIZET "zu" -#define GF_PRI_NLINK PRId32 -#define GF_PRI_DEV PRId64 typedef enum { GF_LOG_NONE, diff --git a/xlators/cluster/unify/src/unify.c b/xlators/cluster/unify/src/unify.c index d1fe847bc9b..e50d3274f3b 100644 --- a/xlators/cluster/unify/src/unify.c +++ b/xlators/cluster/unify/src/unify.c @@ -1117,7 +1117,8 @@ unify_open_lookup_cbk (call_frame_t *frame, int32_t op_errno, inode_t *inode, struct iatt *buf, - dict_t *dict) + dict_t *dict, + struct iatt *postparent) { int32_t callcnt = 0; int16_t index = 0; @@ -1209,7 +1210,8 @@ unify_open_readlink_cbk (call_frame_t *frame, xlator_t *this, int32_t op_ret, int32_t op_errno, - const char *path) + const char *path, + struct iatt *sbuf) { int16_t index = 0; unify_private_t *priv = this->private; diff --git a/xlators/debug/trace/src/trace.c b/xlators/debug/trace/src/trace.c index aa9d33f3ea2..20ac6dbb57a 100644 --- a/xlators/debug/trace/src/trace.c +++ b/xlators/debug/trace/src/trace.c @@ -171,9 +171,9 @@ trace_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, localtime ((time_t *)&buf->ia_ctime)); gf_log (this->name, GF_LOG_NORMAL, - "%"PRId64": (op_ret=%d, buf {ia_gen=%"GF_PRI_DEV", " + "%"PRId64": (op_ret=%d, buf {ia_gen=%"PRIu64", " "ia_ino=%"PRIu64", st_mode=%o, ia_nlink=%"GF_PRI_NLINK", " - "ia_uid=%d, ia_gid=%d, ia_rdev=%"GF_PRI_DEV", ia_size=%"PRId64 + "ia_uid=%d, ia_gid=%d, ia_rdev=%"PRIu64", ia_size=%"PRId64 ", ia_blksize=%"GF_PRI_BLKSIZE", ia_blocks=%"PRId64", " "ia_atime=%s, ia_mtime=%s, ia_ctime=%s})", frame->root->unique, op_ret, buf->ia_gen, buf->ia_ino, @@ -212,9 +212,9 @@ trace_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this, localtime ((time_t *)&buf->ia_ctime)); gf_log (this->name, GF_LOG_NORMAL, - "%"PRId64": (op_ret=%d, op_errno=%d, *buf {ia_gen=%"GF_PRI_DEV", " + "%"PRId64": (op_ret=%d, op_errno=%d, *buf {ia_gen=%"PRIu64", " "ia_ino=%"PRIu64", st_mode=%o, ia_nlink=%"GF_PRI_NLINK", " - "ia_uid=%d, ia_gid=%d, ia_rdev=%"GF_PRI_DEV", " + "ia_uid=%d, ia_gid=%d, ia_rdev=%"PRIu64", " "ia_size=%"PRId64", ia_blksize=%"GF_PRI_BLKSIZE", " "ia_blocks=%"PRId64", ia_atime=%s, ia_mtime=%s, ia_ctime=%s})", frame->root->unique, op_ret, op_errno, buf->ia_gen, buf->ia_ino, @@ -1052,9 +1052,9 @@ trace_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, localtime ((time_t *)&buf->ia_ctime)); gf_log (this->name, GF_LOG_NORMAL, - "%"PRId64": (op_ret=%d, *buf {ia_gen=%"GF_PRI_DEV", " + "%"PRId64": (op_ret=%d, *buf {ia_gen=%"PRIu64", " "ia_ino=%"PRIu64", st_mode=%o, ia_nlink=%"GF_PRI_NLINK", " - "ia_uid=%d, ia_gid=%d, ia_rdev=%"GF_PRI_DEV", ia_size=%"PRId64", " + "ia_uid=%d, ia_gid=%d, ia_rdev=%"PRIu64", ia_size=%"PRId64", " "ia_blksize=%"GF_PRI_BLKSIZE", ia_blocks=%"PRId64", ia_atime=%s, " "ia_mtime=%s, ia_ctime=%s})", frame->root->unique, op_ret, buf->ia_gen, buf->ia_ino, diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 22e9fcecb23..e9a8fc88692 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -273,7 +273,7 @@ posix_lstat_with_gen (xlator_t *this, const char *path, struct iatt *stbuf_p) } #ifndef GF_LINUX_HOST_OS - if (stbuf.ia_type != IA_IFDIR && stbuf.ia_type != IA_IFREG) { + if (!IA_ISDIR (stbuf.ia_type) && !IA_ISREG (stbuf.ia_type)) { stbuf.ia_gen = (typeof(stbuf.ia_gen))stbuf.ia_mtime; if (stbuf_p) *stbuf_p = stbuf; @@ -344,7 +344,7 @@ posix_fstat_with_gen (xlator_t *this, int fd, struct iatt *stbuf_p) } #ifndef GF_LINUX_HOST_OS - if (stbuf.ia_type != IA_IFDIR && stbuf.ia_type != IA_IFREG) { + if (!IA_ISDIR (stbuf.ia_type) && !IA_ISREG (stbuf.ia_type)) { stbuf.ia_gen = (typeof(stbuf.ia_gen))stbuf.ia_mtime; return 0; } |