1
0
mirror of https://git.freebsd.org/ports.git synced 2026-06-02 11:08:52 +00:00

sysutils/mpifileutils: New port: MPI parallel file utilities for high scalability on large filesystems

FileUtils provides a library (libmfu) and a suite of MPI-parallel file
utilities such as dcp (parallel copy), dcmp (compare), ddup (duplicate
finder), dfind, dtar/dbz2, dchmod, and more. Designed for high
scalability on large filesystems.
https://hpc.github.io/mpifileutils/
https://github.com/hpc/mpifileutils/

Pull request to upstream repo with local patches:
https://github.com/hpc/mpifileutils/pull/664

PR:		291679
Sponsored by:	UNIS Labs
Co-authored-by:	Vladimir Druzenko <vvd@FreeBSD.org>
This commit is contained in:
Generic Rikka
2026-04-15 16:23:56 +03:00
committed by Vladimir Druzenko
parent d57b770a7c
commit 5f283cddd7
27 changed files with 663 additions and 0 deletions
+1
View File
@@ -755,6 +755,7 @@
SUBDIR += moreutils
SUBDIR += most
SUBDIR += mountsmb2
SUBDIR += mpifileutils
SUBDIR += mping
SUBDIR += mprocs
SUBDIR += mptd
+39
View File
@@ -0,0 +1,39 @@
PORTNAME= mpifileutils
DISTVERSIONPREFIX= v
DISTVERSION= 0.12
CATEGORIES= sysutils parallel
MASTER_SITES= https://github.com/hpc/${PORTNAME}/releases/download/v${DISTVERSION}/
MAINTAINER= rikka.goering@outlook.de
COMMENT= MPI-based parallel file utilities (dcp, dcmp, ddup, dtar, etc.)
WWW= https://hpc.github.io/mpifileutils/
LICENSE= BSD3CLAUSE
LICENSE_FILE= ${WRKSRC}/${PORTNAME}/LICENSE
LIB_DEPENDS= libcircle.so:devel/libcircle \
libdtcmp.so:devel/dtcmp
USES= cmake localbase:ldflags mpi:openmpi pkgconfig ssl tar:tgz
USE_LDCONFIG= yes
CMAKE_ARGS= -DCMAKE_C_COMPILER=${MPICC} \
-DCMAKE_CXX_COMPILER=${MPICXX}
CMAKE_OFF= ENABLE_GPFS ENABLE_LUSTRE ENABLE_XATTRS
LDFLAGS+= -lcircle -ldtcmp
EXTRACT_AFTER_ARGS= --exclude dtcmp \
--exclude libcircle \
--exclude lwgrp \
--no-same-owner --no-same-permissions
PORTDOCS= AUTHORS CONTRIBUTING.md DAOS-Support.md NOTICE README.md
OPTIONS_DEFINE= DOCS
do-install-DOCS-on:
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/${PORTNAME}/|} ${STAGEDIR}${DOCSDIR}
.include <bsd.port.mk>
+3
View File
@@ -0,0 +1,3 @@
TIMESTAMP = 1775666666
SHA256 (mpifileutils-v0.12.tgz) = 7a5ed469be579bc0e9480febc127991467bc71aa37ded083265b859245300206
SIZE (mpifileutils-v0.12.tgz) = 580255
@@ -0,0 +1,20 @@
--- CMakeLists.txt.orig 2025-04-17 19:28:45 UTC
+++ CMakeLists.txt
@@ -298,9 +298,6 @@ LIST(APPEND libmfu_srcs
mpifileutils/src/common/mfu_progress.c
mpifileutils/src/common/mfu_util.c
mpifileutils/src/common/strmap.c
- ${lwgrp_srcs}
- ${dtcmp_srcs}
- ${libcircle_srcs}
)
IF(ENABLE_LIBARCHIVE)
LIST(APPEND libmfu_srcs
@@ -328,7 +325,3 @@ INSTALL(TARGETS mfu-static DESTINATION ${CMAKE_INSTALL
# some projects require a "make install" command to work,
# so define at least a basic INSTALL function
-INSTALL(FILES lwgrp/README lwgrp/LICENSE.TXT DESTINATION share/lwgrp)
-INSTALL(FILES dtcmp/README.md dtcmp/LICENSE.TXT DESTINATION share/dtcmp)
-INSTALL(FILES libcircle/COPYING DESTINATION share/libcircle)
-INSTALL(FILES mpifileutils/LICENSE mpifileutils/NOTICE DESTINATION share/mpifileutils)
@@ -0,0 +1,15 @@
--- mpifileutils/src/common/mfu_bz2.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_bz2.c
@@ -6,7 +6,12 @@
#include <errno.h>
/* for statfs */
+#if defined(__linux__)
#include <sys/vfs.h>
+#elif defined(__FreeBSD__)
+#include <sys/param.h>
+#include <sys/mount.h>
+#endif
/* for LL_SUPER_MAGIC */
#if LUSTRE_SUPPORT
@@ -0,0 +1,10 @@
--- mpifileutils/src/common/mfu_bz2.h.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_bz2.h
@@ -1,6 +1,7 @@
#ifndef MFU_BZ2_H
#define MFU_BZ2_H
+int mfu_compress_bz2_static(const char* src_name, const char* dst_name, int b_size);
int mfu_compress_bz2(const char* src_name, const char* dst_name, int b_size);
int mfu_decompress_bz2(const char* src_name, const char* dst_name);
@@ -0,0 +1,24 @@
--- mpifileutils/src/common/mfu_bz2_static.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_bz2_static.c
@@ -5,7 +5,9 @@
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
+#if defined(__linux__)
#include <sys/sysinfo.h>
+#endif
#include <string.h>
#include <sys/time.h>
#include <sys/resource.h>
@@ -22,6 +24,11 @@
#include "libcircle.h"
#include "mfu.h"
#include "mfu_bz2.h"
+
+/* FreeBSD does not define O_LARGEFILE; large file support is implicit. */
+#ifndef O_LARGEFILE
+#define O_LARGEFILE 0
+#endif
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
@@ -0,0 +1,28 @@
--- mpifileutils/src/common/mfu_compress_bz2_libcircle.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_compress_bz2_libcircle.c
@@ -1,3 +1,20 @@
+#if !defined(__linux__)
+/*
+ * Non-Linux fallback:
+ * The libcircle-based implementation relies on sysinfo(2) / <sys/sysinfo.h>.
+ * FreeBSD doesn't provide that API, so fall back to the portable static path.
+ */
+#include "mfu.h"
+#include "mfu_bz2.h"
+
+int mfu_compress_bz2_libcircle(const char* src, const char* dst, int b_size, ssize_t opts_memory)
+{
+ (void) opts_memory;
+ return mfu_compress_bz2_static(src, dst, b_size);
+}
+
+#else /* __linux__ */
+
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
@@ -531,3 +548,4 @@ int mfu_compress_bz2_libcircle(const char* src, const
return rc;
}
+#endif /* __linux__ */
@@ -0,0 +1,12 @@
--- mpifileutils/src/common/mfu_decompress_bz2_libcircle.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_decompress_bz2_libcircle.c
@@ -5,7 +5,9 @@
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
+#if defined(__linux__)
#include <sys/sysinfo.h>
+#endif
#include <string.h>
#include <sys/time.h>
#include <sys/resource.h>
@@ -0,0 +1,44 @@
--- mpifileutils/src/common/mfu_flist.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_flist.c
@@ -35,8 +35,13 @@
#include <sys/ioctl.h>
#include <sys/param.h>
+/* Linux-specific file flag ioctls live in <linux/fs.h>;
+ * not available (and not used) on FreeBSD.
+ */
+#ifdef __linux__
#include <linux/fs.h>
#include <linux/fiemap.h>
+#endif
#include <libgen.h> /* dirname */
#include "libcircle.h"
@@ -845,7 +850,7 @@ uint64_t mfu_flist_file_get_perm(mfu_flist bflist, uin
return mode & (S_IRWXU | S_IRWXG | S_IRWXO);
}
-#if DCOPY_USE_XATTRS
+#if defined(__linux__) && DCOPY_USE_XATTRS
void *mfu_flist_file_get_acl(mfu_flist bflist, uint64_t idx, ssize_t *acl_size, char *type)
{
flist_t* flist = (flist_t*) bflist;
@@ -886,7 +891,18 @@ void *mfu_flist_file_get_acl(mfu_flist bflist, uint64_
return val;
}
+#else
+void *mfu_flist_file_get_acl(mfu_flist bflist, uint64_t idx, ssize_t *acl_size, char *type)
+{
+ (void)bflist;
+ (void)idx;
+ (void)type;
+ if (acl_size != NULL)
+ *acl_size = 0;
+ return NULL;
+}
#endif
+
uint64_t mfu_flist_file_get_uid(mfu_flist bflist, uint64_t idx)
{
@@ -0,0 +1,11 @@
--- mpifileutils/src/common/mfu_flist.h.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_flist.h
@@ -44,7 +44,7 @@ extern "C" {
#include <stdbool.h>
#include "mpi.h"
-#if DCOPY_USE_XATTRS
+#if defined(__linux__) && DCOPY_USE_XATTRS
#include <sys/xattr.h>
/*
* Newer versions of attr deprecated attr/xattr.h which defines ENOATTR as a
@@ -0,0 +1,32 @@
--- mpifileutils/src/common/mfu_flist_archive.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_flist_archive.c
@@ -27,6 +27,10 @@
#include <string.h>
#include <getopt.h>
+#ifndef O_LARGEFILE
+#define O_LARGEFILE 0
+#endif
+
/* gettimeofday */
#include <sys/time.h>
@@ -5255,6 +5259,7 @@ static int extract_xattrs(
r = archive_entry_xattr_next(entry, &xname, &xval, &xsize);
if (r == ARCHIVE_OK) {
/* successfully extracted xattr, now try to set it */
+#if defined(__linux__)
int set_rc = setxattr(path, xname, xval, xsize, 0);
if (set_rc == -1) {
MFU_LOG(MFU_LOG_ERR, "failed to setxattr '%s' on '%s' errno=%d %s",
@@ -5263,6 +5268,10 @@ static int extract_xattrs(
rc = MFU_FAILURE;
/* don't break in case other xattrs work */
}
+#else
+ /* FreeBSD: implement Linux setxattr() equivalent using extattr(2) */
+ (void)path; (void)xname; (void)xval; (void)xsize;
+#endif
} else {
/* failed to read xattr */
MFU_LOG(MFU_LOG_ERR, "failed to extract xattr for '%s' of entry %llu at offset %llu",
@@ -0,0 +1,56 @@
--- mpifileutils/src/common/mfu_flist_copy.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_flist_copy.c
@@ -39,8 +39,10 @@
#include <sys/ioctl.h>
#include <sys/param.h>
+#ifdef __linux__
#include <linux/fs.h>
#include <linux/fiemap.h>
+#endif
/* define PRI64 */
#include <inttypes.h>
@@ -69,8 +71,10 @@
#endif
#ifdef HPSS_SUPPORT
+#ifdef __linux__
#include <linux/hpssfs.h>
#endif
+#endif
/****************************************
* Define types
@@ -1864,6 +1868,7 @@ static int mfu_copy_file_normal(
return 0;
}
+#ifdef __linux__
static int mfu_copy_file_fiemap(
const char* src,
const char* dest,
@@ -2053,6 +2058,7 @@ fail_normal_copy:
fail_normal_copy:
return -1;
}
+#endif
static int mfu_copy_file(
const char* src,
@@ -2084,6 +2090,7 @@ static int mfu_copy_file(
return -1;
}
+#ifdef __linux__
if (copy_opts->sparse) {
bool normal_copy_required;
ret = mfu_copy_file_fiemap(src, dest, offset, length, file_size,
@@ -2093,6 +2100,7 @@ static int mfu_copy_file(
return ret;
}
}
+#endif
ret = mfu_copy_file_normal(src, dest, offset, length, file_size,
copy_opts, mfu_src_file, mfu_dst_file);
@@ -0,0 +1,41 @@
--- mpifileutils/src/common/mfu_flist_walk.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_flist_walk.c
@@ -186,8 +186,10 @@ static void walk_getdents_process_dir(const char* dir,
int flags = O_RDONLY | O_DIRECTORY;
char buf[BUF_SIZE];
+#ifdef __linux__
if (NO_ATIME)
flags |= O_NOATIME;
+#endif
/* TODO: may need to try these functions multiple times */
mfu_file_t* mfu_file = *CURRENT_PFILE;
@@ -205,7 +207,17 @@ static void walk_getdents_process_dir(const char* dir,
/* Read all directory entries */
while (1) {
/* execute system call to get block of directory entries */
- int nread = syscall(SYS_getdents, mfu_file->fd, buf, (int) BUF_SIZE);
+ int nread;
+#ifdef __linux__
+ /* On Linux, call the raw getdents syscall as before */
+ nread = syscall(SYS_getdents, mfu_file->fd, buf, (int) BUF_SIZE);
+#else
+ /*
+ * On FreeBSD and other non-Linux systems, use the getdents(2)
+ * libc wrapper instead of the Linux-specific SYS_getdents.
+ */
+ nread = getdents(mfu_file->fd, (char *)buf, (size_t)BUF_SIZE);
+#endif
if (nread == -1) {
MFU_LOG(MFU_LOG_ERR, "syscall to getdents failed when reading `%s' (errno=%d %s)", dir, errno, strerror(errno));
WALK_RESULT = -1;
@@ -767,7 +779,7 @@ void mfu_flist_stat(
/* check whether we should skip this item */
if (skip_fn != NULL && skip_fn(name, skip_args)) {
/* skip this file, don't include it in new list */
- MFU_LOG(MFU_LOG_INFO, "skip %s");
+ MFU_LOG(MFU_LOG_INFO, "skip %s", name);
continue;
}
@@ -0,0 +1,15 @@
--- mpifileutils/src/common/mfu_io.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_io.c
@@ -21,6 +21,12 @@
#include "mfu.h"
#include "mfu_errors.h"
+/* FreeBSD does not provide lstat64, only lstat. Map it accordingly. */
+#ifdef __FreeBSD__
+#undef lstat64
+#define lstat64(path, buf) lstat((path), (struct stat *)(buf))
+#endif
+
#define MFU_IO_TRIES (5)
#define MFU_IO_USLEEP (100)
@@ -0,0 +1,20 @@
--- mpifileutils/src/common/mfu_io.h.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_io.h
@@ -42,12 +42,15 @@ extern "C" {
#include "mfu_param_path.h"
+#ifdef __FreeBSD__
+#define stat64 stat
+#define lstat64 lstat
+#endif
+
/* Intent is to wrap all POSIX I/O routines used by mfu tools. May
* abort on fatal conditions to avoid checking condition at every call.
* May also automatically retry on things like EINTR. */
-/* TODO: fix this */
-/* do this to avoid warning about undefined stat64 struct */
struct stat64;
/*****************************
@@ -0,0 +1,40 @@
--- mpifileutils/src/common/mfu_param_path.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_param_path.c
@@ -1,5 +1,23 @@
#define _GNU_SOURCE
+/* Ensure POSIX faccessat(2) AT_* constants are visible on FreeBSD */
+#ifndef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 200809L
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Fallbacks (in case headers hide these behind visibility macros) */
+#ifndef AT_FDCWD
+#define AT_FDCWD (-100)
+#endif
+#ifndef AT_SYMLINK_NOFOLLOW
+#define AT_SYMLINK_NOFOLLOW 0
+#endif
+
#include "mfu.h"
#include "mpi.h"
@@ -8,6 +26,13 @@
#include <string.h>
#include <stdarg.h>
#include <errno.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifndef S_ISLNK
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif
#include <fcntl.h>
#include <unistd.h>
@@ -0,0 +1,46 @@
--- mpifileutils/src/common/mfu_util.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_util.c
@@ -1,6 +1,11 @@
/* to get nsec fields in stat structure */
#define _GNU_SOURCE
+#if defined(__FreeBSD__)
+#include <sys/types.h>
+#include <sys/param.h>
+#endif
+
#include "mfu.h"
#include "mpi.h"
#include "dtcmp.h"
@@ -14,12 +19,21 @@
#include <errno.h>
#include <limits.h>
-#include <sys/types.h>
#include <sys/stat.h>
+#include <fcntl.h>
#include <unistd.h>
+#if defined(__linux__)
#include <sys/vfs.h>
+#elif defined(__FreeBSD__)
+#include <sys/param.h>
+#include <sys/mount.h>
+#endif
+#ifndef S_ISLNK
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif
+
#ifndef ULLONG_MAX
#define ULLONG_MAX (__LONG_LONG_MAX__ * 2UL + 1UL)
#endif
@@ -939,7 +953,7 @@ int mfu_compare_contents(
/* check for write error */
if (bytes_written < 0) {
MFU_LOG(MFU_LOG_ERR, "Failed to write `%s' at offset %llx (errno=%d %s)",
- dst_name, (unsigned long long)off + n, strerror(errno));
+ dst_name, (unsigned long long)off + n, errno, strerror(errno));
rc = -1;
break;
}
@@ -0,0 +1,13 @@
--- mpifileutils/src/common/mfu_util.h.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/common/mfu_util.h
@@ -9,6 +9,10 @@ extern "C" {
#ifndef MFU_UTIL_H
#define MFU_UTIL_H
+#ifndef O_NOATIME
+#define O_NOATIME 0
+#endif
+
#include <stdlib.h>
#include <stdarg.h>
#include <stdint.h>
@@ -0,0 +1,73 @@
--- mpifileutils/src/dbcast/dbcast.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/dbcast/dbcast.c
@@ -16,7 +16,12 @@
#include <string.h>
#include <getopt.h>
+#ifdef __linux__
#include <sys/vfs.h>
+#elif defined(__FreeBSD__)
+#include <sys/param.h>
+#include <sys/mount.h>
+#endif
// mmap and friends for shared memory
#include <sys/mman.h>
@@ -32,6 +37,14 @@
* and send data to each other. The writer flow controls these worker
* processes with messages. */
+#ifndef HOST_NAME_MAX
+# ifdef MAXHOSTNAMELEN
+# define HOST_NAME_MAX MAXHOSTNAMELEN
+# else
+# define HOST_NAME_MAX 256
+# endif
+#endif
+
#define GCS_SUCCESS (0)
static int gcs_shm_file_key = MPI_KEYVAL_INVALID;
@@ -803,7 +816,7 @@ int main (int argc, char *argv[])
/* check whether we have space to write the file */
if (file_size > free_size) {
/* not enough space for file */
- MFU_LOG(MFU_LOG_ERR, "Insufficient space for file `%s` filesize=%llu free=%llu", out_file_path, file_size, free_size);
+ MFU_LOG(MFU_LOG_ERR, "Insufficient space for file `%s` filesize=%llu free=%llu", out_file_path, (unsigned long long)file_size, (unsigned long long)free_size);
write_error = 1;
}
}
@@ -1118,14 +1131,14 @@ if (node_rank == 0) {
* a file by the same name but of different size than a previous copy */
errno = 0;
if (mfu_truncate(out_file_path, (off_t) file_size) != 0) {
- MFU_LOG(MFU_LOG_ERR, "Failed to truncate file `%s`", out_file_path, strerror(errno));
+ MFU_LOG(MFU_LOG_ERR, "Failed to truncate file `%s`: %s", out_file_path, strerror(errno));
write_error = 1;
}
/* have every writer update file mode */
errno = 0;
if (mfu_chmod(out_file_path, (mode_t) mode) != 0) {
- MFU_LOG(MFU_LOG_ERR, "Failed to chmod file `%s`", out_file_path, strerror(errno));
+ MFU_LOG(MFU_LOG_ERR, "Failed to chmod file `%s`: %s", out_file_path, strerror(errno));
write_error = 1;
}
@@ -1133,14 +1146,14 @@ if (node_rank == 0) {
if (write_error) {
errno = 0;
if (mfu_unlink(out_file_path) != 0) {
- MFU_LOG(MFU_LOG_ERR, "Failed to unlink file `%s`", out_file_path, strerror(errno));
+ MFU_LOG(MFU_LOG_ERR, "Failed to unlink file `%s`: %s", out_file_path, strerror(errno));
}
}
} else {
/* readers close input file */
errno = 0;
if (mfu_close(in_file_path, in_file) != 0) {
- MFU_LOG(MFU_LOG_ERR, "Failed to close file `%s`", in_file_path, strerror(errno));
+ MFU_LOG(MFU_LOG_ERR, "Failed to close file `%s`: %s", in_file_path, strerror(errno));
}
}
@@ -0,0 +1,12 @@
--- mpifileutils/src/dbz2/dbz2.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/dbz2/dbz2.c
@@ -1,7 +1,9 @@
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
+#if defined(__linux__)
#include <sys/sysinfo.h>
+#endif
#include <string.h>
#include <sys/time.h>
#include <sys/resource.h>
@@ -0,0 +1,15 @@
--- mpifileutils/src/dcmp/dcmp.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/dcmp/dcmp.c
@@ -4,7 +4,12 @@
#include <stdlib.h>
#include <mpi.h>
#include <libcircle.h>
+#ifdef __linux__
#include <linux/limits.h>
+#elif defined(__FreeBSD__)
+#include <limits.h>
+#include <sys/param.h>
+#endif
#include <libgen.h>
#include <errno.h>
#include <dtcmp.h>
@@ -0,0 +1,13 @@
--- mpifileutils/src/dcp1/cleanup.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/dcp1/cleanup.c
@@ -51,8 +51,8 @@ static void DCOPY_truncate_file(DCOPY_operation_t* op,
* Try the recursive file before file-to-file. The cast below requires us
* to have a maximum file_size of 2^63, not 2^64.
*/
- if(truncate64(dest_path_recursive, op->file_size) < 0) {
- if(truncate64(dest_path_file_to_file, op->file_size) < 0) {
+ if(mfu_truncate(dest_path_recursive, op->file_size) < 0) {
+ if(mfu_truncate(dest_path_file_to_file, op->file_size) < 0) {
MFU_LOG(MFU_LOG_ERR, "Failed to truncate destination file: %s (errno=%d %s)",
dest_path_recursive, errno, strerror(errno));
@@ -0,0 +1,11 @@
--- mpifileutils/src/dcp1/common.h.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/dcp1/common.h
@@ -44,7 +44,7 @@
#include <unistd.h>
#include <utime.h>
-#if DCOPY_USE_XATTRS
+#if defined(__linux__) && DCOPY_USE_XATTRS
#include <sys/xattr.h>
/*
* Newer versions of attr deprecated attr/xattr.h which defines ENOATTR as a
@@ -0,0 +1,22 @@
--- mpifileutils/src/dsync/dsync.c.orig 2025-02-19 22:20:52 UTC
+++ mpifileutils/src/dsync/dsync.c
@@ -24,7 +24,7 @@
#include <stdlib.h>
#include <mpi.h>
#include <libcircle.h>
-#include <linux/limits.h>
+#include <limits.h>
#include <libgen.h>
#include <errno.h>
#include <dtcmp.h>
@@ -32,6 +32,10 @@
#define _XOPEN_SOURCE 600
#include <fcntl.h>
#include <string.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
/* for bool type, true/false macros */
#include <stdbool.h>
+4
View File
@@ -0,0 +1,4 @@
mpiFileUtils provides a library (libmfu) and a suite of MPI-parallel file
utilities such as dcp (parallel copy), dcmp (compare), ddup (duplicate finder),
dfind, dtar/dbz2, dchmod, and more. Designed for high scalability on large
filesystems.
+43
View File
@@ -0,0 +1,43 @@
bin/dbcast
bin/dbz2
bin/dchmod
bin/dcmp
bin/dcp
bin/dcp1
bin/ddup
bin/dfilemaker
bin/dfind
bin/dreln
bin/drm
bin/dstripe
bin/dsync
bin/dtar
bin/dwalk
include/mfu.h
include/mfu_bz2.h
include/mfu_errors.h
include/mfu_flist.h
include/mfu_flist_internal.h
include/mfu_io.h
include/mfu_param_path.h
include/mfu_path.h
include/mfu_pred.h
include/mfu_progress.h
include/mfu_util.h
lib/libmfu.a
lib/libmfu.so
lib/libmfu.so.4.0.0
share/man/man1/dbcast.1.gz
share/man/man1/dbz2.1.gz
share/man/man1/dchmod.1.gz
share/man/man1/dcmp.1.gz
share/man/man1/dcp.1.gz
share/man/man1/ddup.1.gz
share/man/man1/dfilemaker.1.gz
share/man/man1/dfind.1.gz
share/man/man1/dreln.1.gz
share/man/man1/drm.1.gz
share/man/man1/dstripe.1.gz
share/man/man1/dsync.1.gz
share/man/man1/dtar.1.gz
share/man/man1/dwalk.1.gz