-VFORK_SPAWN
-
-# btrfs on Linux is copy-on-write (COW) by default. As of Linux 5.7,
-# this still leads to fragmentation for SQLite and Xapian files where
-# random I/O happens, so we disable COW just for SQLite files and Xapian
-# directories. Disabling COW disables checksumming, so we only do this
-# for regeneratable files, and not canonical git storage (git doesn't
-# checksum refs, only data under $GIT_DIR/objects).
-my $set_nodatacow = $^O eq 'linux' ? <<'SET_NODATACOW' : '';
-#include <sys/ioctl.h>
-#include <sys/vfs.h>
-#include <linux/magic.h>
-#include <linux/fs.h>
-#include <dirent.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-
-void nodatacow_fd(int fd)
-{
- struct statfs buf;
- int val = 0;
-
- if (fstatfs(fd, &buf) < 0) {
- fprintf(stderr, "fstatfs: %s\\n", strerror(errno));
- return;
- }
-
- /* only btrfs is known to have this problem, so skip for non-btrfs */
- if (buf.f_type != BTRFS_SUPER_MAGIC)
- return;
-
- if (ioctl(fd, FS_IOC_GETFLAGS, &val) < 0) {
- fprintf(stderr, "FS_IOC_GET_FLAGS: %s\\n", strerror(errno));
- return;
- }
- val |= FS_NOCOW_FL;
- if (ioctl(fd, FS_IOC_SETFLAGS, &val) < 0)
- fprintf(stderr, "FS_IOC_SET_FLAGS: %s\\n", strerror(errno));
-}
-
-void nodatacow_dir(const char *dir)
-{
- DIR *dh = opendir(dir);
- int fd;
-
- if (!dh) croak("opendir(%s): %s", dir, strerror(errno));
- fd = dirfd(dh);
- if (fd >= 0)
- nodatacow_fd(fd);
- /* ENOTSUP probably won't happen under Linux... */
- closedir(dh);
-}
-SET_NODATACOW
-
-# last choice for script/lei, 1st choice for lei internals
-# compatible with PublicInbox::CmdIPC4
-my $fdpass = <<'FDPASS';
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <sys/socket.h>