diff --git a/pkgs/os-specific/linux/musl/default.nix b/pkgs/os-specific/linux/musl/default.nix index b0758437da9d..d2dbfea63ab6 100644 --- a/pkgs/os-specific/linux/musl/default.nix +++ b/pkgs/os-specific/linux/musl/default.nix @@ -67,6 +67,9 @@ stdenv.mkDerivation rec { ./0001-in-pthread_mutex_trylock-EBUSY-out-more-directly-whe.patch ./0002-in-pthread_mutex_timedlock-avoid-repeatedly-reading-.patch ./0003-fix-namespace-violation-for-c11-mutex-functions.patch + # name_to_handle_at + ./name-to-handle-at.patch + ./max-handle-sz-for-name-to-handle-at.patch ]; preConfigure = '' configureFlagsArray+=("--syslibdir=$out/lib") diff --git a/pkgs/os-specific/linux/musl/max-handle-sz-for-name-to-handle-at.patch b/pkgs/os-specific/linux/musl/max-handle-sz-for-name-to-handle-at.patch new file mode 100644 index 000000000000..aa00b4619f86 --- /dev/null +++ b/pkgs/os-specific/linux/musl/max-handle-sz-for-name-to-handle-at.patch @@ -0,0 +1,26 @@ +From 7d7f44253f2d8cfd0a7adf9f918d88aa24d4e012 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Thu, 13 Sep 2018 07:00:05 -0700 +Subject: [PATCH] define MAX_HANDLE_SZ for use with name_to_handle_at + +MAX_HANDLE_SZ is described in name_to_handle_at() to contain maximum +expected size for a file handle +--- + include/fcntl.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/fcntl.h b/include/fcntl.h +index 99b21759..4d91338b 100644 +--- a/include/fcntl.h ++++ b/include/fcntl.h +@@ -166,6 +166,7 @@ struct f_owner_ex { + }; + #define FALLOC_FL_KEEP_SIZE 1 + #define FALLOC_FL_PUNCH_HOLE 2 ++#define MAX_HANDLE_SZ 128 + #define SYNC_FILE_RANGE_WAIT_BEFORE 1 + #define SYNC_FILE_RANGE_WRITE 2 + #define SYNC_FILE_RANGE_WAIT_AFTER 4 +-- +2.19.0 + diff --git a/pkgs/os-specific/linux/musl/name-to-handle-at.patch b/pkgs/os-specific/linux/musl/name-to-handle-at.patch new file mode 100644 index 000000000000..10cd8a9947c8 --- /dev/null +++ b/pkgs/os-specific/linux/musl/name-to-handle-at.patch @@ -0,0 +1,71 @@ +From 3e14bbcd1979376b188bfabb816ff828608fb5d7 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 12 Sep 2018 18:02:11 -0700 +Subject: [PATCH] wireup linux/name_to_handle_at and name_to_handle_at syscalls + +--- + include/fcntl.h | 7 +++++++ + src/linux/name_to_handle_at.c | 10 ++++++++++ + src/linux/open_by_handle_at.c | 8 ++++++++ + 3 files changed, 25 insertions(+) + create mode 100644 src/linux/name_to_handle_at.c + create mode 100644 src/linux/open_by_handle_at.c + +diff --git a/include/fcntl.h b/include/fcntl.h +index 6d8edcd1..99b21759 100644 +--- a/include/fcntl.h ++++ b/include/fcntl.h +@@ -155,6 +155,11 @@ int lockf(int, int, off_t); + #define F_OWNER_PID 1 + #define F_OWNER_PGRP 2 + #define F_OWNER_GID 2 ++struct file_handle { ++ unsigned handle_bytes; ++ int handle_type; ++ unsigned char f_handle[]; ++}; + struct f_owner_ex { + int type; + pid_t pid; +@@ -170,6 +175,8 @@ struct f_owner_ex { + #define SPLICE_F_GIFT 8 + int fallocate(int, int, off_t, off_t); + #define fallocate64 fallocate ++int name_to_handle_at(int, const char *, struct file_handle *, int *, int); ++int open_by_handle_at(int, struct file_handle *, int); + ssize_t readahead(int, off_t, size_t); + int sync_file_range(int, off_t, off_t, unsigned); + ssize_t vmsplice(int, const struct iovec *, size_t, unsigned); +diff --git a/src/linux/name_to_handle_at.c b/src/linux/name_to_handle_at.c +new file mode 100644 +index 00000000..cd4075bd +--- /dev/null ++++ b/src/linux/name_to_handle_at.c +@@ -0,0 +1,10 @@ ++#define _GNU_SOURCE ++#include ++#include "syscall.h" ++ ++int name_to_handle_at(int dirfd, const char *pathname, ++ struct file_handle *handle, int *mount_id, int flags) ++{ ++ return syscall(SYS_name_to_handle_at, dirfd, ++ pathname, handle, mount_id, flags); ++} +diff --git a/src/linux/open_by_handle_at.c b/src/linux/open_by_handle_at.c +new file mode 100644 +index 00000000..1c9b6a2b +--- /dev/null ++++ b/src/linux/open_by_handle_at.c +@@ -0,0 +1,8 @@ ++#define _GNU_SOURCE ++#include ++#include "syscall.h" ++ ++int open_by_handle_at(int mount_fd, struct file_handle *handle, int flags) ++{ ++ return syscall(SYS_open_by_handle_at, mount_fd, handle, flags); ++} +-- +2.19.0 +