From 5dec51bd56b86f9f480cfff76a0779eb92d9b3c8 Mon Sep 17 00:00:00 2001 From: torben Date: Thu, 5 Nov 2015 15:46:17 +0100 Subject: Rename dracut modules folder. --- builder/build-initramfs.sh | 20 +- .../dnbd3-qcow2-rootfs/binaries/busybox/busybox | Bin 504912 -> 0 bytes builder/dnbd3-qcow2-rootfs/binaries/dnbd3 | 1 - .../dnbd3-qcow2-rootfs/binaries/nbd/.nbd.ko.cmd | 1 - .../dnbd3-qcow2-rootfs/binaries/nbd/.nbd.mod.o.cmd | 595 ---------- builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.o.cmd | 1145 -------------------- .../binaries/nbd/.tmp_versions/nbd.mod | 2 - builder/dnbd3-qcow2-rootfs/binaries/nbd/Makefile | 15 - .../dnbd3-qcow2-rootfs/binaries/nbd/Module.symvers | 0 .../dnbd3-qcow2-rootfs/binaries/nbd/modules.order | 1 - builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.c | 1136 ------------------- builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.ko | Bin 36992 -> 0 bytes builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.c | 105 -- builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.o | Bin 7592 -> 0 bytes builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.o | Bin 32344 -> 0 bytes .../systemd-preserve-process-marker.c | 33 - builder/dnbd3-qcow2-rootfs/debugging-tools/endless | Bin 6752 -> 0 bytes .../dnbd3-qcow2-rootfs/debugging-tools/endless.c | 10 - .../debugging-tools/network.functions | 23 - .../debugging-tools/setup-network.sh | 84 -- .../hooks/cmdline/enable-sysrq.sh | 2 - .../hooks/cmdline/prepare-network-kcl-parameter.sh | 36 - .../cmdline/set-dracut-environment-variables.sh | 5 - .../hooks/mount/mount-root-device.sh | 1 - .../hooks/pre-mount/fetch-config.sh | 39 - .../hooks/pre-mount/mount-qcow.sh | 49 - .../hooks/pre-mount/prepare-root-partition.sh | 42 - .../hooks/pre-pivot/mount-tmp.sh | 40 - .../hooks/pre-udev/load-custom-kernel-modules.sh | 32 - .../hooks/pre-udev/setup-loopback-device.sh | 1 - builder/dnbd3-qcow2-rootfs/module-setup.sh | 79 -- builder/dnbd3-qcow2-rootfs/readme.md | 472 -------- builder/dnbd3-qcow2-rootfs/scripts/prepare-disks | 211 ---- builder/dnbd3-qcow2-rootfs/scripts/setup-qcow2 | 137 --- builder/dnbd3-qcow2-rootfs/scripts/utils.sh | 95 -- .../dnbd3-qcow2-rootfs/udev/70-openslx-disk.rules | 7 - builder/dnbd3-rootfs/binaries/busybox/busybox | Bin 0 -> 504912 bytes builder/dnbd3-rootfs/binaries/dnbd3 | 1 + builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd | 1 + builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd | 595 ++++++++++ builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd | 1145 ++++++++++++++++++++ .../binaries/nbd/.tmp_versions/nbd.mod | 2 + builder/dnbd3-rootfs/binaries/nbd/Makefile | 15 + builder/dnbd3-rootfs/binaries/nbd/Module.symvers | 0 builder/dnbd3-rootfs/binaries/nbd/modules.order | 1 + builder/dnbd3-rootfs/binaries/nbd/nbd.c | 1136 +++++++++++++++++++ builder/dnbd3-rootfs/binaries/nbd/nbd.ko | Bin 0 -> 36992 bytes builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c | 105 ++ builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o | Bin 0 -> 7592 bytes builder/dnbd3-rootfs/binaries/nbd/nbd.o | Bin 0 -> 32344 bytes .../systemd-preserve-process-marker.c | 33 + builder/dnbd3-rootfs/debugging-tools/endless | Bin 0 -> 6752 bytes builder/dnbd3-rootfs/debugging-tools/endless.c | 10 + .../dnbd3-rootfs/debugging-tools/network.functions | 23 + .../dnbd3-rootfs/debugging-tools/setup-network.sh | 84 ++ builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh | 2 + .../hooks/cmdline/prepare-network-kcl-parameter.sh | 36 + .../cmdline/set-dracut-environment-variables.sh | 5 + .../dnbd3-rootfs/hooks/mount/mount-root-device.sh | 1 + .../dnbd3-rootfs/hooks/pre-mount/fetch-config.sh | 39 + builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh | 49 + .../hooks/pre-mount/prepare-root-partition.sh | 42 + builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh | 40 + .../hooks/pre-udev/load-custom-kernel-modules.sh | 32 + .../hooks/pre-udev/setup-loopback-device.sh | 1 + builder/dnbd3-rootfs/module-setup.sh | 79 ++ builder/dnbd3-rootfs/readme.md | 472 ++++++++ builder/dnbd3-rootfs/scripts/prepare-disks | 211 ++++ builder/dnbd3-rootfs/scripts/setup-qcow2 | 137 +++ builder/dnbd3-rootfs/scripts/utils.sh | 99 ++ builder/dnbd3-rootfs/udev/70-openslx-disk.rules | 7 + 71 files changed, 4412 insertions(+), 4410 deletions(-) delete mode 100755 builder/dnbd3-qcow2-rootfs/binaries/busybox/busybox delete mode 160000 builder/dnbd3-qcow2-rootfs/binaries/dnbd3 delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.ko.cmd delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.mod.o.cmd delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.o.cmd delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/.tmp_versions/nbd.mod delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/Makefile delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/Module.symvers delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/modules.order delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.c delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.ko delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.c delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.o delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.o delete mode 100644 builder/dnbd3-qcow2-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c delete mode 100755 builder/dnbd3-qcow2-rootfs/debugging-tools/endless delete mode 100644 builder/dnbd3-qcow2-rootfs/debugging-tools/endless.c delete mode 100644 builder/dnbd3-qcow2-rootfs/debugging-tools/network.functions delete mode 100644 builder/dnbd3-qcow2-rootfs/debugging-tools/setup-network.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/cmdline/enable-sysrq.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/cmdline/set-dracut-environment-variables.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/mount/mount-root-device.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/pre-mount/fetch-config.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/pre-mount/mount-qcow.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/pre-mount/prepare-root-partition.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/pre-pivot/mount-tmp.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/hooks/pre-udev/setup-loopback-device.sh delete mode 100755 builder/dnbd3-qcow2-rootfs/module-setup.sh delete mode 100644 builder/dnbd3-qcow2-rootfs/readme.md delete mode 100755 builder/dnbd3-qcow2-rootfs/scripts/prepare-disks delete mode 100755 builder/dnbd3-qcow2-rootfs/scripts/setup-qcow2 delete mode 100644 builder/dnbd3-qcow2-rootfs/scripts/utils.sh delete mode 100644 builder/dnbd3-qcow2-rootfs/udev/70-openslx-disk.rules create mode 100755 builder/dnbd3-rootfs/binaries/busybox/busybox create mode 160000 builder/dnbd3-rootfs/binaries/dnbd3 create mode 100644 builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd create mode 100644 builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd create mode 100644 builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd create mode 100644 builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod create mode 100644 builder/dnbd3-rootfs/binaries/nbd/Makefile create mode 100644 builder/dnbd3-rootfs/binaries/nbd/Module.symvers create mode 100644 builder/dnbd3-rootfs/binaries/nbd/modules.order create mode 100644 builder/dnbd3-rootfs/binaries/nbd/nbd.c create mode 100644 builder/dnbd3-rootfs/binaries/nbd/nbd.ko create mode 100644 builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c create mode 100644 builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o create mode 100644 builder/dnbd3-rootfs/binaries/nbd/nbd.o create mode 100644 builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c create mode 100755 builder/dnbd3-rootfs/debugging-tools/endless create mode 100644 builder/dnbd3-rootfs/debugging-tools/endless.c create mode 100644 builder/dnbd3-rootfs/debugging-tools/network.functions create mode 100644 builder/dnbd3-rootfs/debugging-tools/setup-network.sh create mode 100755 builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh create mode 100755 builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh create mode 100755 builder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh create mode 100755 builder/dnbd3-rootfs/hooks/mount/mount-root-device.sh create mode 100755 builder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh create mode 100755 builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh create mode 100755 builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh create mode 100755 builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh create mode 100755 builder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh create mode 100755 builder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh create mode 100755 builder/dnbd3-rootfs/module-setup.sh create mode 100644 builder/dnbd3-rootfs/readme.md create mode 100755 builder/dnbd3-rootfs/scripts/prepare-disks create mode 100755 builder/dnbd3-rootfs/scripts/setup-qcow2 create mode 100644 builder/dnbd3-rootfs/scripts/utils.sh create mode 100644 builder/dnbd3-rootfs/udev/70-openslx-disk.rules (limited to 'builder') diff --git a/builder/build-initramfs.sh b/builder/build-initramfs.sh index f10e9586..8687f3cb 100755 --- a/builder/build-initramfs.sh +++ b/builder/build-initramfs.sh @@ -52,6 +52,8 @@ # as file name) for lines containing a match to the given # PATTERN. By default, grep prints the matching lines. +source dnbd3-qcow2-rootfs + __NAME__='build_initramfs' # endregion @@ -75,9 +77,6 @@ function build_initramfs() { local dependencies=(bash cpio git test shift echo mktemp cat rm sed \ gzip curl tar grep make cmake) "$_SCOPE" _DEPENDENCIES="${dependencies[*]}" - "$_SCOPE" _KERNEL_MODULE_DIRECTORY="builder/dnbd3-qcow2-rootfs/kernel_modules/" - "$_SCOPE" _STANDARD_OUTPUT=/dev/null - "$_SCOPE" _ERROR_OUTPUT=/dev/null fi # endregion @@ -219,18 +218,17 @@ EOF # region controller if [[ "$0" == *"${__NAME__}.sh" ]]; then - build_initramfs_perform_dependency_check "${_DEPENDENCIES[*]}" || \ - build_initramfs_log 'error' 'Satisfying main dependencies failed.' + utils_dependency_check "${_DEPENDENCIES[*]}" || \ + utils_log 'error' 'Satisfying main dependencies failed.' build_initramfs_command_line_interface "$@" || return $? - build_initramfs_log 'Checking dracut.' && \ + utils_log 'Checking dracut.' && \ if ! [[ -d ./dracut ]]; then - build_initramfs_log "Dracut isn't available yet loading it." && \ - build_initramfs_initialize_dracut + utils_log "Dracut isn't available yet loading it." && \ + utils_initialize_dracut fi - build_initramfs_log 'Build initramfs.' && \ - build_initramfs_log \ - 'Copy dnbd3 qcow2 plugin into dracut modules folder.' && \ + utils_log 'Build initramfs.' && \ + utils_log 'Copy dnbd3 qcow2 plugin into dracut modules folder.' && \ cp --recursive builder/dnbd3-qcow2-rootfs/ \ dracut/modules.d/90dndb3-qcow2-rootfs \ 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ diff --git a/builder/dnbd3-qcow2-rootfs/binaries/busybox/busybox b/builder/dnbd3-qcow2-rootfs/binaries/busybox/busybox deleted file mode 100755 index 7eceacf7..00000000 Binary files a/builder/dnbd3-qcow2-rootfs/binaries/busybox/busybox and /dev/null differ diff --git a/builder/dnbd3-qcow2-rootfs/binaries/dnbd3 b/builder/dnbd3-qcow2-rootfs/binaries/dnbd3 deleted file mode 160000 index c3c05085..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/dnbd3 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c3c050851dc866f2311d33a262ed81af8c57ce22 diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.ko.cmd b/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.ko.cmd deleted file mode 100644 index 17386f08..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.ko.cmd +++ /dev/null @@ -1 +0,0 @@ -cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko := ld -r -m elf_x86_64 -T ./scripts/module-common.lds --build-id -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.mod.o.cmd b/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.mod.o.cmd deleted file mode 100644 index 1248ea8a..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.mod.o.cmd +++ /dev/null @@ -1,595 +0,0 @@ -cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := gcc -Wp,-MD,/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.nbd.mod.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(nbd.mod)" -D"KBUILD_MODNAME=KBUILD_STR(nbd)" -DMODULE -c -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.c - -source_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.c - -deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := \ - $(wildcard include/config/module/unload.h) \ - include/linux/module.h \ - $(wildcard include/config/modules.h) \ - $(wildcard include/config/sysfs.h) \ - $(wildcard include/config/unused/symbols.h) \ - $(wildcard include/config/module/sig.h) \ - $(wildcard include/config/modules/tree/lookup.h) \ - $(wildcard include/config/generic/bug.h) \ - $(wildcard include/config/kallsyms.h) \ - $(wildcard include/config/smp.h) \ - $(wildcard include/config/tracepoints.h) \ - $(wildcard include/config/tracing.h) \ - $(wildcard include/config/event/tracing.h) \ - $(wildcard include/config/ftrace/mcount/record.h) \ - $(wildcard include/config/livepatch.h) \ - $(wildcard include/config/constructors.h) \ - $(wildcard include/config/debug/set/module/ronx.h) \ - include/linux/list.h \ - $(wildcard include/config/debug/list.h) \ - include/linux/types.h \ - $(wildcard include/config/uid16.h) \ - $(wildcard include/config/lbdaf.h) \ - $(wildcard include/config/arch/dma/addr/t/64bit.h) \ - $(wildcard include/config/phys/addr/t/64bit.h) \ - $(wildcard include/config/64bit.h) \ - include/uapi/linux/types.h \ - arch/x86/include/uapi/asm/types.h \ - include/uapi/asm-generic/types.h \ - include/asm-generic/int-ll64.h \ - include/uapi/asm-generic/int-ll64.h \ - arch/x86/include/uapi/asm/bitsperlong.h \ - include/asm-generic/bitsperlong.h \ - include/uapi/asm-generic/bitsperlong.h \ - include/uapi/linux/posix_types.h \ - include/linux/stddef.h \ - include/uapi/linux/stddef.h \ - include/linux/compiler.h \ - $(wildcard include/config/sparse/rcu/pointer.h) \ - $(wildcard include/config/trace/branch/profiling.h) \ - $(wildcard include/config/profile/all/branches.h) \ - $(wildcard include/config/enable/must/check.h) \ - $(wildcard include/config/enable/warn/deprecated.h) \ - $(wildcard include/config/kprobes.h) \ - include/linux/compiler-gcc.h \ - $(wildcard include/config/arch/supports/optimized/inlining.h) \ - $(wildcard include/config/optimize/inlining.h) \ - $(wildcard include/config/gcov/kernel.h) \ - $(wildcard include/config/arch/use/builtin/bswap.h) \ - arch/x86/include/asm/posix_types.h \ - $(wildcard include/config/x86/32.h) \ - arch/x86/include/uapi/asm/posix_types_64.h \ - include/uapi/asm-generic/posix_types.h \ - include/linux/poison.h \ - $(wildcard include/config/illegal/pointer/value.h) \ - include/uapi/linux/const.h \ - include/linux/kernel.h \ - $(wildcard include/config/preempt/voluntary.h) \ - $(wildcard include/config/debug/atomic/sleep.h) \ - $(wildcard include/config/mmu.h) \ - $(wildcard include/config/prove/locking.h) \ - $(wildcard include/config/panic/timeout.h) \ - /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include/stdarg.h \ - include/linux/linkage.h \ - include/linux/stringify.h \ - include/linux/export.h \ - $(wildcard include/config/have/underscore/symbol/prefix.h) \ - $(wildcard include/config/modversions.h) \ - arch/x86/include/asm/linkage.h \ - $(wildcard include/config/x86/64.h) \ - $(wildcard include/config/x86/alignment/16.h) \ - include/linux/bitops.h \ - arch/x86/include/asm/bitops.h \ - $(wildcard include/config/x86/cmov.h) \ - arch/x86/include/asm/alternative.h \ - $(wildcard include/config/paravirt.h) \ - arch/x86/include/asm/asm.h \ - arch/x86/include/asm/ptrace.h \ - $(wildcard include/config/x86/debugctlmsr.h) \ - arch/x86/include/asm/segment.h \ - $(wildcard include/config/cc/stackprotector.h) \ - $(wildcard include/config/x86/32/lazy/gs.h) \ - arch/x86/include/asm/cache.h \ - $(wildcard include/config/x86/l1/cache/shift.h) \ - $(wildcard include/config/x86/internode/cache/shift.h) \ - $(wildcard include/config/x86/vsmp.h) \ - arch/x86/include/asm/page_types.h \ - $(wildcard include/config/physical/start.h) \ - $(wildcard include/config/physical/align.h) \ - arch/x86/include/asm/page_64_types.h \ - $(wildcard include/config/kasan.h) \ - $(wildcard include/config/randomize/base.h) \ - $(wildcard include/config/randomize/base/max/offset.h) \ - arch/x86/include/uapi/asm/ptrace.h \ - arch/x86/include/uapi/asm/ptrace-abi.h \ - arch/x86/include/asm/processor-flags.h \ - $(wildcard include/config/vm86.h) \ - arch/x86/include/uapi/asm/processor-flags.h \ - arch/x86/include/asm/paravirt_types.h \ - $(wildcard include/config/x86/local/apic.h) \ - $(wildcard include/config/pgtable/levels.h) \ - $(wildcard include/config/x86/pae.h) \ - $(wildcard include/config/queued/spinlocks.h) \ - $(wildcard include/config/paravirt/debug.h) \ - arch/x86/include/asm/desc_defs.h \ - arch/x86/include/asm/kmap_types.h \ - $(wildcard include/config/debug/highmem.h) \ - include/asm-generic/kmap_types.h \ - arch/x86/include/asm/pgtable_types.h \ - $(wildcard include/config/kmemcheck.h) \ - $(wildcard include/config/mem/soft/dirty.h) \ - $(wildcard include/config/proc/fs.h) \ - arch/x86/include/asm/pgtable_64_types.h \ - arch/x86/include/asm/sparsemem.h \ - $(wildcard include/config/sparsemem.h) \ - arch/x86/include/asm/spinlock_types.h \ - $(wildcard include/config/paravirt/spinlocks.h) \ - $(wildcard include/config/nr/cpus.h) \ - include/asm-generic/qspinlock_types.h \ - include/asm-generic/qrwlock_types.h \ - include/asm-generic/ptrace.h \ - arch/x86/include/asm/cpufeature.h \ - $(wildcard include/config/x86/feature/names.h) \ - $(wildcard include/config/x86/debug/static/cpu/has.h) \ - arch/x86/include/asm/required-features.h \ - $(wildcard include/config/x86/minimum/cpu/family.h) \ - $(wildcard include/config/math/emulation.h) \ - $(wildcard include/config/x86/cmpxchg64.h) \ - $(wildcard include/config/x86/use/3dnow.h) \ - $(wildcard include/config/x86/p6/nop.h) \ - $(wildcard include/config/matom.h) \ - arch/x86/include/asm/disabled-features.h \ - $(wildcard include/config/x86/intel/mpx.h) \ - arch/x86/include/asm/rmwcc.h \ - arch/x86/include/asm/barrier.h \ - $(wildcard include/config/x86/ppro/fence.h) \ - arch/x86/include/asm/nops.h \ - $(wildcard include/config/mk7.h) \ - include/asm-generic/bitops/find.h \ - $(wildcard include/config/generic/find/first/bit.h) \ - include/asm-generic/bitops/sched.h \ - arch/x86/include/asm/arch_hweight.h \ - include/asm-generic/bitops/const_hweight.h \ - include/asm-generic/bitops/le.h \ - arch/x86/include/uapi/asm/byteorder.h \ - include/linux/byteorder/little_endian.h \ - include/uapi/linux/byteorder/little_endian.h \ - include/linux/swab.h \ - include/uapi/linux/swab.h \ - arch/x86/include/uapi/asm/swab.h \ - include/linux/byteorder/generic.h \ - include/asm-generic/bitops/ext2-atomic-setbit.h \ - include/linux/log2.h \ - $(wildcard include/config/arch/has/ilog2/u32.h) \ - $(wildcard include/config/arch/has/ilog2/u64.h) \ - include/linux/typecheck.h \ - include/linux/printk.h \ - $(wildcard include/config/message/loglevel/default.h) \ - $(wildcard include/config/early/printk.h) \ - $(wildcard include/config/printk.h) \ - $(wildcard include/config/dynamic/debug.h) \ - include/linux/init.h \ - $(wildcard include/config/broken/rodata.h) \ - $(wildcard include/config/lto.h) \ - include/linux/kern_levels.h \ - include/linux/cache.h \ - $(wildcard include/config/arch/has/cache/line/size.h) \ - include/uapi/linux/kernel.h \ - include/uapi/linux/sysinfo.h \ - include/linux/dynamic_debug.h \ - include/linux/stat.h \ - arch/x86/include/uapi/asm/stat.h \ - include/uapi/linux/stat.h \ - include/linux/time.h \ - $(wildcard include/config/arch/uses/gettimeoffset.h) \ - include/linux/seqlock.h \ - $(wildcard include/config/debug/lock/alloc.h) \ - include/linux/spinlock.h \ - $(wildcard include/config/debug/spinlock.h) \ - $(wildcard include/config/generic/lockbreak.h) \ - $(wildcard include/config/preempt.h) \ - include/linux/preempt.h \ - $(wildcard include/config/preempt/count.h) \ - $(wildcard include/config/debug/preempt.h) \ - $(wildcard include/config/preempt/tracer.h) \ - $(wildcard include/config/preempt/notifiers.h) \ - arch/x86/include/asm/preempt.h \ - arch/x86/include/asm/percpu.h \ - $(wildcard include/config/x86/64/smp.h) \ - include/asm-generic/percpu.h \ - $(wildcard include/config/have/setup/per/cpu/area.h) \ - include/linux/threads.h \ - $(wildcard include/config/base/small.h) \ - include/linux/percpu-defs.h \ - $(wildcard include/config/debug/force/weak/per/cpu.h) \ - include/linux/thread_info.h \ - $(wildcard include/config/compat.h) \ - $(wildcard include/config/debug/stack/usage.h) \ - include/linux/bug.h \ - arch/x86/include/asm/bug.h \ - $(wildcard include/config/debug/bugverbose.h) \ - include/asm-generic/bug.h \ - $(wildcard include/config/bug.h) \ - $(wildcard include/config/generic/bug/relative/pointers.h) \ - arch/x86/include/asm/thread_info.h \ - $(wildcard include/config/ia32/emulation.h) \ - arch/x86/include/asm/page.h \ - arch/x86/include/asm/page_64.h \ - $(wildcard include/config/debug/virtual.h) \ - $(wildcard include/config/flatmem.h) \ - $(wildcard include/config/x86/vsyscall/emulation.h) \ - include/linux/range.h \ - include/asm-generic/memory_model.h \ - $(wildcard include/config/discontigmem.h) \ - $(wildcard include/config/sparsemem/vmemmap.h) \ - include/asm-generic/getorder.h \ - arch/x86/include/asm/processor.h \ - $(wildcard include/config/m486.h) \ - $(wildcard include/config/xen.h) \ - arch/x86/include/asm/vm86.h \ - arch/x86/include/uapi/asm/vm86.h \ - arch/x86/include/asm/math_emu.h \ - arch/x86/include/asm/sigcontext.h \ - arch/x86/include/uapi/asm/sigcontext.h \ - arch/x86/include/asm/current.h \ - arch/x86/include/asm/msr.h \ - arch/x86/include/asm/msr-index.h \ - arch/x86/include/uapi/asm/errno.h \ - include/uapi/asm-generic/errno.h \ - include/uapi/asm-generic/errno-base.h \ - arch/x86/include/asm/cpumask.h \ - include/linux/cpumask.h \ - $(wildcard include/config/cpumask/offstack.h) \ - $(wildcard include/config/hotplug/cpu.h) \ - $(wildcard include/config/debug/per/cpu/maps.h) \ - include/linux/bitmap.h \ - include/linux/string.h \ - $(wildcard include/config/binary/printf.h) \ - include/uapi/linux/string.h \ - arch/x86/include/asm/string.h \ - arch/x86/include/asm/string_64.h \ - arch/x86/include/uapi/asm/msr.h \ - include/uapi/linux/ioctl.h \ - arch/x86/include/uapi/asm/ioctl.h \ - include/asm-generic/ioctl.h \ - include/uapi/asm-generic/ioctl.h \ - arch/x86/include/asm/paravirt.h \ - arch/x86/include/asm/special_insns.h \ - arch/x86/include/asm/fpu/types.h \ - include/linux/personality.h \ - include/uapi/linux/personality.h \ - include/linux/math64.h \ - $(wildcard include/config/arch/supports/int128.h) \ - arch/x86/include/asm/div64.h \ - include/asm-generic/div64.h \ - include/linux/err.h \ - include/linux/irqflags.h \ - $(wildcard include/config/trace/irqflags.h) \ - $(wildcard include/config/irqsoff/tracer.h) \ - $(wildcard include/config/trace/irqflags/support.h) \ - arch/x86/include/asm/irqflags.h \ - include/linux/atomic.h \ - $(wildcard include/config/arch/has/atomic/or.h) \ - $(wildcard include/config/generic/atomic64.h) \ - arch/x86/include/asm/atomic.h \ - arch/x86/include/asm/cmpxchg.h \ - arch/x86/include/asm/cmpxchg_64.h \ - arch/x86/include/asm/atomic64_64.h \ - include/asm-generic/atomic-long.h \ - include/linux/bottom_half.h \ - include/linux/spinlock_types.h \ - include/linux/lockdep.h \ - $(wildcard include/config/lockdep.h) \ - $(wildcard include/config/lock/stat.h) \ - include/linux/rwlock_types.h \ - arch/x86/include/asm/spinlock.h \ - include/linux/jump_label.h \ - $(wildcard include/config/jump/label.h) \ - arch/x86/include/asm/jump_label.h \ - arch/x86/include/asm/qspinlock.h \ - include/asm-generic/qspinlock.h \ - arch/x86/include/asm/qrwlock.h \ - include/asm-generic/qrwlock.h \ - include/linux/rwlock.h \ - include/linux/spinlock_api_smp.h \ - $(wildcard include/config/inline/spin/lock.h) \ - $(wildcard include/config/inline/spin/lock/bh.h) \ - $(wildcard include/config/inline/spin/lock/irq.h) \ - $(wildcard include/config/inline/spin/lock/irqsave.h) \ - $(wildcard include/config/inline/spin/trylock.h) \ - $(wildcard include/config/inline/spin/trylock/bh.h) \ - $(wildcard include/config/uninline/spin/unlock.h) \ - $(wildcard include/config/inline/spin/unlock/bh.h) \ - $(wildcard include/config/inline/spin/unlock/irq.h) \ - $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ - include/linux/rwlock_api_smp.h \ - $(wildcard include/config/inline/read/lock.h) \ - $(wildcard include/config/inline/write/lock.h) \ - $(wildcard include/config/inline/read/lock/bh.h) \ - $(wildcard include/config/inline/write/lock/bh.h) \ - $(wildcard include/config/inline/read/lock/irq.h) \ - $(wildcard include/config/inline/write/lock/irq.h) \ - $(wildcard include/config/inline/read/lock/irqsave.h) \ - $(wildcard include/config/inline/write/lock/irqsave.h) \ - $(wildcard include/config/inline/read/trylock.h) \ - $(wildcard include/config/inline/write/trylock.h) \ - $(wildcard include/config/inline/read/unlock.h) \ - $(wildcard include/config/inline/write/unlock.h) \ - $(wildcard include/config/inline/read/unlock/bh.h) \ - $(wildcard include/config/inline/write/unlock/bh.h) \ - $(wildcard include/config/inline/read/unlock/irq.h) \ - $(wildcard include/config/inline/write/unlock/irq.h) \ - $(wildcard include/config/inline/read/unlock/irqrestore.h) \ - $(wildcard include/config/inline/write/unlock/irqrestore.h) \ - include/linux/time64.h \ - include/uapi/linux/time.h \ - include/linux/uidgid.h \ - $(wildcard include/config/multiuser.h) \ - $(wildcard include/config/user/ns.h) \ - include/linux/highuid.h \ - include/linux/kmod.h \ - include/linux/gfp.h \ - $(wildcard include/config/highmem.h) \ - $(wildcard include/config/zone/dma.h) \ - $(wildcard include/config/zone/dma32.h) \ - $(wildcard include/config/numa.h) \ - $(wildcard include/config/deferred/struct/page/init.h) \ - $(wildcard include/config/pm/sleep.h) \ - $(wildcard include/config/cma.h) \ - include/linux/mmdebug.h \ - $(wildcard include/config/debug/vm.h) \ - include/linux/mmzone.h \ - $(wildcard include/config/force/max/zoneorder.h) \ - $(wildcard include/config/memory/isolation.h) \ - $(wildcard include/config/memcg.h) \ - $(wildcard include/config/memory/hotplug.h) \ - $(wildcard include/config/compaction.h) \ - $(wildcard include/config/have/memblock/node/map.h) \ - $(wildcard include/config/flat/node/mem/map.h) \ - $(wildcard include/config/page/extension.h) \ - $(wildcard include/config/no/bootmem.h) \ - $(wildcard include/config/numa/balancing.h) \ - $(wildcard include/config/have/memory/present.h) \ - $(wildcard include/config/have/memoryless/nodes.h) \ - $(wildcard include/config/need/node/memmap/size.h) \ - $(wildcard include/config/need/multiple/nodes.h) \ - $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ - $(wildcard include/config/sparsemem/extreme.h) \ - $(wildcard include/config/have/arch/pfn/valid.h) \ - $(wildcard include/config/holes/in/zone.h) \ - $(wildcard include/config/arch/has/holes/memorymodel.h) \ - include/linux/wait.h \ - include/uapi/linux/wait.h \ - include/linux/numa.h \ - $(wildcard include/config/nodes/shift.h) \ - include/linux/nodemask.h \ - $(wildcard include/config/movable/node.h) \ - include/linux/pageblock-flags.h \ - $(wildcard include/config/hugetlb/page.h) \ - $(wildcard include/config/hugetlb/page/size/variable.h) \ - include/linux/page-flags-layout.h \ - include/generated/bounds.h \ - include/linux/memory_hotplug.h \ - $(wildcard include/config/memory/hotremove.h) \ - $(wildcard include/config/have/arch/nodedata/extension.h) \ - $(wildcard include/config/have/bootmem/info/node.h) \ - include/linux/notifier.h \ - include/linux/errno.h \ - include/uapi/linux/errno.h \ - include/linux/mutex.h \ - $(wildcard include/config/debug/mutexes.h) \ - $(wildcard include/config/mutex/spin/on/owner.h) \ - include/linux/osq_lock.h \ - include/linux/rwsem.h \ - $(wildcard include/config/rwsem/spin/on/owner.h) \ - $(wildcard include/config/rwsem/generic/spinlock.h) \ - arch/x86/include/asm/rwsem.h \ - include/linux/srcu.h \ - include/linux/rcupdate.h \ - $(wildcard include/config/tiny/rcu.h) \ - $(wildcard include/config/tree/rcu.h) \ - $(wildcard include/config/preempt/rcu.h) \ - $(wildcard include/config/rcu/trace.h) \ - $(wildcard include/config/rcu/stall/common.h) \ - $(wildcard include/config/rcu/user/qs.h) \ - $(wildcard include/config/rcu/nocb/cpu.h) \ - $(wildcard include/config/tasks/rcu.h) \ - $(wildcard include/config/debug/objects/rcu/head.h) \ - $(wildcard include/config/prove/rcu.h) \ - $(wildcard include/config/rcu/boost.h) \ - $(wildcard include/config/rcu/nocb/cpu/all.h) \ - $(wildcard include/config/no/hz/full/sysidle.h) \ - include/linux/completion.h \ - include/linux/debugobjects.h \ - $(wildcard include/config/debug/objects.h) \ - $(wildcard include/config/debug/objects/free.h) \ - include/linux/ktime.h \ - include/linux/jiffies.h \ - include/linux/timex.h \ - include/uapi/linux/timex.h \ - include/uapi/linux/param.h \ - arch/x86/include/uapi/asm/param.h \ - include/asm-generic/param.h \ - $(wildcard include/config/hz.h) \ - include/uapi/asm-generic/param.h \ - arch/x86/include/asm/timex.h \ - arch/x86/include/asm/tsc.h \ - $(wildcard include/config/x86/tsc.h) \ - include/generated/timeconst.h \ - include/linux/timekeeping.h \ - include/linux/rcutree.h \ - include/linux/workqueue.h \ - $(wildcard include/config/debug/objects/work.h) \ - $(wildcard include/config/freezer.h) \ - include/linux/timer.h \ - $(wildcard include/config/timer/stats.h) \ - $(wildcard include/config/debug/objects/timers.h) \ - $(wildcard include/config/no/hz/common.h) \ - include/linux/sysctl.h \ - $(wildcard include/config/sysctl.h) \ - include/linux/rbtree.h \ - include/uapi/linux/sysctl.h \ - arch/x86/include/asm/mmzone.h \ - arch/x86/include/asm/mmzone_64.h \ - arch/x86/include/asm/smp.h \ - $(wildcard include/config/x86/io/apic.h) \ - $(wildcard include/config/x86/32/smp.h) \ - $(wildcard include/config/debug/nmi/selftest.h) \ - arch/x86/include/asm/mpspec.h \ - $(wildcard include/config/eisa.h) \ - $(wildcard include/config/x86/mpparse.h) \ - arch/x86/include/asm/mpspec_def.h \ - arch/x86/include/asm/x86_init.h \ - arch/x86/include/uapi/asm/bootparam.h \ - include/linux/screen_info.h \ - include/uapi/linux/screen_info.h \ - include/linux/apm_bios.h \ - include/uapi/linux/apm_bios.h \ - include/linux/edd.h \ - include/uapi/linux/edd.h \ - arch/x86/include/asm/e820.h \ - $(wildcard include/config/efi.h) \ - $(wildcard include/config/hibernation.h) \ - arch/x86/include/uapi/asm/e820.h \ - $(wildcard include/config/x86/pmem/legacy.h) \ - $(wildcard include/config/intel/txt.h) \ - include/linux/ioport.h \ - arch/x86/include/asm/ist.h \ - arch/x86/include/uapi/asm/ist.h \ - include/video/edid.h \ - $(wildcard include/config/x86.h) \ - include/uapi/video/edid.h \ - arch/x86/include/asm/apicdef.h \ - arch/x86/include/asm/apic.h \ - $(wildcard include/config/x86/x2apic.h) \ - include/linux/pm.h \ - $(wildcard include/config/vt/console/sleep.h) \ - $(wildcard include/config/pm.h) \ - $(wildcard include/config/pm/clk.h) \ - $(wildcard include/config/pm/generic/domains.h) \ - arch/x86/include/asm/fixmap.h \ - $(wildcard include/config/paravirt/clock.h) \ - $(wildcard include/config/provide/ohci1394/dma/init.h) \ - $(wildcard include/config/pci/mmconfig.h) \ - $(wildcard include/config/x86/intel/mid.h) \ - arch/x86/include/asm/acpi.h \ - $(wildcard include/config/acpi.h) \ - $(wildcard include/config/acpi/numa.h) \ - include/acpi/pdc_intel.h \ - arch/x86/include/asm/numa.h \ - $(wildcard include/config/numa/emu.h) \ - arch/x86/include/asm/topology.h \ - include/asm-generic/topology.h \ - arch/x86/include/asm/mmu.h \ - arch/x86/include/asm/realmode.h \ - $(wildcard include/config/acpi/sleep.h) \ - arch/x86/include/asm/io.h \ - $(wildcard include/config/mtrr.h) \ - arch/x86/include/generated/asm/early_ioremap.h \ - include/asm-generic/early_ioremap.h \ - $(wildcard include/config/generic/early/ioremap.h) \ - include/asm-generic/iomap.h \ - $(wildcard include/config/has/ioport/map.h) \ - $(wildcard include/config/pci.h) \ - $(wildcard include/config/generic/iomap.h) \ - include/asm-generic/pci_iomap.h \ - $(wildcard include/config/no/generic/pci/ioport/map.h) \ - $(wildcard include/config/generic/pci/iomap.h) \ - include/xen/xen.h \ - $(wildcard include/config/xen/dom0.h) \ - $(wildcard include/config/xen/pvh.h) \ - include/xen/interface/xen.h \ - arch/x86/include/asm/xen/interface.h \ - arch/x86/include/asm/xen/interface_64.h \ - arch/x86/include/asm/pvclock-abi.h \ - arch/x86/include/asm/xen/hypervisor.h \ - include/xen/features.h \ - include/xen/interface/features.h \ - arch/x86/include/asm/pvclock.h \ - include/linux/clocksource.h \ - $(wildcard include/config/arch/clocksource/data.h) \ - $(wildcard include/config/clocksource/watchdog.h) \ - $(wildcard include/config/clksrc/of.h) \ - arch/x86/include/asm/clocksource.h \ - arch/x86/include/uapi/asm/vsyscall.h \ - include/asm-generic/fixmap.h \ - arch/x86/include/asm/idle.h \ - arch/x86/include/asm/io_apic.h \ - arch/x86/include/asm/irq_vectors.h \ - $(wildcard include/config/have/kvm.h) \ - $(wildcard include/config/pci/msi.h) \ - include/linux/topology.h \ - $(wildcard include/config/use/percpu/numa/node/id.h) \ - $(wildcard include/config/sched/smt.h) \ - include/linux/smp.h \ - $(wildcard include/config/up/late/init.h) \ - include/linux/llist.h \ - $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ - include/linux/percpu.h \ - $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ - $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ - include/linux/pfn.h \ - include/linux/elf.h \ - arch/x86/include/asm/elf.h \ - $(wildcard include/config/x86/x32/abi.h) \ - arch/x86/include/asm/user.h \ - arch/x86/include/asm/user_64.h \ - arch/x86/include/uapi/asm/auxvec.h \ - arch/x86/include/asm/vdso.h \ - $(wildcard include/config/x86/x32.h) \ - include/linux/mm_types.h \ - $(wildcard include/config/split/ptlock/cpus.h) \ - $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ - $(wildcard include/config/have/cmpxchg/double.h) \ - $(wildcard include/config/have/aligned/struct/page.h) \ - $(wildcard include/config/transparent/hugepage.h) \ - $(wildcard include/config/aio.h) \ - $(wildcard include/config/mmu/notifier.h) \ - include/linux/auxvec.h \ - include/uapi/linux/auxvec.h \ - include/linux/uprobes.h \ - $(wildcard include/config/uprobes.h) \ - arch/x86/include/asm/uprobes.h \ - include/uapi/linux/elf.h \ - include/uapi/linux/elf-em.h \ - include/linux/kobject.h \ - $(wildcard include/config/uevent/helper.h) \ - $(wildcard include/config/debug/kobject/release.h) \ - include/linux/sysfs.h \ - include/linux/kernfs.h \ - $(wildcard include/config/kernfs.h) \ - include/linux/idr.h \ - include/linux/kobject_ns.h \ - include/linux/kref.h \ - include/linux/moduleparam.h \ - $(wildcard include/config/alpha.h) \ - $(wildcard include/config/ia64.h) \ - $(wildcard include/config/ppc64.h) \ - include/linux/rbtree_latch.h \ - arch/x86/include/asm/module.h \ - $(wildcard include/config/m586.h) \ - $(wildcard include/config/m586tsc.h) \ - $(wildcard include/config/m586mmx.h) \ - $(wildcard include/config/mcore2.h) \ - $(wildcard include/config/m686.h) \ - $(wildcard include/config/mpentiumii.h) \ - $(wildcard include/config/mpentiumiii.h) \ - $(wildcard include/config/mpentiumm.h) \ - $(wildcard include/config/mpentium4.h) \ - $(wildcard include/config/mk6.h) \ - $(wildcard include/config/mk8.h) \ - $(wildcard include/config/melan.h) \ - $(wildcard include/config/mcrusoe.h) \ - $(wildcard include/config/mefficeon.h) \ - $(wildcard include/config/mwinchipc6.h) \ - $(wildcard include/config/mwinchip3d.h) \ - $(wildcard include/config/mcyrixiii.h) \ - $(wildcard include/config/mviac3/2.h) \ - $(wildcard include/config/mviac7.h) \ - $(wildcard include/config/mgeodegx1.h) \ - $(wildcard include/config/mgeode/lx.h) \ - include/asm-generic/module.h \ - $(wildcard include/config/have/mod/arch/specific.h) \ - $(wildcard include/config/modules/use/elf/rel.h) \ - $(wildcard include/config/modules/use/elf/rela.h) \ - include/linux/vermagic.h \ - include/generated/utsrelease.h \ - -/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o: $(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o) - -$(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o): diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.o.cmd b/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.o.cmd deleted file mode 100644 index b4c40a04..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.nbd.o.cmd +++ /dev/null @@ -1,1145 +0,0 @@ -cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := gcc -Wp,-MD,/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.nbd.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(nbd)" -D"KBUILD_MODNAME=KBUILD_STR(nbd)" -c -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.tmp_nbd.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.c - -source_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.c - -deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := \ - $(wildcard include/config/debug/fs.h) \ - include/uapi/linux/major.h \ - include/linux/blkdev.h \ - $(wildcard include/config/block.h) \ - $(wildcard include/config/blk/cgroup.h) \ - $(wildcard include/config/blk/dev/integrity.h) \ - $(wildcard include/config/pm.h) \ - $(wildcard include/config/blk/dev/io/trace.h) \ - $(wildcard include/config/blk/dev/bsg.h) \ - $(wildcard include/config/blk/dev/throttling.h) \ - $(wildcard include/config/bounce.h) \ - $(wildcard include/config/mmu.h) \ - include/linux/sched.h \ - $(wildcard include/config/smp.h) \ - $(wildcard include/config/no/hz/common.h) \ - $(wildcard include/config/sched/debug.h) \ - $(wildcard include/config/debug/atomic/sleep.h) \ - $(wildcard include/config/prove/rcu.h) \ - $(wildcard include/config/lockup/detector.h) \ - $(wildcard include/config/detect/hung/task.h) \ - $(wildcard include/config/core/dump/default/elf/headers.h) \ - $(wildcard include/config/preempt/count.h) \ - $(wildcard include/config/sched/autogroup.h) \ - $(wildcard include/config/virt/cpu/accounting/native.h) \ - $(wildcard include/config/bsd/process/acct.h) \ - $(wildcard include/config/taskstats.h) \ - $(wildcard include/config/audit.h) \ - $(wildcard include/config/inotify/user.h) \ - $(wildcard include/config/fanotify.h) \ - $(wildcard include/config/epoll.h) \ - $(wildcard include/config/posix/mqueue.h) \ - $(wildcard include/config/keys.h) \ - $(wildcard include/config/perf/events.h) \ - $(wildcard include/config/sched/info.h) \ - $(wildcard include/config/task/delay/acct.h) \ - $(wildcard include/config/schedstats.h) \ - $(wildcard include/config/sched/smt.h) \ - $(wildcard include/config/sched/mc.h) \ - $(wildcard include/config/numa.h) \ - $(wildcard include/config/fair/group/sched.h) \ - $(wildcard include/config/rt/group/sched.h) \ - $(wildcard include/config/cgroup/sched.h) \ - $(wildcard include/config/preempt/notifiers.h) \ - $(wildcard include/config/preempt/rcu.h) \ - $(wildcard include/config/tasks/rcu.h) \ - $(wildcard include/config/memcg/kmem.h) \ - $(wildcard include/config/compat/brk.h) \ - $(wildcard include/config/cc/stackprotector.h) \ - $(wildcard include/config/virt/cpu/accounting/gen.h) \ - $(wildcard include/config/sysvipc.h) \ - $(wildcard include/config/auditsyscall.h) \ - $(wildcard include/config/rt/mutexes.h) \ - $(wildcard include/config/debug/mutexes.h) \ - $(wildcard include/config/trace/irqflags.h) \ - $(wildcard include/config/lockdep.h) \ - $(wildcard include/config/task/xacct.h) \ - $(wildcard include/config/cpusets.h) \ - $(wildcard include/config/cgroups.h) \ - $(wildcard include/config/futex.h) \ - $(wildcard include/config/compat.h) \ - $(wildcard include/config/debug/preempt.h) \ - $(wildcard include/config/numa/balancing.h) \ - $(wildcard include/config/fault/injection.h) \ - $(wildcard include/config/latencytop.h) \ - $(wildcard include/config/kasan.h) \ - $(wildcard include/config/function/graph/tracer.h) \ - $(wildcard include/config/tracing.h) \ - $(wildcard include/config/memcg.h) \ - $(wildcard include/config/uprobes.h) \ - $(wildcard include/config/bcache.h) \ - $(wildcard include/config/arch/wants/dynamic/task/struct.h) \ - $(wildcard include/config/cpumask/offstack.h) \ - $(wildcard include/config/have/unstable/sched/clock.h) \ - $(wildcard include/config/irq/time/accounting.h) \ - $(wildcard include/config/hotplug/cpu.h) \ - $(wildcard include/config/no/hz/full.h) \ - $(wildcard include/config/proc/fs.h) \ - $(wildcard include/config/stack/growsup.h) \ - $(wildcard include/config/have/copy/thread/tls.h) \ - $(wildcard include/config/debug/stack/usage.h) \ - $(wildcard include/config/preempt.h) \ - include/uapi/linux/sched.h \ - include/linux/sched/prio.h \ - arch/x86/include/uapi/asm/param.h \ - include/asm-generic/param.h \ - $(wildcard include/config/hz.h) \ - include/uapi/asm-generic/param.h \ - include/linux/capability.h \ - $(wildcard include/config/multiuser.h) \ - include/uapi/linux/capability.h \ - include/linux/types.h \ - $(wildcard include/config/uid16.h) \ - $(wildcard include/config/lbdaf.h) \ - $(wildcard include/config/arch/dma/addr/t/64bit.h) \ - $(wildcard include/config/phys/addr/t/64bit.h) \ - $(wildcard include/config/64bit.h) \ - include/uapi/linux/types.h \ - arch/x86/include/uapi/asm/types.h \ - include/uapi/asm-generic/types.h \ - include/asm-generic/int-ll64.h \ - include/uapi/asm-generic/int-ll64.h \ - arch/x86/include/uapi/asm/bitsperlong.h \ - include/asm-generic/bitsperlong.h \ - include/uapi/asm-generic/bitsperlong.h \ - include/uapi/linux/posix_types.h \ - include/linux/stddef.h \ - include/uapi/linux/stddef.h \ - include/linux/compiler.h \ - $(wildcard include/config/sparse/rcu/pointer.h) \ - $(wildcard include/config/trace/branch/profiling.h) \ - $(wildcard include/config/profile/all/branches.h) \ - $(wildcard include/config/enable/must/check.h) \ - $(wildcard include/config/enable/warn/deprecated.h) \ - $(wildcard include/config/kprobes.h) \ - include/linux/compiler-gcc.h \ - $(wildcard include/config/arch/supports/optimized/inlining.h) \ - $(wildcard include/config/optimize/inlining.h) \ - $(wildcard include/config/gcov/kernel.h) \ - $(wildcard include/config/arch/use/builtin/bswap.h) \ - arch/x86/include/asm/posix_types.h \ - $(wildcard include/config/x86/32.h) \ - arch/x86/include/uapi/asm/posix_types_64.h \ - include/uapi/asm-generic/posix_types.h \ - include/linux/threads.h \ - $(wildcard include/config/nr/cpus.h) \ - $(wildcard include/config/base/small.h) \ - include/linux/kernel.h \ - $(wildcard include/config/preempt/voluntary.h) \ - $(wildcard include/config/prove/locking.h) \ - $(wildcard include/config/panic/timeout.h) \ - $(wildcard include/config/ftrace/mcount/record.h) \ - /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include/stdarg.h \ - include/linux/linkage.h \ - include/linux/stringify.h \ - include/linux/export.h \ - $(wildcard include/config/have/underscore/symbol/prefix.h) \ - $(wildcard include/config/modules.h) \ - $(wildcard include/config/modversions.h) \ - $(wildcard include/config/unused/symbols.h) \ - arch/x86/include/asm/linkage.h \ - $(wildcard include/config/x86/64.h) \ - $(wildcard include/config/x86/alignment/16.h) \ - include/linux/bitops.h \ - arch/x86/include/asm/bitops.h \ - $(wildcard include/config/x86/cmov.h) \ - arch/x86/include/asm/alternative.h \ - $(wildcard include/config/paravirt.h) \ - arch/x86/include/asm/asm.h \ - arch/x86/include/asm/ptrace.h \ - $(wildcard include/config/x86/debugctlmsr.h) \ - arch/x86/include/asm/segment.h \ - $(wildcard include/config/x86/32/lazy/gs.h) \ - include/uapi/linux/const.h \ - arch/x86/include/asm/cache.h \ - $(wildcard include/config/x86/l1/cache/shift.h) \ - $(wildcard include/config/x86/internode/cache/shift.h) \ - $(wildcard include/config/x86/vsmp.h) \ - arch/x86/include/asm/page_types.h \ - $(wildcard include/config/physical/start.h) \ - $(wildcard include/config/physical/align.h) \ - arch/x86/include/asm/page_64_types.h \ - $(wildcard include/config/randomize/base.h) \ - $(wildcard include/config/randomize/base/max/offset.h) \ - arch/x86/include/uapi/asm/ptrace.h \ - arch/x86/include/uapi/asm/ptrace-abi.h \ - arch/x86/include/asm/processor-flags.h \ - $(wildcard include/config/vm86.h) \ - arch/x86/include/uapi/asm/processor-flags.h \ - arch/x86/include/asm/paravirt_types.h \ - $(wildcard include/config/x86/local/apic.h) \ - $(wildcard include/config/pgtable/levels.h) \ - $(wildcard include/config/x86/pae.h) \ - $(wildcard include/config/queued/spinlocks.h) \ - $(wildcard include/config/paravirt/debug.h) \ - arch/x86/include/asm/desc_defs.h \ - arch/x86/include/asm/kmap_types.h \ - $(wildcard include/config/debug/highmem.h) \ - include/asm-generic/kmap_types.h \ - arch/x86/include/asm/pgtable_types.h \ - $(wildcard include/config/kmemcheck.h) \ - $(wildcard include/config/mem/soft/dirty.h) \ - arch/x86/include/asm/pgtable_64_types.h \ - arch/x86/include/asm/sparsemem.h \ - $(wildcard include/config/sparsemem.h) \ - arch/x86/include/asm/spinlock_types.h \ - $(wildcard include/config/paravirt/spinlocks.h) \ - include/asm-generic/qspinlock_types.h \ - include/asm-generic/qrwlock_types.h \ - include/asm-generic/ptrace.h \ - arch/x86/include/asm/cpufeature.h \ - $(wildcard include/config/x86/feature/names.h) \ - $(wildcard include/config/x86/debug/static/cpu/has.h) \ - arch/x86/include/asm/required-features.h \ - $(wildcard include/config/x86/minimum/cpu/family.h) \ - $(wildcard include/config/math/emulation.h) \ - $(wildcard include/config/x86/cmpxchg64.h) \ - $(wildcard include/config/x86/use/3dnow.h) \ - $(wildcard include/config/x86/p6/nop.h) \ - $(wildcard include/config/matom.h) \ - arch/x86/include/asm/disabled-features.h \ - $(wildcard include/config/x86/intel/mpx.h) \ - arch/x86/include/asm/rmwcc.h \ - arch/x86/include/asm/barrier.h \ - $(wildcard include/config/x86/ppro/fence.h) \ - arch/x86/include/asm/nops.h \ - $(wildcard include/config/mk7.h) \ - include/asm-generic/bitops/find.h \ - $(wildcard include/config/generic/find/first/bit.h) \ - include/asm-generic/bitops/sched.h \ - arch/x86/include/asm/arch_hweight.h \ - include/asm-generic/bitops/const_hweight.h \ - include/asm-generic/bitops/le.h \ - arch/x86/include/uapi/asm/byteorder.h \ - include/linux/byteorder/little_endian.h \ - include/uapi/linux/byteorder/little_endian.h \ - include/linux/swab.h \ - include/uapi/linux/swab.h \ - arch/x86/include/uapi/asm/swab.h \ - include/linux/byteorder/generic.h \ - include/asm-generic/bitops/ext2-atomic-setbit.h \ - include/linux/log2.h \ - $(wildcard include/config/arch/has/ilog2/u32.h) \ - $(wildcard include/config/arch/has/ilog2/u64.h) \ - include/linux/typecheck.h \ - include/linux/printk.h \ - $(wildcard include/config/message/loglevel/default.h) \ - $(wildcard include/config/early/printk.h) \ - $(wildcard include/config/printk.h) \ - $(wildcard include/config/dynamic/debug.h) \ - include/linux/init.h \ - $(wildcard include/config/broken/rodata.h) \ - $(wildcard include/config/lto.h) \ - include/linux/kern_levels.h \ - include/linux/cache.h \ - $(wildcard include/config/arch/has/cache/line/size.h) \ - include/uapi/linux/kernel.h \ - include/uapi/linux/sysinfo.h \ - include/linux/dynamic_debug.h \ - include/linux/timex.h \ - include/uapi/linux/timex.h \ - include/linux/time.h \ - $(wildcard include/config/arch/uses/gettimeoffset.h) \ - include/linux/seqlock.h \ - $(wildcard include/config/debug/lock/alloc.h) \ - include/linux/spinlock.h \ - $(wildcard include/config/debug/spinlock.h) \ - $(wildcard include/config/generic/lockbreak.h) \ - include/linux/preempt.h \ - $(wildcard include/config/preempt/tracer.h) \ - include/linux/list.h \ - $(wildcard include/config/debug/list.h) \ - include/linux/poison.h \ - $(wildcard include/config/illegal/pointer/value.h) \ - arch/x86/include/asm/preempt.h \ - arch/x86/include/asm/percpu.h \ - $(wildcard include/config/x86/64/smp.h) \ - include/asm-generic/percpu.h \ - $(wildcard include/config/have/setup/per/cpu/area.h) \ - include/linux/percpu-defs.h \ - $(wildcard include/config/debug/force/weak/per/cpu.h) \ - include/linux/thread_info.h \ - include/linux/bug.h \ - $(wildcard include/config/generic/bug.h) \ - arch/x86/include/asm/bug.h \ - $(wildcard include/config/debug/bugverbose.h) \ - include/asm-generic/bug.h \ - $(wildcard include/config/bug.h) \ - $(wildcard include/config/generic/bug/relative/pointers.h) \ - arch/x86/include/asm/thread_info.h \ - $(wildcard include/config/ia32/emulation.h) \ - arch/x86/include/asm/page.h \ - arch/x86/include/asm/page_64.h \ - $(wildcard include/config/debug/virtual.h) \ - $(wildcard include/config/flatmem.h) \ - $(wildcard include/config/x86/vsyscall/emulation.h) \ - include/linux/range.h \ - include/asm-generic/memory_model.h \ - $(wildcard include/config/discontigmem.h) \ - $(wildcard include/config/sparsemem/vmemmap.h) \ - include/asm-generic/getorder.h \ - arch/x86/include/asm/processor.h \ - $(wildcard include/config/m486.h) \ - $(wildcard include/config/xen.h) \ - arch/x86/include/asm/vm86.h \ - arch/x86/include/uapi/asm/vm86.h \ - arch/x86/include/asm/math_emu.h \ - arch/x86/include/asm/sigcontext.h \ - arch/x86/include/uapi/asm/sigcontext.h \ - arch/x86/include/asm/current.h \ - arch/x86/include/asm/msr.h \ - arch/x86/include/asm/msr-index.h \ - arch/x86/include/uapi/asm/errno.h \ - include/uapi/asm-generic/errno.h \ - include/uapi/asm-generic/errno-base.h \ - arch/x86/include/asm/cpumask.h \ - include/linux/cpumask.h \ - $(wildcard include/config/debug/per/cpu/maps.h) \ - include/linux/bitmap.h \ - include/linux/string.h \ - $(wildcard include/config/binary/printf.h) \ - include/uapi/linux/string.h \ - arch/x86/include/asm/string.h \ - arch/x86/include/asm/string_64.h \ - arch/x86/include/uapi/asm/msr.h \ - include/uapi/linux/ioctl.h \ - arch/x86/include/uapi/asm/ioctl.h \ - include/asm-generic/ioctl.h \ - include/uapi/asm-generic/ioctl.h \ - arch/x86/include/asm/paravirt.h \ - arch/x86/include/asm/special_insns.h \ - arch/x86/include/asm/fpu/types.h \ - include/linux/personality.h \ - include/uapi/linux/personality.h \ - include/linux/math64.h \ - $(wildcard include/config/arch/supports/int128.h) \ - arch/x86/include/asm/div64.h \ - include/asm-generic/div64.h \ - include/linux/err.h \ - include/linux/irqflags.h \ - $(wildcard include/config/irqsoff/tracer.h) \ - $(wildcard include/config/trace/irqflags/support.h) \ - arch/x86/include/asm/irqflags.h \ - include/linux/atomic.h \ - $(wildcard include/config/arch/has/atomic/or.h) \ - $(wildcard include/config/generic/atomic64.h) \ - arch/x86/include/asm/atomic.h \ - arch/x86/include/asm/cmpxchg.h \ - arch/x86/include/asm/cmpxchg_64.h \ - arch/x86/include/asm/atomic64_64.h \ - include/asm-generic/atomic-long.h \ - include/linux/bottom_half.h \ - include/linux/spinlock_types.h \ - include/linux/lockdep.h \ - $(wildcard include/config/lock/stat.h) \ - include/linux/rwlock_types.h \ - arch/x86/include/asm/spinlock.h \ - include/linux/jump_label.h \ - $(wildcard include/config/jump/label.h) \ - arch/x86/include/asm/jump_label.h \ - arch/x86/include/asm/qspinlock.h \ - include/asm-generic/qspinlock.h \ - arch/x86/include/asm/qrwlock.h \ - include/asm-generic/qrwlock.h \ - include/linux/rwlock.h \ - include/linux/spinlock_api_smp.h \ - $(wildcard include/config/inline/spin/lock.h) \ - $(wildcard include/config/inline/spin/lock/bh.h) \ - $(wildcard include/config/inline/spin/lock/irq.h) \ - $(wildcard include/config/inline/spin/lock/irqsave.h) \ - $(wildcard include/config/inline/spin/trylock.h) \ - $(wildcard include/config/inline/spin/trylock/bh.h) \ - $(wildcard include/config/uninline/spin/unlock.h) \ - $(wildcard include/config/inline/spin/unlock/bh.h) \ - $(wildcard include/config/inline/spin/unlock/irq.h) \ - $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ - include/linux/rwlock_api_smp.h \ - $(wildcard include/config/inline/read/lock.h) \ - $(wildcard include/config/inline/write/lock.h) \ - $(wildcard include/config/inline/read/lock/bh.h) \ - $(wildcard include/config/inline/write/lock/bh.h) \ - $(wildcard include/config/inline/read/lock/irq.h) \ - $(wildcard include/config/inline/write/lock/irq.h) \ - $(wildcard include/config/inline/read/lock/irqsave.h) \ - $(wildcard include/config/inline/write/lock/irqsave.h) \ - $(wildcard include/config/inline/read/trylock.h) \ - $(wildcard include/config/inline/write/trylock.h) \ - $(wildcard include/config/inline/read/unlock.h) \ - $(wildcard include/config/inline/write/unlock.h) \ - $(wildcard include/config/inline/read/unlock/bh.h) \ - $(wildcard include/config/inline/write/unlock/bh.h) \ - $(wildcard include/config/inline/read/unlock/irq.h) \ - $(wildcard include/config/inline/write/unlock/irq.h) \ - $(wildcard include/config/inline/read/unlock/irqrestore.h) \ - $(wildcard include/config/inline/write/unlock/irqrestore.h) \ - include/linux/time64.h \ - include/uapi/linux/time.h \ - include/uapi/linux/param.h \ - arch/x86/include/asm/timex.h \ - arch/x86/include/asm/tsc.h \ - $(wildcard include/config/x86/tsc.h) \ - include/linux/jiffies.h \ - include/generated/timeconst.h \ - include/linux/plist.h \ - $(wildcard include/config/debug/pi/list.h) \ - include/linux/rbtree.h \ - include/linux/rcupdate.h \ - $(wildcard include/config/tiny/rcu.h) \ - $(wildcard include/config/tree/rcu.h) \ - $(wildcard include/config/rcu/trace.h) \ - $(wildcard include/config/rcu/stall/common.h) \ - $(wildcard include/config/rcu/user/qs.h) \ - $(wildcard include/config/rcu/nocb/cpu.h) \ - $(wildcard include/config/debug/objects/rcu/head.h) \ - $(wildcard include/config/rcu/boost.h) \ - $(wildcard include/config/rcu/nocb/cpu/all.h) \ - $(wildcard include/config/no/hz/full/sysidle.h) \ - include/linux/completion.h \ - include/linux/wait.h \ - include/uapi/linux/wait.h \ - include/linux/debugobjects.h \ - $(wildcard include/config/debug/objects.h) \ - $(wildcard include/config/debug/objects/free.h) \ - include/linux/ktime.h \ - include/linux/timekeeping.h \ - include/linux/rcutree.h \ - include/linux/errno.h \ - include/uapi/linux/errno.h \ - include/linux/nodemask.h \ - $(wildcard include/config/highmem.h) \ - $(wildcard include/config/movable/node.h) \ - include/linux/numa.h \ - $(wildcard include/config/nodes/shift.h) \ - include/linux/mm_types.h \ - $(wildcard include/config/split/ptlock/cpus.h) \ - $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ - $(wildcard include/config/have/cmpxchg/double.h) \ - $(wildcard include/config/have/aligned/struct/page.h) \ - $(wildcard include/config/transparent/hugepage.h) \ - $(wildcard include/config/aio.h) \ - $(wildcard include/config/mmu/notifier.h) \ - $(wildcard include/config/compaction.h) \ - include/linux/auxvec.h \ - include/uapi/linux/auxvec.h \ - arch/x86/include/uapi/asm/auxvec.h \ - include/linux/rwsem.h \ - $(wildcard include/config/rwsem/spin/on/owner.h) \ - $(wildcard include/config/rwsem/generic/spinlock.h) \ - include/linux/osq_lock.h \ - arch/x86/include/asm/rwsem.h \ - include/linux/uprobes.h \ - arch/x86/include/asm/uprobes.h \ - include/linux/notifier.h \ - include/linux/mutex.h \ - $(wildcard include/config/mutex/spin/on/owner.h) \ - include/linux/srcu.h \ - include/linux/workqueue.h \ - $(wildcard include/config/debug/objects/work.h) \ - $(wildcard include/config/freezer.h) \ - $(wildcard include/config/sysfs.h) \ - include/linux/timer.h \ - $(wildcard include/config/timer/stats.h) \ - $(wildcard include/config/debug/objects/timers.h) \ - include/linux/sysctl.h \ - $(wildcard include/config/sysctl.h) \ - include/uapi/linux/sysctl.h \ - include/linux/page-flags-layout.h \ - include/generated/bounds.h \ - arch/x86/include/asm/mmu.h \ - include/linux/cputime.h \ - arch/x86/include/generated/asm/cputime.h \ - include/asm-generic/cputime.h \ - $(wildcard include/config/virt/cpu/accounting.h) \ - include/asm-generic/cputime_jiffies.h \ - include/linux/smp.h \ - $(wildcard include/config/up/late/init.h) \ - include/linux/llist.h \ - $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ - arch/x86/include/asm/smp.h \ - $(wildcard include/config/x86/io/apic.h) \ - $(wildcard include/config/x86/32/smp.h) \ - $(wildcard include/config/debug/nmi/selftest.h) \ - arch/x86/include/asm/mpspec.h \ - $(wildcard include/config/eisa.h) \ - $(wildcard include/config/x86/mpparse.h) \ - arch/x86/include/asm/mpspec_def.h \ - arch/x86/include/asm/x86_init.h \ - arch/x86/include/uapi/asm/bootparam.h \ - include/linux/screen_info.h \ - include/uapi/linux/screen_info.h \ - include/linux/apm_bios.h \ - include/uapi/linux/apm_bios.h \ - include/linux/edd.h \ - include/uapi/linux/edd.h \ - arch/x86/include/asm/e820.h \ - $(wildcard include/config/efi.h) \ - $(wildcard include/config/hibernation.h) \ - arch/x86/include/uapi/asm/e820.h \ - $(wildcard include/config/x86/pmem/legacy.h) \ - $(wildcard include/config/intel/txt.h) \ - include/linux/ioport.h \ - $(wildcard include/config/memory/hotremove.h) \ - arch/x86/include/asm/ist.h \ - arch/x86/include/uapi/asm/ist.h \ - include/video/edid.h \ - $(wildcard include/config/x86.h) \ - include/uapi/video/edid.h \ - arch/x86/include/asm/apicdef.h \ - arch/x86/include/asm/apic.h \ - $(wildcard include/config/x86/x2apic.h) \ - include/linux/pm.h \ - $(wildcard include/config/vt/console/sleep.h) \ - $(wildcard include/config/pm/sleep.h) \ - $(wildcard include/config/pm/clk.h) \ - $(wildcard include/config/pm/generic/domains.h) \ - arch/x86/include/asm/fixmap.h \ - $(wildcard include/config/paravirt/clock.h) \ - $(wildcard include/config/provide/ohci1394/dma/init.h) \ - $(wildcard include/config/pci/mmconfig.h) \ - $(wildcard include/config/x86/intel/mid.h) \ - arch/x86/include/asm/acpi.h \ - $(wildcard include/config/acpi.h) \ - $(wildcard include/config/acpi/numa.h) \ - include/acpi/pdc_intel.h \ - arch/x86/include/asm/numa.h \ - $(wildcard include/config/numa/emu.h) \ - arch/x86/include/asm/topology.h \ - include/asm-generic/topology.h \ - $(wildcard include/config/have/memoryless/nodes.h) \ - arch/x86/include/asm/realmode.h \ - $(wildcard include/config/acpi/sleep.h) \ - arch/x86/include/asm/io.h \ - $(wildcard include/config/mtrr.h) \ - arch/x86/include/generated/asm/early_ioremap.h \ - include/asm-generic/early_ioremap.h \ - $(wildcard include/config/generic/early/ioremap.h) \ - include/asm-generic/iomap.h \ - $(wildcard include/config/has/ioport/map.h) \ - $(wildcard include/config/pci.h) \ - $(wildcard include/config/generic/iomap.h) \ - include/asm-generic/pci_iomap.h \ - $(wildcard include/config/no/generic/pci/ioport/map.h) \ - $(wildcard include/config/generic/pci/iomap.h) \ - include/xen/xen.h \ - $(wildcard include/config/xen/dom0.h) \ - $(wildcard include/config/xen/pvh.h) \ - include/xen/interface/xen.h \ - arch/x86/include/asm/xen/interface.h \ - arch/x86/include/asm/xen/interface_64.h \ - arch/x86/include/asm/pvclock-abi.h \ - arch/x86/include/asm/xen/hypervisor.h \ - include/xen/features.h \ - include/xen/interface/features.h \ - arch/x86/include/asm/pvclock.h \ - include/linux/clocksource.h \ - $(wildcard include/config/arch/clocksource/data.h) \ - $(wildcard include/config/clocksource/watchdog.h) \ - $(wildcard include/config/clksrc/of.h) \ - arch/x86/include/asm/clocksource.h \ - arch/x86/include/uapi/asm/vsyscall.h \ - include/asm-generic/fixmap.h \ - arch/x86/include/asm/idle.h \ - arch/x86/include/asm/io_apic.h \ - arch/x86/include/asm/irq_vectors.h \ - $(wildcard include/config/have/kvm.h) \ - $(wildcard include/config/pci/msi.h) \ - include/linux/sem.h \ - include/uapi/linux/sem.h \ - include/linux/ipc.h \ - include/linux/uidgid.h \ - $(wildcard include/config/user/ns.h) \ - include/linux/highuid.h \ - include/uapi/linux/ipc.h \ - arch/x86/include/uapi/asm/ipcbuf.h \ - include/uapi/asm-generic/ipcbuf.h \ - arch/x86/include/uapi/asm/sembuf.h \ - include/linux/shm.h \ - include/uapi/linux/shm.h \ - arch/x86/include/uapi/asm/shmbuf.h \ - include/uapi/asm-generic/shmbuf.h \ - arch/x86/include/asm/shmparam.h \ - include/linux/signal.h \ - $(wildcard include/config/old/sigaction.h) \ - include/uapi/linux/signal.h \ - arch/x86/include/asm/signal.h \ - arch/x86/include/uapi/asm/signal.h \ - include/uapi/asm-generic/signal-defs.h \ - arch/x86/include/uapi/asm/siginfo.h \ - include/asm-generic/siginfo.h \ - include/uapi/asm-generic/siginfo.h \ - include/linux/pid.h \ - include/linux/percpu.h \ - $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ - $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ - include/linux/mmdebug.h \ - $(wildcard include/config/debug/vm.h) \ - include/linux/pfn.h \ - include/linux/topology.h \ - $(wildcard include/config/use/percpu/numa/node/id.h) \ - include/linux/mmzone.h \ - $(wildcard include/config/force/max/zoneorder.h) \ - $(wildcard include/config/cma.h) \ - $(wildcard include/config/memory/isolation.h) \ - $(wildcard include/config/zone/dma.h) \ - $(wildcard include/config/zone/dma32.h) \ - $(wildcard include/config/memory/hotplug.h) \ - $(wildcard include/config/have/memblock/node/map.h) \ - $(wildcard include/config/flat/node/mem/map.h) \ - $(wildcard include/config/page/extension.h) \ - $(wildcard include/config/no/bootmem.h) \ - $(wildcard include/config/deferred/struct/page/init.h) \ - $(wildcard include/config/have/memory/present.h) \ - $(wildcard include/config/need/node/memmap/size.h) \ - $(wildcard include/config/need/multiple/nodes.h) \ - $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ - $(wildcard include/config/sparsemem/extreme.h) \ - $(wildcard include/config/have/arch/pfn/valid.h) \ - $(wildcard include/config/holes/in/zone.h) \ - $(wildcard include/config/arch/has/holes/memorymodel.h) \ - include/linux/pageblock-flags.h \ - $(wildcard include/config/hugetlb/page.h) \ - $(wildcard include/config/hugetlb/page/size/variable.h) \ - include/linux/memory_hotplug.h \ - $(wildcard include/config/have/arch/nodedata/extension.h) \ - $(wildcard include/config/have/bootmem/info/node.h) \ - arch/x86/include/asm/mmzone.h \ - arch/x86/include/asm/mmzone_64.h \ - include/linux/proportions.h \ - include/linux/percpu_counter.h \ - include/linux/gfp.h \ - include/linux/seccomp.h \ - $(wildcard include/config/seccomp.h) \ - $(wildcard include/config/have/arch/seccomp/filter.h) \ - $(wildcard include/config/seccomp/filter.h) \ - include/uapi/linux/seccomp.h \ - arch/x86/include/asm/seccomp.h \ - arch/x86/include/asm/unistd.h \ - $(wildcard include/config/x86/x32/abi.h) \ - arch/x86/include/uapi/asm/unistd.h \ - arch/x86/include/generated/uapi/asm/unistd_64.h \ - arch/x86/include/generated/asm/unistd_64_x32.h \ - arch/x86/include/asm/ia32_unistd.h \ - arch/x86/include/generated/asm/unistd_32_ia32.h \ - include/asm-generic/seccomp.h \ - include/uapi/linux/unistd.h \ - include/linux/rculist.h \ - include/linux/rtmutex.h \ - $(wildcard include/config/debug/rt/mutexes.h) \ - include/linux/resource.h \ - include/uapi/linux/resource.h \ - arch/x86/include/uapi/asm/resource.h \ - include/asm-generic/resource.h \ - include/uapi/asm-generic/resource.h \ - include/linux/hrtimer.h \ - $(wildcard include/config/high/res/timers.h) \ - $(wildcard include/config/timerfd.h) \ - include/linux/timerqueue.h \ - include/linux/task_io_accounting.h \ - $(wildcard include/config/task/io/accounting.h) \ - include/linux/latencytop.h \ - include/linux/cred.h \ - $(wildcard include/config/debug/credentials.h) \ - $(wildcard include/config/security.h) \ - include/linux/key.h \ - include/linux/assoc_array.h \ - $(wildcard include/config/associative/array.h) \ - include/linux/selinux.h \ - $(wildcard include/config/security/selinux.h) \ - include/uapi/linux/magic.h \ - include/linux/cgroup-defs.h \ - include/uapi/linux/limits.h \ - include/linux/idr.h \ - include/linux/percpu-refcount.h \ - include/linux/percpu-rwsem.h \ - include/linux/cgroup_subsys.h \ - $(wildcard include/config/cgroup/cpuacct.h) \ - $(wildcard include/config/cgroup/device.h) \ - $(wildcard include/config/cgroup/freezer.h) \ - $(wildcard include/config/cgroup/net/classid.h) \ - $(wildcard include/config/cgroup/perf.h) \ - $(wildcard include/config/cgroup/net/prio.h) \ - $(wildcard include/config/cgroup/hugetlb.h) \ - $(wildcard include/config/cgroup/debug.h) \ - include/linux/genhd.h \ - $(wildcard include/config/fail/make/request.h) \ - $(wildcard include/config/solaris/x86/partition.h) \ - $(wildcard include/config/bsd/disklabel.h) \ - $(wildcard include/config/unixware/disklabel.h) \ - $(wildcard include/config/minix/subpartition.h) \ - include/linux/kdev_t.h \ - include/uapi/linux/kdev_t.h \ - include/linux/slab.h \ - $(wildcard include/config/debug/slab.h) \ - $(wildcard include/config/failslab.h) \ - $(wildcard include/config/slab.h) \ - $(wildcard include/config/slub.h) \ - $(wildcard include/config/slob.h) \ - include/linux/kmemleak.h \ - $(wildcard include/config/debug/kmemleak.h) \ - include/linux/kasan.h \ - $(wildcard include/config/kasan/shadow/offset.h) \ - include/linux/device.h \ - $(wildcard include/config/debug/devres.h) \ - $(wildcard include/config/pinctrl.h) \ - $(wildcard include/config/dma/cma.h) \ - $(wildcard include/config/of.h) \ - $(wildcard include/config/devtmpfs.h) \ - $(wildcard include/config/sysfs/deprecated.h) \ - include/linux/kobject.h \ - $(wildcard include/config/uevent/helper.h) \ - $(wildcard include/config/debug/kobject/release.h) \ - include/linux/sysfs.h \ - include/linux/kernfs.h \ - $(wildcard include/config/kernfs.h) \ - include/linux/kobject_ns.h \ - include/linux/stat.h \ - arch/x86/include/uapi/asm/stat.h \ - include/uapi/linux/stat.h \ - include/linux/kref.h \ - include/linux/klist.h \ - include/linux/pinctrl/devinfo.h \ - include/linux/pinctrl/consumer.h \ - include/linux/seq_file.h \ - include/linux/pinctrl/pinctrl-state.h \ - include/linux/ratelimit.h \ - arch/x86/include/asm/device.h \ - $(wildcard include/config/x86/dev/dma/ops.h) \ - $(wildcard include/config/intel/iommu.h) \ - $(wildcard include/config/amd/iommu.h) \ - include/linux/pm_wakeup.h \ - include/linux/fs.h \ - $(wildcard include/config/fs/posix/acl.h) \ - $(wildcard include/config/cgroup/writeback.h) \ - $(wildcard include/config/ima.h) \ - $(wildcard include/config/fsnotify.h) \ - $(wildcard include/config/file/locking.h) \ - $(wildcard include/config/quota.h) \ - $(wildcard include/config/fs/dax.h) \ - $(wildcard include/config/migration.h) \ - include/linux/dcache.h \ - include/linux/rculist_bl.h \ - include/linux/list_bl.h \ - include/linux/bit_spinlock.h \ - include/linux/lockref.h \ - $(wildcard include/config/arch/use/cmpxchg/lockref.h) \ - include/linux/path.h \ - include/linux/list_lru.h \ - include/linux/shrinker.h \ - include/linux/radix-tree.h \ - include/linux/semaphore.h \ - include/uapi/linux/fiemap.h \ - include/linux/migrate_mode.h \ - include/linux/blk_types.h \ - include/uapi/linux/fs.h \ - include/linux/quota.h \ - $(wildcard include/config/quota/netlink/interface.h) \ - include/uapi/linux/dqblk_xfs.h \ - include/linux/dqblk_v1.h \ - include/linux/dqblk_v2.h \ - include/linux/dqblk_qtree.h \ - include/linux/projid.h \ - include/uapi/linux/quota.h \ - include/linux/nfs_fs_i.h \ - include/linux/fcntl.h \ - include/uapi/linux/fcntl.h \ - arch/x86/include/uapi/asm/fcntl.h \ - include/uapi/asm-generic/fcntl.h \ - include/linux/pagemap.h \ - include/linux/mm.h \ - $(wildcard include/config/ppc.h) \ - $(wildcard include/config/parisc.h) \ - $(wildcard include/config/metag.h) \ - $(wildcard include/config/ia64.h) \ - $(wildcard include/config/shmem.h) \ - $(wildcard include/config/debug/vm/rb.h) \ - $(wildcard include/config/debug/pagealloc.h) \ - $(wildcard include/config/hugetlbfs.h) \ - include/linux/debug_locks.h \ - $(wildcard include/config/debug/locking/api/selftests.h) \ - include/linux/page_ext.h \ - $(wildcard include/config/page/owner.h) \ - include/linux/stacktrace.h \ - $(wildcard include/config/stacktrace.h) \ - $(wildcard include/config/user/stacktrace/support.h) \ - arch/x86/include/asm/pgtable.h \ - $(wildcard include/config/have/arch/soft/dirty.h) \ - arch/x86/include/asm/pgtable_64.h \ - include/asm-generic/pgtable.h \ - $(wildcard include/config/have/arch/huge/vmap.h) \ - include/linux/page-flags.h \ - $(wildcard include/config/pageflags/extended.h) \ - $(wildcard include/config/arch/uses/pg/uncached.h) \ - $(wildcard include/config/memory/failure.h) \ - $(wildcard include/config/swap.h) \ - $(wildcard include/config/ksm.h) \ - include/linux/huge_mm.h \ - include/linux/vmstat.h \ - $(wildcard include/config/vm/event/counters.h) \ - $(wildcard include/config/debug/tlbflush.h) \ - $(wildcard include/config/debug/vm/vmacache.h) \ - include/linux/vm_event_item.h \ - $(wildcard include/config/memory/balloon.h) \ - $(wildcard include/config/balloon/compaction.h) \ - include/linux/highmem.h \ - include/linux/uaccess.h \ - arch/x86/include/asm/uaccess.h \ - $(wildcard include/config/x86/intel/usercopy.h) \ - $(wildcard include/config/debug/strict/user/copy/checks.h) \ - arch/x86/include/asm/smap.h \ - $(wildcard include/config/x86/smap.h) \ - arch/x86/include/asm/uaccess_64.h \ - include/linux/hardirq.h \ - include/linux/ftrace_irq.h \ - $(wildcard include/config/ftrace/nmi/enter.h) \ - include/linux/vtime.h \ - include/linux/context_tracking_state.h \ - $(wildcard include/config/context/tracking.h) \ - include/linux/static_key.h \ - arch/x86/include/asm/hardirq.h \ - $(wildcard include/config/x86/thermal/vector.h) \ - $(wildcard include/config/x86/mce/threshold.h) \ - $(wildcard include/config/x86/mce/amd.h) \ - $(wildcard include/config/hyperv.h) \ - include/linux/irq.h \ - $(wildcard include/config/irq/domain/hierarchy.h) \ - $(wildcard include/config/generic/pending/irq.h) \ - $(wildcard include/config/hardirqs/sw/resend.h) \ - $(wildcard include/config/generic/irq/legacy/alloc/hwirq.h) \ - $(wildcard include/config/generic/irq/legacy.h) \ - include/linux/irqhandler.h \ - include/linux/irqreturn.h \ - include/linux/irqnr.h \ - include/uapi/linux/irqnr.h \ - include/linux/io.h \ - arch/x86/include/asm/irq.h \ - arch/x86/include/asm/irq_regs.h \ - include/linux/irqdesc.h \ - $(wildcard include/config/irq/preflow/fasteoi.h) \ - $(wildcard include/config/sparse/irq.h) \ - $(wildcard include/config/handle/domain/irq.h) \ - arch/x86/include/asm/hw_irq.h \ - $(wildcard include/config/hpet/timer.h) \ - $(wildcard include/config/dmar/table.h) \ - $(wildcard include/config/ht/irq.h) \ - $(wildcard include/config/x86/uv.h) \ - include/linux/profile.h \ - $(wildcard include/config/profiling.h) \ - arch/x86/include/asm/sections.h \ - $(wildcard include/config/debug/rodata.h) \ - include/asm-generic/sections.h \ - arch/x86/include/asm/cacheflush.h \ - $(wildcard include/config/debug/rodata/test.h) \ - include/asm-generic/cacheflush.h \ - include/linux/hugetlb_inline.h \ - include/linux/backing-dev-defs.h \ - include/linux/flex_proportions.h \ - include/linux/mempool.h \ - include/linux/bio.h \ - include/linux/ioprio.h \ - include/linux/iocontext.h \ - include/linux/bsg.h \ - include/uapi/linux/bsg.h \ - include/linux/scatterlist.h \ - $(wildcard include/config/debug/sg.h) \ - $(wildcard include/config/need/sg/dma/length.h) \ - $(wildcard include/config/arch/has/sg/chain.h) \ - include/linux/elevator.h \ - include/linux/hashtable.h \ - include/linux/hash.h \ - $(wildcard include/config/arch/has/fast/multiplier.h) \ - include/linux/module.h \ - $(wildcard include/config/module/sig.h) \ - $(wildcard include/config/modules/tree/lookup.h) \ - $(wildcard include/config/kallsyms.h) \ - $(wildcard include/config/tracepoints.h) \ - $(wildcard include/config/event/tracing.h) \ - $(wildcard include/config/livepatch.h) \ - $(wildcard include/config/module/unload.h) \ - $(wildcard include/config/constructors.h) \ - $(wildcard include/config/debug/set/module/ronx.h) \ - include/linux/kmod.h \ - include/linux/elf.h \ - arch/x86/include/asm/elf.h \ - arch/x86/include/asm/user.h \ - arch/x86/include/asm/user_64.h \ - arch/x86/include/asm/vdso.h \ - $(wildcard include/config/x86/x32.h) \ - include/uapi/linux/elf.h \ - include/uapi/linux/elf-em.h \ - include/linux/moduleparam.h \ - $(wildcard include/config/alpha.h) \ - $(wildcard include/config/ppc64.h) \ - include/linux/rbtree_latch.h \ - arch/x86/include/asm/module.h \ - $(wildcard include/config/m586.h) \ - $(wildcard include/config/m586tsc.h) \ - $(wildcard include/config/m586mmx.h) \ - $(wildcard include/config/mcore2.h) \ - $(wildcard include/config/m686.h) \ - $(wildcard include/config/mpentiumii.h) \ - $(wildcard include/config/mpentiumiii.h) \ - $(wildcard include/config/mpentiumm.h) \ - $(wildcard include/config/mpentium4.h) \ - $(wildcard include/config/mk6.h) \ - $(wildcard include/config/mk8.h) \ - $(wildcard include/config/melan.h) \ - $(wildcard include/config/mcrusoe.h) \ - $(wildcard include/config/mefficeon.h) \ - $(wildcard include/config/mwinchipc6.h) \ - $(wildcard include/config/mwinchip3d.h) \ - $(wildcard include/config/mcyrixiii.h) \ - $(wildcard include/config/mviac3/2.h) \ - $(wildcard include/config/mviac7.h) \ - $(wildcard include/config/mgeodegx1.h) \ - $(wildcard include/config/mgeode/lx.h) \ - include/asm-generic/module.h \ - $(wildcard include/config/have/mod/arch/specific.h) \ - $(wildcard include/config/modules/use/elf/rel.h) \ - $(wildcard include/config/modules/use/elf/rela.h) \ - include/linux/file.h \ - include/net/sock.h \ - $(wildcard include/config/net.h) \ - $(wildcard include/config/ipv6.h) \ - $(wildcard include/config/rps.h) \ - $(wildcard include/config/net/rx/busy/poll.h) \ - $(wildcard include/config/xfrm.h) \ - $(wildcard include/config/inet.h) \ - include/linux/list_nulls.h \ - include/linux/netdevice.h \ - $(wildcard include/config/dcb.h) \ - $(wildcard include/config/wlan.h) \ - $(wildcard include/config/ax25.h) \ - $(wildcard include/config/mac80211/mesh.h) \ - $(wildcard include/config/net/ipip.h) \ - $(wildcard include/config/net/ipgre.h) \ - $(wildcard include/config/ipv6/sit.h) \ - $(wildcard include/config/ipv6/tunnel.h) \ - $(wildcard include/config/netpoll.h) \ - $(wildcard include/config/xps.h) \ - $(wildcard include/config/bql.h) \ - $(wildcard include/config/rfs/accel.h) \ - $(wildcard include/config/fcoe.h) \ - $(wildcard include/config/net/poll/controller.h) \ - $(wildcard include/config/libfcoe.h) \ - $(wildcard include/config/wireless/ext.h) \ - $(wildcard include/config/net/switchdev.h) \ - $(wildcard include/config/vlan/8021q.h) \ - $(wildcard include/config/net/dsa.h) \ - $(wildcard include/config/tipc.h) \ - $(wildcard include/config/mpls/routing.h) \ - $(wildcard include/config/net/cls/act.h) \ - $(wildcard include/config/netfilter/ingress.h) \ - $(wildcard include/config/net/flow/limit.h) \ - include/linux/delay.h \ - arch/x86/include/asm/delay.h \ - include/asm-generic/delay.h \ - include/linux/prefetch.h \ - include/linux/dmaengine.h \ - $(wildcard include/config/async/tx/enable/channel/switch.h) \ - $(wildcard include/config/dma/engine.h) \ - $(wildcard include/config/rapidio/dma/engine.h) \ - $(wildcard include/config/async/tx/dma.h) \ - include/linux/uio.h \ - include/uapi/linux/uio.h \ - include/linux/dynamic_queue_limits.h \ - include/linux/ethtool.h \ - include/linux/compat.h \ - $(wildcard include/config/compat/old/sigaction.h) \ - $(wildcard include/config/odd/rt/sigaction.h) \ - include/linux/socket.h \ - arch/x86/include/uapi/asm/socket.h \ - include/uapi/asm-generic/socket.h \ - arch/x86/include/uapi/asm/sockios.h \ - include/uapi/asm-generic/sockios.h \ - include/uapi/linux/sockios.h \ - include/uapi/linux/socket.h \ - include/uapi/linux/if.h \ - include/uapi/linux/hdlc/ioctl.h \ - include/uapi/linux/aio_abi.h \ - arch/x86/include/asm/compat.h \ - arch/x86/include/asm/user32.h \ - include/uapi/linux/ethtool.h \ - include/linux/if_ether.h \ - include/linux/skbuff.h \ - $(wildcard include/config/nf/conntrack.h) \ - $(wildcard include/config/bridge/netfilter.h) \ - $(wildcard include/config/ipv6/ndisc/nodetype.h) \ - $(wildcard include/config/net/sched.h) \ - $(wildcard include/config/network/secmark.h) \ - $(wildcard include/config/network/phy/timestamping.h) \ - $(wildcard include/config/netfilter/xt/target/trace.h) \ - $(wildcard include/config/nf/tables.h) \ - include/linux/kmemcheck.h \ - include/linux/net.h \ - include/linux/random.h \ - $(wildcard include/config/arch/random.h) \ - include/uapi/linux/random.h \ - arch/x86/include/asm/archrandom.h \ - include/uapi/linux/net.h \ - include/linux/textsearch.h \ - include/net/checksum.h \ - arch/x86/include/asm/checksum.h \ - arch/x86/include/asm/checksum_64.h \ - include/linux/dma-mapping.h \ - $(wildcard include/config/has/dma.h) \ - $(wildcard include/config/arch/has/dma/set/coherent/mask.h) \ - $(wildcard include/config/have/dma/attrs.h) \ - $(wildcard include/config/need/dma/map/state.h) \ - include/linux/dma-attrs.h \ - include/linux/dma-direction.h \ - arch/x86/include/asm/dma-mapping.h \ - $(wildcard include/config/isa.h) \ - $(wildcard include/config/x86/dma/remap.h) \ - include/linux/dma-debug.h \ - $(wildcard include/config/dma/api/debug.h) \ - arch/x86/include/asm/swiotlb.h \ - $(wildcard include/config/swiotlb.h) \ - include/linux/swiotlb.h \ - include/asm-generic/dma-coherent.h \ - $(wildcard include/config/have/generic/dma/coherent.h) \ - include/linux/dma-contiguous.h \ - include/asm-generic/dma-mapping-common.h \ - include/linux/netdev_features.h \ - include/net/flow_dissector.h \ - include/linux/in6.h \ - include/uapi/linux/in6.h \ - include/uapi/linux/libc-compat.h \ - include/uapi/linux/if_ether.h \ - include/linux/splice.h \ - include/linux/pipe_fs_i.h \ - include/net/net_namespace.h \ - $(wildcard include/config/ieee802154/6lowpan.h) \ - $(wildcard include/config/ip/sctp.h) \ - $(wildcard include/config/ip/dccp.h) \ - $(wildcard include/config/netfilter.h) \ - $(wildcard include/config/nf/defrag/ipv6.h) \ - $(wildcard include/config/wext/core.h) \ - $(wildcard include/config/ip/vs.h) \ - $(wildcard include/config/mpls.h) \ - $(wildcard include/config/net/ns.h) \ - include/net/flow.h \ - include/net/netns/core.h \ - include/net/netns/mib.h \ - $(wildcard include/config/xfrm/statistics.h) \ - include/net/snmp.h \ - include/uapi/linux/snmp.h \ - include/linux/u64_stats_sync.h \ - include/net/netns/unix.h \ - include/net/netns/packet.h \ - include/net/netns/ipv4.h \ - $(wildcard include/config/ip/multiple/tables.h) \ - $(wildcard include/config/ip/route/classid.h) \ - $(wildcard include/config/ip/mroute.h) \ - $(wildcard include/config/ip/mroute/multiple/tables.h) \ - include/net/inet_frag.h \ - include/net/netns/ipv6.h \ - $(wildcard include/config/ipv6/multiple/tables.h) \ - $(wildcard include/config/ipv6/mroute.h) \ - $(wildcard include/config/ipv6/mroute/multiple/tables.h) \ - include/net/dst_ops.h \ - include/net/netns/ieee802154_6lowpan.h \ - include/net/netns/sctp.h \ - include/net/netns/dccp.h \ - include/net/netns/netfilter.h \ - include/linux/netfilter_defs.h \ - include/uapi/linux/netfilter.h \ - include/linux/in.h \ - include/uapi/linux/in.h \ - include/net/netns/x_tables.h \ - $(wildcard include/config/bridge/nf/ebtables.h) \ - include/net/netns/conntrack.h \ - $(wildcard include/config/nf/conntrack/proc/compat.h) \ - $(wildcard include/config/nf/conntrack/events.h) \ - $(wildcard include/config/nf/conntrack/labels.h) \ - $(wildcard include/config/nf/nat/needed.h) \ - include/linux/netfilter/nf_conntrack_tcp.h \ - include/uapi/linux/netfilter/nf_conntrack_tcp.h \ - include/net/netns/nftables.h \ - include/net/netns/xfrm.h \ - include/uapi/linux/xfrm.h \ - include/net/flowcache.h \ - include/linux/interrupt.h \ - $(wildcard include/config/irq/forced/threading.h) \ - $(wildcard include/config/generic/irq/probe.h) \ - include/net/netns/mpls.h \ - include/linux/ns_common.h \ - include/linux/seq_file_net.h \ - include/net/dsa.h \ - $(wildcard include/config/net/dsa/hwmon.h) \ - include/linux/of.h \ - $(wildcard include/config/sparc.h) \ - $(wildcard include/config/of/dynamic.h) \ - $(wildcard include/config/attach/node.h) \ - $(wildcard include/config/detach/node.h) \ - $(wildcard include/config/add/property.h) \ - $(wildcard include/config/remove/property.h) \ - $(wildcard include/config/update/property.h) \ - $(wildcard include/config/no/change.h) \ - $(wildcard include/config/change/add.h) \ - $(wildcard include/config/change/remove.h) \ - $(wildcard include/config/of/resolve.h) \ - $(wildcard include/config/of/overlay.h) \ - include/linux/mod_devicetable.h \ - include/linux/uuid.h \ - include/uapi/linux/uuid.h \ - include/linux/property.h \ - include/linux/fwnode.h \ - include/linux/phy.h \ - include/linux/mii.h \ - include/uapi/linux/mii.h \ - include/linux/phy_fixed.h \ - $(wildcard include/config/fixed/phy.h) \ - include/net/netprio_cgroup.h \ - include/linux/cgroup.h \ - include/uapi/linux/cgroupstats.h \ - include/uapi/linux/taskstats.h \ - include/uapi/linux/neighbour.h \ - include/linux/netlink.h \ - include/net/scm.h \ - $(wildcard include/config/security/network.h) \ - include/linux/security.h \ - $(wildcard include/config/security/network/xfrm.h) \ - $(wildcard include/config/security/path.h) \ - $(wildcard include/config/securityfs.h) \ - include/linux/nsproxy.h \ - include/uapi/linux/netlink.h \ - include/uapi/linux/netdevice.h \ - include/uapi/linux/if_packet.h \ - include/linux/if_link.h \ - include/uapi/linux/if_link.h \ - include/uapi/linux/if_bonding.h \ - include/linux/page_counter.h \ - include/linux/memcontrol.h \ - $(wildcard include/config/memcg/swap.h) \ - include/linux/filter.h \ - $(wildcard include/config/bpf/jit.h) \ - include/uapi/linux/filter.h \ - include/uapi/linux/bpf_common.h \ - include/uapi/linux/bpf.h \ - include/linux/rculist_nulls.h \ - include/linux/poll.h \ - include/uapi/linux/poll.h \ - arch/x86/include/uapi/asm/poll.h \ - include/uapi/asm-generic/poll.h \ - include/net/dst.h \ - include/linux/rtnetlink.h \ - $(wildcard include/config/net/ingress.h) \ - include/uapi/linux/rtnetlink.h \ - include/uapi/linux/if_addr.h \ - include/net/neighbour.h \ - include/net/rtnetlink.h \ - include/net/netlink.h \ - include/net/tcp_states.h \ - include/uapi/linux/net_tstamp.h \ - include/linux/kthread.h \ - include/linux/debugfs.h \ - include/uapi/linux/nbd.h \ - -/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o: $(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o) - -$(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o): diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.tmp_versions/nbd.mod b/builder/dnbd3-qcow2-rootfs/binaries/nbd/.tmp_versions/nbd.mod deleted file mode 100644 index f2bc3309..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/.tmp_versions/nbd.mod +++ /dev/null @@ -1,2 +0,0 @@ -/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko -/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/Makefile b/builder/dnbd3-qcow2-rootfs/binaries/nbd/Makefile deleted file mode 100644 index ca0423f5..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -obj-m += nbd.o - -all: build - -build: update - make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) modules - -install: - make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) modules_install - -clean: - make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) clean - -update: - curl --location --remote-name https://raw.githubusercontent.com/torvalds/linux/master/drivers/block/nbd.c diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/Module.symvers b/builder/dnbd3-qcow2-rootfs/binaries/nbd/Module.symvers deleted file mode 100644 index e69de29b..00000000 diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/modules.order b/builder/dnbd3-qcow2-rootfs/binaries/nbd/modules.order deleted file mode 100644 index 8f303a78..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/modules.order +++ /dev/null @@ -1 +0,0 @@ -kernel//media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.c b/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.c deleted file mode 100644 index 1b876233..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.c +++ /dev/null @@ -1,1136 +0,0 @@ -/* - * Network block device - make block devices work over TCP - * - * Note that you can not swap over this thing, yet. Seems to work but - * deadlocks sometimes - you can not swap over TCP in general. - * - * Copyright 1997-2000, 2008 Pavel Machek - * Parts copyright 2001 Steven Whitehouse - * - * This file is released under GPLv2 or later. - * - * (part of code stolen from loop.c) - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -struct nbd_device { - u32 flags; - struct socket * sock; /* If == NULL, device is not ready, yet */ - int magic; - - spinlock_t queue_lock; - struct list_head queue_head; /* Requests waiting result */ - struct request *active_req; - wait_queue_head_t active_wq; - struct list_head waiting_queue; /* Requests to be sent */ - wait_queue_head_t waiting_wq; - - struct mutex tx_lock; - struct gendisk *disk; - int blksize; - loff_t bytesize; - int xmit_timeout; - bool disconnect; /* a disconnect has been requested by user */ - - struct timer_list timeout_timer; - spinlock_t tasks_lock; - struct task_struct *task_recv; - struct task_struct *task_send; - -#if IS_ENABLED(CONFIG_DEBUG_FS) - struct dentry *dbg_dir; -#endif -}; - -#if IS_ENABLED(CONFIG_DEBUG_FS) -static struct dentry *nbd_dbg_dir; -#endif - -#define nbd_name(nbd) ((nbd)->disk->disk_name) - -#define NBD_MAGIC 0x68797548 - -static unsigned int nbds_max = 16; -static struct nbd_device *nbd_dev; -static int max_part; - -/* - * Use just one lock (or at most 1 per NIC). Two arguments for this: - * 1. Each NIC is essentially a synchronization point for all servers - * accessed through that NIC so there's no need to have more locks - * than NICs anyway. - * 2. More locks lead to more "Dirty cache line bouncing" which will slow - * down each lock to the point where they're actually slower than just - * a single lock. - * Thanks go to Jens Axboe and Al Viro for their LKML emails explaining this! - */ -static DEFINE_SPINLOCK(nbd_lock); - -static inline struct device *nbd_to_dev(struct nbd_device *nbd) -{ - return disk_to_dev(nbd->disk); -} - -static const char *nbdcmd_to_ascii(int cmd) -{ - switch (cmd) { - case NBD_CMD_READ: return "read"; - case NBD_CMD_WRITE: return "write"; - case NBD_CMD_DISC: return "disconnect"; - case NBD_CMD_FLUSH: return "flush"; - case NBD_CMD_TRIM: return "trim/discard"; - } - return "invalid"; -} - -static void nbd_end_request(struct nbd_device *nbd, struct request *req) -{ - int error = req->errors ? -EIO : 0; - struct request_queue *q = req->q; - unsigned long flags; - - dev_dbg(nbd_to_dev(nbd), "request %p: %s\n", req, - error ? "failed" : "done"); - - spin_lock_irqsave(q->queue_lock, flags); - __blk_end_request_all(req, error); - spin_unlock_irqrestore(q->queue_lock, flags); -} - -/* - * Forcibly shutdown the socket causing all listeners to error - */ -static void sock_shutdown(struct nbd_device *nbd) -{ - if (!nbd->sock) - return; - - dev_warn(disk_to_dev(nbd->disk), "shutting down socket\n"); - kernel_sock_shutdown(nbd->sock, SHUT_RDWR); - nbd->sock = NULL; - del_timer_sync(&nbd->timeout_timer); -} - -static void nbd_xmit_timeout(unsigned long arg) -{ - struct nbd_device *nbd = (struct nbd_device *)arg; - unsigned long flags; - - if (list_empty(&nbd->queue_head)) - return; - - nbd->disconnect = true; - - spin_lock_irqsave(&nbd->tasks_lock, flags); - - if (nbd->task_recv) - force_sig(SIGKILL, nbd->task_recv); - - if (nbd->task_send) - force_sig(SIGKILL, nbd->task_send); - - spin_unlock_irqrestore(&nbd->tasks_lock, flags); - - dev_err(nbd_to_dev(nbd), "Connection timed out, killed receiver and sender, shutting down connection\n"); -} - -/* - * Send or receive packet. - */ -static int sock_xmit(struct nbd_device *nbd, int send, void *buf, int size, - int msg_flags) -{ - struct socket *sock = nbd->sock; - int result; - struct msghdr msg; - struct kvec iov; - sigset_t blocked, oldset; - unsigned long pflags = current->flags; - - if (unlikely(!sock)) { - dev_err(disk_to_dev(nbd->disk), - "Attempted %s on closed socket in sock_xmit\n", - (send ? "send" : "recv")); - return -EINVAL; - } - - /* Allow interception of SIGKILL only - * Don't allow other signals to interrupt the transmission */ - siginitsetinv(&blocked, sigmask(SIGKILL)); - sigprocmask(SIG_SETMASK, &blocked, &oldset); - - current->flags |= PF_MEMALLOC; - do { - sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC; - iov.iov_base = buf; - iov.iov_len = size; - msg.msg_name = NULL; - msg.msg_namelen = 0; - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_flags = msg_flags | MSG_NOSIGNAL; - - if (send) - result = kernel_sendmsg(sock, &msg, &iov, 1, size); - else - result = kernel_recvmsg(sock, &msg, &iov, 1, size, - msg.msg_flags); - - if (result <= 0) { - if (result == 0) - result = -EPIPE; /* short read */ - break; - } - size -= result; - buf += result; - } while (size > 0); - - sigprocmask(SIG_SETMASK, &oldset, NULL); - tsk_restore_flags(current, pflags, PF_MEMALLOC); - - if (!send && nbd->xmit_timeout) - mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout); - - return result; -} - -static inline int sock_send_bvec(struct nbd_device *nbd, struct bio_vec *bvec, - int flags) -{ - int result; - void *kaddr = kmap(bvec->bv_page); - result = sock_xmit(nbd, 1, kaddr + bvec->bv_offset, - bvec->bv_len, flags); - kunmap(bvec->bv_page); - return result; -} - -/* always call with the tx_lock held */ -static int nbd_send_req(struct nbd_device *nbd, struct request *req) -{ - int result, flags; - struct nbd_request request; - unsigned long size = blk_rq_bytes(req); - u32 type; - - if (req->cmd_type == REQ_TYPE_DRV_PRIV) - type = NBD_CMD_DISC; - else if (req->cmd_flags & REQ_DISCARD) - type = NBD_CMD_TRIM; - else if (req->cmd_flags & REQ_FLUSH) - type = NBD_CMD_FLUSH; - else if (rq_data_dir(req) == WRITE) - type = NBD_CMD_WRITE; - else - type = NBD_CMD_READ; - - memset(&request, 0, sizeof(request)); - request.magic = htonl(NBD_REQUEST_MAGIC); - request.type = htonl(type); - if (type != NBD_CMD_FLUSH && type != NBD_CMD_DISC) { - request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9); - request.len = htonl(size); - } - memcpy(request.handle, &req, sizeof(req)); - - dev_dbg(nbd_to_dev(nbd), "request %p: sending control (%s@%llu,%uB)\n", - req, nbdcmd_to_ascii(type), - (unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req)); - result = sock_xmit(nbd, 1, &request, sizeof(request), - (type == NBD_CMD_WRITE) ? MSG_MORE : 0); - if (result <= 0) { - dev_err(disk_to_dev(nbd->disk), - "Send control failed (result %d)\n", result); - return -EIO; - } - - if (type == NBD_CMD_WRITE) { - struct req_iterator iter; - struct bio_vec bvec; - /* - * we are really probing at internals to determine - * whether to set MSG_MORE or not... - */ - rq_for_each_segment(bvec, req, iter) { - flags = 0; - if (!rq_iter_last(bvec, iter)) - flags = MSG_MORE; - dev_dbg(nbd_to_dev(nbd), "request %p: sending %d bytes data\n", - req, bvec.bv_len); - result = sock_send_bvec(nbd, &bvec, flags); - if (result <= 0) { - dev_err(disk_to_dev(nbd->disk), - "Send data failed (result %d)\n", - result); - return -EIO; - } - } - } - return 0; -} - -static struct request *nbd_find_request(struct nbd_device *nbd, - struct request *xreq) -{ - struct request *req, *tmp; - int err; - - err = wait_event_interruptible(nbd->active_wq, nbd->active_req != xreq); - if (unlikely(err)) - return ERR_PTR(err); - - spin_lock(&nbd->queue_lock); - list_for_each_entry_safe(req, tmp, &nbd->queue_head, queuelist) { - if (req != xreq) - continue; - list_del_init(&req->queuelist); - spin_unlock(&nbd->queue_lock); - return req; - } - spin_unlock(&nbd->queue_lock); - - return ERR_PTR(-ENOENT); -} - -static inline int sock_recv_bvec(struct nbd_device *nbd, struct bio_vec *bvec) -{ - int result; - void *kaddr = kmap(bvec->bv_page); - result = sock_xmit(nbd, 0, kaddr + bvec->bv_offset, bvec->bv_len, - MSG_WAITALL); - kunmap(bvec->bv_page); - return result; -} - -/* NULL returned = something went wrong, inform userspace */ -static struct request *nbd_read_stat(struct nbd_device *nbd) -{ - int result; - struct nbd_reply reply; - struct request *req; - - reply.magic = 0; - result = sock_xmit(nbd, 0, &reply, sizeof(reply), MSG_WAITALL); - if (result <= 0) { - dev_err(disk_to_dev(nbd->disk), - "Receive control failed (result %d)\n", result); - return ERR_PTR(result); - } - - if (ntohl(reply.magic) != NBD_REPLY_MAGIC) { - dev_err(disk_to_dev(nbd->disk), "Wrong magic (0x%lx)\n", - (unsigned long)ntohl(reply.magic)); - return ERR_PTR(-EPROTO); - } - - req = nbd_find_request(nbd, *(struct request **)reply.handle); - if (IS_ERR(req)) { - result = PTR_ERR(req); - if (result != -ENOENT) - return ERR_PTR(result); - - dev_err(disk_to_dev(nbd->disk), "Unexpected reply (%p)\n", - reply.handle); - return ERR_PTR(-EBADR); - } - - if (ntohl(reply.error)) { - dev_err(disk_to_dev(nbd->disk), "Other side returned error (%d)\n", - ntohl(reply.error)); - req->errors++; - return req; - } - - dev_dbg(nbd_to_dev(nbd), "request %p: got reply\n", req); - if (rq_data_dir(req) != WRITE) { - struct req_iterator iter; - struct bio_vec bvec; - - rq_for_each_segment(bvec, req, iter) { - result = sock_recv_bvec(nbd, &bvec); - if (result <= 0) { - dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n", - result); - req->errors++; - return req; - } - dev_dbg(nbd_to_dev(nbd), "request %p: got %d bytes data\n", - req, bvec.bv_len); - } - } - return req; -} - -static ssize_t pid_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct gendisk *disk = dev_to_disk(dev); - struct nbd_device *nbd = (struct nbd_device *)disk->private_data; - - return sprintf(buf, "%d\n", task_pid_nr(nbd->task_recv)); -} - -static struct device_attribute pid_attr = { - .attr = { .name = "pid", .mode = S_IRUGO}, - .show = pid_show, -}; - -static int nbd_thread_recv(struct nbd_device *nbd) -{ - struct request *req; - int ret; - unsigned long flags; - - BUG_ON(nbd->magic != NBD_MAGIC); - - sk_set_memalloc(nbd->sock->sk); - - spin_lock_irqsave(&nbd->tasks_lock, flags); - nbd->task_recv = current; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); - - ret = device_create_file(disk_to_dev(nbd->disk), &pid_attr); - if (ret) { - dev_err(disk_to_dev(nbd->disk), "device_create_file failed!\n"); - - spin_lock_irqsave(&nbd->tasks_lock, flags); - nbd->task_recv = NULL; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); - - return ret; - } - - while (1) { - req = nbd_read_stat(nbd); - if (IS_ERR(req)) { - ret = PTR_ERR(req); - break; - } - - nbd_end_request(nbd, req); - } - - device_remove_file(disk_to_dev(nbd->disk), &pid_attr); - - spin_lock_irqsave(&nbd->tasks_lock, flags); - nbd->task_recv = NULL; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); - - if (signal_pending(current)) { - siginfo_t info; - - ret = dequeue_signal_lock(current, ¤t->blocked, &info); - dev_warn(nbd_to_dev(nbd), "pid %d, %s, got signal %d\n", - task_pid_nr(current), current->comm, ret); - mutex_lock(&nbd->tx_lock); - sock_shutdown(nbd); - mutex_unlock(&nbd->tx_lock); - ret = -ETIMEDOUT; - } - - return ret; -} - -static void nbd_clear_que(struct nbd_device *nbd) -{ - struct request *req; - - BUG_ON(nbd->magic != NBD_MAGIC); - - /* - * Because we have set nbd->sock to NULL under the tx_lock, all - * modifications to the list must have completed by now. For - * the same reason, the active_req must be NULL. - * - * As a consequence, we don't need to take the spin lock while - * purging the list here. - */ - BUG_ON(nbd->sock); - BUG_ON(nbd->active_req); - - while (!list_empty(&nbd->queue_head)) { - req = list_entry(nbd->queue_head.next, struct request, - queuelist); - list_del_init(&req->queuelist); - req->errors++; - nbd_end_request(nbd, req); - } - - while (!list_empty(&nbd->waiting_queue)) { - req = list_entry(nbd->waiting_queue.next, struct request, - queuelist); - list_del_init(&req->queuelist); - req->errors++; - nbd_end_request(nbd, req); - } - dev_dbg(disk_to_dev(nbd->disk), "queue cleared\n"); -} - - -static void nbd_handle_req(struct nbd_device *nbd, struct request *req) -{ - if (req->cmd_type != REQ_TYPE_FS) - goto error_out; - - if (rq_data_dir(req) == WRITE && - (nbd->flags & NBD_FLAG_READ_ONLY)) { - dev_err(disk_to_dev(nbd->disk), - "Write on read-only\n"); - goto error_out; - } - - req->errors = 0; - - mutex_lock(&nbd->tx_lock); - if (unlikely(!nbd->sock)) { - mutex_unlock(&nbd->tx_lock); - dev_err(disk_to_dev(nbd->disk), - "Attempted send on closed socket\n"); - goto error_out; - } - - nbd->active_req = req; - - if (nbd->xmit_timeout && list_empty_careful(&nbd->queue_head)) - mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout); - - if (nbd_send_req(nbd, req) != 0) { - dev_err(disk_to_dev(nbd->disk), "Request send failed\n"); - req->errors++; - nbd_end_request(nbd, req); - } else { - spin_lock(&nbd->queue_lock); - list_add_tail(&req->queuelist, &nbd->queue_head); - spin_unlock(&nbd->queue_lock); - } - - nbd->active_req = NULL; - mutex_unlock(&nbd->tx_lock); - wake_up_all(&nbd->active_wq); - - return; - -error_out: - req->errors++; - nbd_end_request(nbd, req); -} - -static int nbd_thread_send(void *data) -{ - struct nbd_device *nbd = data; - struct request *req; - unsigned long flags; - - spin_lock_irqsave(&nbd->tasks_lock, flags); - nbd->task_send = current; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); - - set_user_nice(current, MIN_NICE); - while (!kthread_should_stop() || !list_empty(&nbd->waiting_queue)) { - /* wait for something to do */ - wait_event_interruptible(nbd->waiting_wq, - kthread_should_stop() || - !list_empty(&nbd->waiting_queue)); - - if (signal_pending(current)) { - siginfo_t info; - int ret; - - ret = dequeue_signal_lock(current, ¤t->blocked, - &info); - dev_warn(nbd_to_dev(nbd), "pid %d, %s, got signal %d\n", - task_pid_nr(current), current->comm, ret); - mutex_lock(&nbd->tx_lock); - sock_shutdown(nbd); - mutex_unlock(&nbd->tx_lock); - break; - } - - /* extract request */ - if (list_empty(&nbd->waiting_queue)) - continue; - - spin_lock_irq(&nbd->queue_lock); - req = list_entry(nbd->waiting_queue.next, struct request, - queuelist); - list_del_init(&req->queuelist); - spin_unlock_irq(&nbd->queue_lock); - - /* handle request */ - nbd_handle_req(nbd, req); - } - - spin_lock_irqsave(&nbd->tasks_lock, flags); - nbd->task_send = NULL; - spin_unlock_irqrestore(&nbd->tasks_lock, flags); - - /* Clear maybe pending signals */ - if (signal_pending(current)) { - siginfo_t info; - dequeue_signal_lock(current, ¤t->blocked, &info); - } - - return 0; -} - -/* - * We always wait for result of write, for now. It would be nice to make it optional - * in future - * if ((rq_data_dir(req) == WRITE) && (nbd->flags & NBD_WRITE_NOCHK)) - * { printk( "Warning: Ignoring result!\n"); nbd_end_request( req ); } - */ - -static void nbd_request_handler(struct request_queue *q) - __releases(q->queue_lock) __acquires(q->queue_lock) -{ - struct request *req; - - while ((req = blk_fetch_request(q)) != NULL) { - struct nbd_device *nbd; - - spin_unlock_irq(q->queue_lock); - - nbd = req->rq_disk->private_data; - - BUG_ON(nbd->magic != NBD_MAGIC); - - dev_dbg(nbd_to_dev(nbd), "request %p: dequeued (flags=%x)\n", - req, req->cmd_type); - - if (unlikely(!nbd->sock)) { - dev_err(disk_to_dev(nbd->disk), - "Attempted send on closed socket\n"); - req->errors++; - nbd_end_request(nbd, req); - spin_lock_irq(q->queue_lock); - continue; - } - - spin_lock_irq(&nbd->queue_lock); - list_add_tail(&req->queuelist, &nbd->waiting_queue); - spin_unlock_irq(&nbd->queue_lock); - - wake_up(&nbd->waiting_wq); - - spin_lock_irq(q->queue_lock); - } -} - -static int nbd_dev_dbg_init(struct nbd_device *nbd); -static void nbd_dev_dbg_close(struct nbd_device *nbd); - -/* Must be called with tx_lock held */ - -static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, - unsigned int cmd, unsigned long arg) -{ - switch (cmd) { - case NBD_DISCONNECT: { - struct request sreq; - - dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n"); - if (!nbd->sock) - return -EINVAL; - - mutex_unlock(&nbd->tx_lock); - fsync_bdev(bdev); - mutex_lock(&nbd->tx_lock); - blk_rq_init(NULL, &sreq); - sreq.cmd_type = REQ_TYPE_DRV_PRIV; - - /* Check again after getting mutex back. */ - if (!nbd->sock) - return -EINVAL; - - nbd->disconnect = true; - - nbd_send_req(nbd, &sreq); - return 0; - } - - case NBD_CLEAR_SOCK: { - struct socket *sock = nbd->sock; - nbd->sock = NULL; - nbd_clear_que(nbd); - BUG_ON(!list_empty(&nbd->queue_head)); - BUG_ON(!list_empty(&nbd->waiting_queue)); - kill_bdev(bdev); - if (sock) - sockfd_put(sock); - return 0; - } - - case NBD_SET_SOCK: { - struct socket *sock; - int err; - if (nbd->sock) - return -EBUSY; - sock = sockfd_lookup(arg, &err); - if (sock) { - nbd->sock = sock; - if (max_part > 0) - bdev->bd_invalidated = 1; - nbd->disconnect = false; /* we're connected now */ - return 0; - } - return -EINVAL; - } - - case NBD_SET_BLKSIZE: - nbd->blksize = arg; - nbd->bytesize &= ~(nbd->blksize-1); - bdev->bd_inode->i_size = nbd->bytesize; - set_blocksize(bdev, nbd->blksize); - set_capacity(nbd->disk, nbd->bytesize >> 9); - return 0; - - case NBD_SET_SIZE: - nbd->bytesize = arg & ~(nbd->blksize-1); - bdev->bd_inode->i_size = nbd->bytesize; - set_blocksize(bdev, nbd->blksize); - set_capacity(nbd->disk, nbd->bytesize >> 9); - return 0; - - case NBD_SET_TIMEOUT: - nbd->xmit_timeout = arg * HZ; - if (arg) - mod_timer(&nbd->timeout_timer, - jiffies + nbd->xmit_timeout); - else - del_timer_sync(&nbd->timeout_timer); - - return 0; - - case NBD_SET_FLAGS: - nbd->flags = arg; - return 0; - - case NBD_SET_SIZE_BLOCKS: - nbd->bytesize = ((u64) arg) * nbd->blksize; - bdev->bd_inode->i_size = nbd->bytesize; - set_blocksize(bdev, nbd->blksize); - set_capacity(nbd->disk, nbd->bytesize >> 9); - return 0; - - case NBD_DO_IT: { - struct task_struct *thread; - struct socket *sock; - int error; - - if (nbd->task_recv) - return -EBUSY; - if (!nbd->sock) - return -EINVAL; - - mutex_unlock(&nbd->tx_lock); - - if (nbd->flags & NBD_FLAG_READ_ONLY) - set_device_ro(bdev, true); - if (nbd->flags & NBD_FLAG_SEND_TRIM) - queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, - nbd->disk->queue); - if (nbd->flags & NBD_FLAG_SEND_FLUSH) - blk_queue_flush(nbd->disk->queue, REQ_FLUSH); - else - blk_queue_flush(nbd->disk->queue, 0); - - thread = kthread_run(nbd_thread_send, nbd, "%s", - nbd_name(nbd)); - if (IS_ERR(thread)) { - mutex_lock(&nbd->tx_lock); - return PTR_ERR(thread); - } - - nbd_dev_dbg_init(nbd); - error = nbd_thread_recv(nbd); - nbd_dev_dbg_close(nbd); - kthread_stop(thread); - - mutex_lock(&nbd->tx_lock); - - sock_shutdown(nbd); - sock = nbd->sock; - nbd->sock = NULL; - nbd_clear_que(nbd); - kill_bdev(bdev); - queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue); - set_device_ro(bdev, false); - if (sock) - sockfd_put(sock); - nbd->flags = 0; - nbd->bytesize = 0; - bdev->bd_inode->i_size = 0; - set_capacity(nbd->disk, 0); - if (max_part > 0) - blkdev_reread_part(bdev); - if (nbd->disconnect) /* user requested, ignore socket errors */ - return 0; - return error; - } - - case NBD_CLEAR_QUE: - /* - * This is for compatibility only. The queue is always cleared - * by NBD_DO_IT or NBD_CLEAR_SOCK. - */ - return 0; - - case NBD_PRINT_DEBUG: - dev_info(disk_to_dev(nbd->disk), - "next = %p, prev = %p, head = %p\n", - nbd->queue_head.next, nbd->queue_head.prev, - &nbd->queue_head); - return 0; - } - return -ENOTTY; -} - -static int nbd_ioctl(struct block_device *bdev, fmode_t mode, - unsigned int cmd, unsigned long arg) -{ - struct nbd_device *nbd = bdev->bd_disk->private_data; - int error; - - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - BUG_ON(nbd->magic != NBD_MAGIC); - - mutex_lock(&nbd->tx_lock); - error = __nbd_ioctl(bdev, nbd, cmd, arg); - mutex_unlock(&nbd->tx_lock); - - return error; -} - -static const struct block_device_operations nbd_fops = -{ - .owner = THIS_MODULE, - .ioctl = nbd_ioctl, -}; - -#if IS_ENABLED(CONFIG_DEBUG_FS) - -static int nbd_dbg_tasks_show(struct seq_file *s, void *unused) -{ - struct nbd_device *nbd = s->private; - - if (nbd->task_recv) - seq_printf(s, "recv: %d\n", task_pid_nr(nbd->task_recv)); - if (nbd->task_send) - seq_printf(s, "send: %d\n", task_pid_nr(nbd->task_send)); - - return 0; -} - -static int nbd_dbg_tasks_open(struct inode *inode, struct file *file) -{ - return single_open(file, nbd_dbg_tasks_show, inode->i_private); -} - -static const struct file_operations nbd_dbg_tasks_ops = { - .open = nbd_dbg_tasks_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static int nbd_dbg_flags_show(struct seq_file *s, void *unused) -{ - struct nbd_device *nbd = s->private; - u32 flags = nbd->flags; - - seq_printf(s, "Hex: 0x%08x\n\n", flags); - - seq_puts(s, "Known flags:\n"); - - if (flags & NBD_FLAG_HAS_FLAGS) - seq_puts(s, "NBD_FLAG_HAS_FLAGS\n"); - if (flags & NBD_FLAG_READ_ONLY) - seq_puts(s, "NBD_FLAG_READ_ONLY\n"); - if (flags & NBD_FLAG_SEND_FLUSH) - seq_puts(s, "NBD_FLAG_SEND_FLUSH\n"); - if (flags & NBD_FLAG_SEND_TRIM) - seq_puts(s, "NBD_FLAG_SEND_TRIM\n"); - - return 0; -} - -static int nbd_dbg_flags_open(struct inode *inode, struct file *file) -{ - return single_open(file, nbd_dbg_flags_show, inode->i_private); -} - -static const struct file_operations nbd_dbg_flags_ops = { - .open = nbd_dbg_flags_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - -static int nbd_dev_dbg_init(struct nbd_device *nbd) -{ - struct dentry *dir; - struct dentry *f; - - dir = debugfs_create_dir(nbd_name(nbd), nbd_dbg_dir); - if (IS_ERR_OR_NULL(dir)) { - dev_err(nbd_to_dev(nbd), "Failed to create debugfs dir for '%s' (%ld)\n", - nbd_name(nbd), PTR_ERR(dir)); - return PTR_ERR(dir); - } - nbd->dbg_dir = dir; - - f = debugfs_create_file("tasks", 0444, dir, nbd, &nbd_dbg_tasks_ops); - if (IS_ERR_OR_NULL(f)) { - dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'tasks', %ld\n", - PTR_ERR(f)); - return PTR_ERR(f); - } - - f = debugfs_create_u64("size_bytes", 0444, dir, &nbd->bytesize); - if (IS_ERR_OR_NULL(f)) { - dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'size_bytes', %ld\n", - PTR_ERR(f)); - return PTR_ERR(f); - } - - f = debugfs_create_u32("timeout", 0444, dir, &nbd->xmit_timeout); - if (IS_ERR_OR_NULL(f)) { - dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'timeout', %ld\n", - PTR_ERR(f)); - return PTR_ERR(f); - } - - f = debugfs_create_u32("blocksize", 0444, dir, &nbd->blksize); - if (IS_ERR_OR_NULL(f)) { - dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'blocksize', %ld\n", - PTR_ERR(f)); - return PTR_ERR(f); - } - - f = debugfs_create_file("flags", 0444, dir, &nbd, &nbd_dbg_flags_ops); - if (IS_ERR_OR_NULL(f)) { - dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'flags', %ld\n", - PTR_ERR(f)); - return PTR_ERR(f); - } - - return 0; -} - -static void nbd_dev_dbg_close(struct nbd_device *nbd) -{ - debugfs_remove_recursive(nbd->dbg_dir); -} - -static int nbd_dbg_init(void) -{ - struct dentry *dbg_dir; - - dbg_dir = debugfs_create_dir("nbd", NULL); - if (IS_ERR(dbg_dir)) - return PTR_ERR(dbg_dir); - - nbd_dbg_dir = dbg_dir; - - return 0; -} - -static void nbd_dbg_close(void) -{ - debugfs_remove_recursive(nbd_dbg_dir); -} - -#else /* IS_ENABLED(CONFIG_DEBUG_FS) */ - -static int nbd_dev_dbg_init(struct nbd_device *nbd) -{ - return 0; -} - -static void nbd_dev_dbg_close(struct nbd_device *nbd) -{ -} - -static int nbd_dbg_init(void) -{ - return 0; -} - -static void nbd_dbg_close(void) -{ -} - -#endif - -/* - * And here should be modules and kernel interface - * (Just smiley confuses emacs :-) - */ - -static int __init nbd_init(void) -{ - int err = -ENOMEM; - int i; - int part_shift; - - BUILD_BUG_ON(sizeof(struct nbd_request) != 28); - - if (max_part < 0) { - printk(KERN_ERR "nbd: max_part must be >= 0\n"); - return -EINVAL; - } - - part_shift = 0; - if (max_part > 0) { - part_shift = fls(max_part); - - /* - * Adjust max_part according to part_shift as it is exported - * to user space so that user can know the max number of - * partition kernel should be able to manage. - * - * Note that -1 is required because partition 0 is reserved - * for the whole disk. - */ - max_part = (1UL << part_shift) - 1; - } - - if ((1UL << part_shift) > DISK_MAX_PARTS) - return -EINVAL; - - if (nbds_max > 1UL << (MINORBITS - part_shift)) - return -EINVAL; - - nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL); - if (!nbd_dev) - return -ENOMEM; - - for (i = 0; i < nbds_max; i++) { - struct gendisk *disk = alloc_disk(1 << part_shift); - if (!disk) - goto out; - nbd_dev[i].disk = disk; - /* - * The new linux 2.5 block layer implementation requires - * every gendisk to have its very own request_queue struct. - * These structs are big so we dynamically allocate them. - */ - disk->queue = blk_init_queue(nbd_request_handler, &nbd_lock); - if (!disk->queue) { - put_disk(disk); - goto out; - } - /* - * Tell the block layer that we are not a rotational device - */ - queue_flag_set_unlocked(QUEUE_FLAG_NONROT, disk->queue); - queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, disk->queue); - disk->queue->limits.discard_granularity = 512; - blk_queue_max_discard_sectors(disk->queue, UINT_MAX); - disk->queue->limits.discard_zeroes_data = 0; - blk_queue_max_hw_sectors(disk->queue, 65536); - disk->queue->limits.max_sectors = 256; - } - - if (register_blkdev(NBD_MAJOR, "nbd")) { - err = -EIO; - goto out; - } - - printk(KERN_INFO "nbd: registered device at major %d\n", NBD_MAJOR); - - nbd_dbg_init(); - - for (i = 0; i < nbds_max; i++) { - struct gendisk *disk = nbd_dev[i].disk; - nbd_dev[i].magic = NBD_MAGIC; - INIT_LIST_HEAD(&nbd_dev[i].waiting_queue); - spin_lock_init(&nbd_dev[i].queue_lock); - spin_lock_init(&nbd_dev[i].tasks_lock); - INIT_LIST_HEAD(&nbd_dev[i].queue_head); - mutex_init(&nbd_dev[i].tx_lock); - init_timer(&nbd_dev[i].timeout_timer); - nbd_dev[i].timeout_timer.function = nbd_xmit_timeout; - nbd_dev[i].timeout_timer.data = (unsigned long)&nbd_dev[i]; - init_waitqueue_head(&nbd_dev[i].active_wq); - init_waitqueue_head(&nbd_dev[i].waiting_wq); - nbd_dev[i].blksize = 1024; - nbd_dev[i].bytesize = 0; - disk->major = NBD_MAJOR; - disk->first_minor = i << part_shift; - disk->fops = &nbd_fops; - disk->private_data = &nbd_dev[i]; - sprintf(disk->disk_name, "nbd%d", i); - set_capacity(disk, 0); - add_disk(disk); - } - - return 0; -out: - while (i--) { - blk_cleanup_queue(nbd_dev[i].disk->queue); - put_disk(nbd_dev[i].disk); - } - kfree(nbd_dev); - return err; -} - -static void __exit nbd_cleanup(void) -{ - int i; - - nbd_dbg_close(); - - for (i = 0; i < nbds_max; i++) { - struct gendisk *disk = nbd_dev[i].disk; - nbd_dev[i].magic = 0; - if (disk) { - del_gendisk(disk); - blk_cleanup_queue(disk->queue); - put_disk(disk); - } - } - unregister_blkdev(NBD_MAJOR, "nbd"); - kfree(nbd_dev); - printk(KERN_INFO "nbd: unregistered device at major %d\n", NBD_MAJOR); -} - -module_init(nbd_init); -module_exit(nbd_cleanup); - -MODULE_DESCRIPTION("Network Block Device"); -MODULE_LICENSE("GPL"); - -module_param(nbds_max, int, 0444); -MODULE_PARM_DESC(nbds_max, "number of network block devices to initialize (default: 16)"); -module_param(max_part, int, 0444); -MODULE_PARM_DESC(max_part, "number of partitions per device (default: 0)"); diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.ko b/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.ko deleted file mode 100644 index 4829b5b6..00000000 Binary files a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.ko and /dev/null differ diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.c b/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.c deleted file mode 100644 index 8e9bffe6..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.c +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include -#include - -MODULE_INFO(vermagic, VERMAGIC_STRING); - -__visible struct module __this_module -__attribute__((section(".gnu.linkonce.this_module"))) = { - .name = KBUILD_MODNAME, - .init = init_module, -#ifdef CONFIG_MODULE_UNLOAD - .exit = cleanup_module, -#endif - .arch = MODULE_ARCH_INIT, -}; - -static const struct modversion_info ____versions[] -__used -__attribute__((section("__versions"))) = { - { 0x6455f54, __VMLINUX_SYMBOL_STR(module_layout) }, - { 0x50c7d0f8, __VMLINUX_SYMBOL_STR(single_release) }, - { 0x950ca83f, __VMLINUX_SYMBOL_STR(seq_read) }, - { 0xef9b791f, __VMLINUX_SYMBOL_STR(seq_lseek) }, - { 0x5538af9, __VMLINUX_SYMBOL_STR(param_ops_int) }, - { 0xb5a459dc, __VMLINUX_SYMBOL_STR(unregister_blkdev) }, - { 0x1b9e8318, __VMLINUX_SYMBOL_STR(del_gendisk) }, - { 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) }, - { 0x981936b7, __VMLINUX_SYMBOL_STR(blk_cleanup_queue) }, - { 0x73107d7d, __VMLINUX_SYMBOL_STR(add_disk) }, - { 0x9e88526, __VMLINUX_SYMBOL_STR(__init_waitqueue_head) }, - { 0x9580deb, __VMLINUX_SYMBOL_STR(init_timer_key) }, - { 0x69436492, __VMLINUX_SYMBOL_STR(__mutex_init) }, - { 0x71a50dbc, __VMLINUX_SYMBOL_STR(register_blkdev) }, - { 0x1ecdaab, __VMLINUX_SYMBOL_STR(blk_queue_max_hw_sectors) }, - { 0x1a67801d, __VMLINUX_SYMBOL_STR(blk_queue_max_discard_sectors) }, - { 0x86a65424, __VMLINUX_SYMBOL_STR(put_disk) }, - { 0x89897b2, __VMLINUX_SYMBOL_STR(blk_init_queue) }, - { 0xb1f77288, __VMLINUX_SYMBOL_STR(alloc_disk) }, - { 0xd2b09ce5, __VMLINUX_SYMBOL_STR(__kmalloc) }, - { 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) }, - { 0xc6cbbc89, __VMLINUX_SYMBOL_STR(capable) }, - { 0x98402f5a, __VMLINUX_SYMBOL_STR(blkdev_reread_part) }, - { 0xee59790e, __VMLINUX_SYMBOL_STR(set_device_ro) }, - { 0xae71b343, __VMLINUX_SYMBOL_STR(kthread_stop) }, - { 0xfd67e92, __VMLINUX_SYMBOL_STR(debugfs_remove_recursive) }, - { 0xae5350d, __VMLINUX_SYMBOL_STR(device_remove_file) }, - { 0xb43b11d2, __VMLINUX_SYMBOL_STR(device_create_file) }, - { 0xbe49dab0, __VMLINUX_SYMBOL_STR(sk_set_memalloc) }, - { 0x88c48e5a, __VMLINUX_SYMBOL_STR(debugfs_create_u32) }, - { 0xab6db40b, __VMLINUX_SYMBOL_STR(debugfs_create_u64) }, - { 0x2fff7016, __VMLINUX_SYMBOL_STR(debugfs_create_file) }, - { 0xe09664fa, __VMLINUX_SYMBOL_STR(debugfs_create_dir) }, - { 0x6c4cedbe, __VMLINUX_SYMBOL_STR(wake_up_process) }, - { 0x98f4d672, __VMLINUX_SYMBOL_STR(kthread_create_on_node) }, - { 0x2141fd89, __VMLINUX_SYMBOL_STR(blk_queue_flush) }, - { 0x2f43d7d4, __VMLINUX_SYMBOL_STR(blk_rq_init) }, - { 0xdcd71098, __VMLINUX_SYMBOL_STR(fsync_bdev) }, - { 0x3ab93be1, __VMLINUX_SYMBOL_STR(set_blocksize) }, - { 0xd52ba2c0, __VMLINUX_SYMBOL_STR(_dev_info) }, - { 0x58744728, __VMLINUX_SYMBOL_STR(fput) }, - { 0x94cc0370, __VMLINUX_SYMBOL_STR(kill_bdev) }, - { 0x4ee1e3f, __VMLINUX_SYMBOL_STR(sockfd_lookup) }, - { 0xc6a83d75, __VMLINUX_SYMBOL_STR(blk_fetch_request) }, - { 0xc58a93cf, __VMLINUX_SYMBOL_STR(dequeue_signal) }, - { 0xa6bbd805, __VMLINUX_SYMBOL_STR(__wake_up) }, - { 0xb4f0243e, __VMLINUX_SYMBOL_STR(mutex_unlock) }, - { 0xc23bebb2, __VMLINUX_SYMBOL_STR(mutex_lock) }, - { 0xbfe6f427, __VMLINUX_SYMBOL_STR(_raw_spin_unlock_irq) }, - { 0xe5815f8a, __VMLINUX_SYMBOL_STR(_raw_spin_lock_irq) }, - { 0xb3f7646e, __VMLINUX_SYMBOL_STR(kthread_should_stop) }, - { 0xb2fd3ea5, __VMLINUX_SYMBOL_STR(set_user_nice) }, - { 0xef370d73, __VMLINUX_SYMBOL_STR(__blk_end_request_all) }, - { 0x1916e38c, __VMLINUX_SYMBOL_STR(_raw_spin_unlock_irqrestore) }, - { 0x4aafc56b, __VMLINUX_SYMBOL_STR(force_sig) }, - { 0x680ec266, __VMLINUX_SYMBOL_STR(_raw_spin_lock_irqsave) }, - { 0x706d051c, __VMLINUX_SYMBOL_STR(del_timer_sync) }, - { 0xa9064ecb, __VMLINUX_SYMBOL_STR(kernel_sock_shutdown) }, - { 0xe3fbaa2e, __VMLINUX_SYMBOL_STR(dev_warn) }, - { 0x2f7f274e, __VMLINUX_SYMBOL_STR(seq_puts) }, - { 0xd1f58462, __VMLINUX_SYMBOL_STR(seq_printf) }, - { 0xe1e12065, __VMLINUX_SYMBOL_STR(single_open) }, - { 0x1e047854, __VMLINUX_SYMBOL_STR(warn_slowpath_fmt) }, - { 0x2ea92197, __VMLINUX_SYMBOL_STR(__dynamic_dev_dbg) }, - { 0x30ff9767, __VMLINUX_SYMBOL_STR(dev_err) }, - { 0x16e5c2a, __VMLINUX_SYMBOL_STR(mod_timer) }, - { 0x7d11c268, __VMLINUX_SYMBOL_STR(jiffies) }, - { 0x722e2a29, __VMLINUX_SYMBOL_STR(kernel_recvmsg) }, - { 0x551b9a0e, __VMLINUX_SYMBOL_STR(kernel_sendmsg) }, - { 0x6a5fa363, __VMLINUX_SYMBOL_STR(sigprocmask) }, - { 0x97bb6e16, __VMLINUX_SYMBOL_STR(current_task) }, - { 0xdb7305a1, __VMLINUX_SYMBOL_STR(__stack_chk_fail) }, - { 0xf08242c2, __VMLINUX_SYMBOL_STR(finish_wait) }, - { 0x2207a57f, __VMLINUX_SYMBOL_STR(prepare_to_wait_event) }, - { 0x1000e51, __VMLINUX_SYMBOL_STR(schedule) }, - { 0xdae80100, __VMLINUX_SYMBOL_STR(_raw_spin_unlock) }, - { 0xe259ae9e, __VMLINUX_SYMBOL_STR(_raw_spin_lock) }, - { 0x91715312, __VMLINUX_SYMBOL_STR(sprintf) }, - { 0xbdfb6dbb, __VMLINUX_SYMBOL_STR(__fentry__) }, -}; - -static const char __module_depends[] -__used -__attribute__((section(".modinfo"))) = -"depends="; - diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.o b/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.o deleted file mode 100644 index 988957a2..00000000 Binary files a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.mod.o and /dev/null differ diff --git a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.o b/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.o deleted file mode 100644 index 9da8e4d6..00000000 Binary files a/builder/dnbd3-qcow2-rootfs/binaries/nbd/nbd.o and /dev/null differ diff --git a/builder/dnbd3-qcow2-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c b/builder/dnbd3-qcow2-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c deleted file mode 100644 index 8f0fc108..00000000 --- a/builder/dnbd3-qcow2-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include - -void print_array(int argc, char *argv[]) { - // Helper function to print given array with given length. - int i = 0; - int j = 0; - for (i = 0; i < argc; i ++) { - j = 0; - while(argv[i][j] != '\0') - printf("%c", argv[i][j++]); - printf(" "); - } - printf("\n"); -} -int main(int argc, char *argv[]) { - int count; - // Last item acts as null pointer. - char **copy = calloc(sizeof(char *), argc); - // Slice first given command line argument. - for (count = 0; count < argc - 1; count++) - copy[count] = strdup(argv[count + 1]); - // Adding systemd indicator to preserve wrapped process during changing - // root filesystem. We mark wrapper and child process. - argv[0][0] = '@'; - copy[0][0] = '@'; - if (-1 == execvp(argv[1], copy)) { - perror("Executing child process failed."); - return -1; - } -} diff --git a/builder/dnbd3-qcow2-rootfs/debugging-tools/endless b/builder/dnbd3-qcow2-rootfs/debugging-tools/endless deleted file mode 100755 index de7a8c0a..00000000 Binary files a/builder/dnbd3-qcow2-rootfs/debugging-tools/endless and /dev/null differ diff --git a/builder/dnbd3-qcow2-rootfs/debugging-tools/endless.c b/builder/dnbd3-qcow2-rootfs/debugging-tools/endless.c deleted file mode 100644 index 22c9bc50..00000000 --- a/builder/dnbd3-qcow2-rootfs/debugging-tools/endless.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include -#include - -int main(int argc, char *argv[]) { - // Provides a dummy worker. - while (1) - sleep(999999999); -} diff --git a/builder/dnbd3-qcow2-rootfs/debugging-tools/network.functions b/builder/dnbd3-qcow2-rootfs/debugging-tools/network.functions deleted file mode 100644 index 89ca5a20..00000000 --- a/builder/dnbd3-qcow2-rootfs/debugging-tools/network.functions +++ /dev/null @@ -1,23 +0,0 @@ -wait_for_iface() { - local DEVICE=$1 - local TIMEOUT=10 - echo -n "Waiting for interface $DEVICE: " - # Some systems don't have operstate. Seems to be hardware dependent - [ ! -e "/sys/class/net/${DEVICE}/operstate" ] && usleep 10000 - if [ -e "/sys/class/net/${DEVICE}/operstate" ]; then - while true; do - # check linkstate - [ "x$(cat "/sys/class/net/${DEVICE}/operstate")" == "xup" ] && break - TIMEOUT=$(( $TIMEOUT - 1 )) # don't wait forever, the pcnet iface of vmware will never be "up" although it's working - [ "$TIMEOUT" -le 0 ] && break - # else - echo -n "." - usleep 500000 - done - else - # we really don't have a operstate .. then just wait a sec and hope for the best. - sleep 1 - fi - echo ".$(cat "/sys/class/net/${DEVICE}/operstate" 2>/dev/null)" -} -true diff --git a/builder/dnbd3-qcow2-rootfs/debugging-tools/setup-network.sh b/builder/dnbd3-qcow2-rootfs/debugging-tools/setup-network.sh deleted file mode 100644 index 3b32a68c..00000000 --- a/builder/dnbd3-qcow2-rootfs/debugging-tools/setup-network.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -echo "Setting up network..." - -echo "Main MAC address is '$MAC'" - -# setup network -source /inc/network.functions - -# set up loopback networking -echo "Setting up loopback" -ip link set dev lo up 2>/dev/null -ip addr add 127.0.0.1/8 dev lo 2>/dev/null - -echo "Setting up bridge" -BRIDGE="br0" - -# Following was supposed to prevent scripts from getting confused by multiple interfaces with same MAC - does not work though -## Flip mac address of original interface - this var is not local so init sees the changes too -#MAC="$(echo "$MAC" | awk -F ':' '{printf $1 ":" $2 ":" $5 ":" $3 ":" $6 ":" $4}')" -#ip link set addr "$MAC" "$SLAVE" - -mkdir -p "${FUTURE_ROOT}/etc/udev/rules.d" - -#IP_OUT=$(ip a | sed -r ':a;N;$!ba;s/: ([a-z0-9]+): /####\1####/g;s/ether ([a-f0-9:]+) /####\1####/g'| grep -E -o '####[^ ]+####' | sed 's/#//g' | grep -B 1 ':') -IP_OUT=$(ip a | grep -B 1 "/ether" | sed -r '/^--$/d;$!N;s#^[0-9]+: ([a-z0-9\.:]+): .*?/ether ([0-9a-fA-Z:]+) .*$#\1==\2#') - -if ! echo "$IP_OUT" | grep -q -- "$MAC"; then - drop_shell "Boot interface not found in interface list. NIC driver missing?" -fi - -for LINE in $IP_OUT; do - IFACE=$(echo "$LINE" | awk -F '==' '{printf $1}') - IFMAC=$(echo "$LINE" | awk -F '==' '{printf $2}' | tr '[A-Z]' '[a-z]') # udev requires mac addesses to be lowercase (a-f), see http://www.debianhelp.co.uk/udev.htm - echo "${IFACE} = ${IFMAC}" - - if [ "x$IFMAC" == "x$MAC" ]; then - brctl addbr "$BRIDGE" || drop_shell "Could not create bridge $BRIDGE" - brctl stp "$BRIDGE" 0 - brctl setfd "$BRIDGE" 0.000000000001 - ip link set addr "$IFMAC" "$BRIDGE" || drop_shell "Could not set mac of $BRIDGE" - ip link set dev "$IFACE" up - wait_for_iface "$IFACE" - brctl addif "$BRIDGE" "$IFACE" || drop_shell "Could not add $IFACE to $BRIDGE" - - # save our variables for retry on fail - echo "IFACE=$IFACE" > /run/network.conf - - # analyze ip information from the kernel command line and put parts - # of it into several variables - if [ -n "$CLIENTIP" ] ; then - # set static ip address - ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE" - ip link set dev "$BRIDGE" up - [ -n "$GATEWAY" ] && ip route add default via "$GATEWAY" dev "$BRIDGE" - else - NOIPYET="yes" - fi - # Ignore this device later on when systemd handles network interfaces (see hacked 99-systemd.rules in systemd data dir) - echo "SUBSYSTEM==\"net\", ACTION==\"add\", KERNEL==\"eth*\", ATTR{address}==\"$IFMAC\", TAG+=\"openslxignore\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/01-ignore-boot-interface.rules" - fi - # youdev - echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$IFMAC\", ATTR{dev_id}==\"0x0\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"$IFACE\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/70-net-boot-nic-name.rules" - # continue... - IFACE="" -done - -wait_for_iface "$BRIDGE" - -# udhcpc -PARAM= -if [ -n "$CLIENTIP" ]; then - PARAM="-r $CLIENTIP" -fi -echo -n "$CLIENTIP" > "/run/firstip" -echo -n "$GATEWAY" > "/run/firstgw" - -# save our variables for retry on fail ff. -echo "CLIENTIP=$CLIENTIP" >> /run/network.conf -echo "GATEWAY=$GATEWAY" >> /run/network.conf -echo "BRIDGE=$BRIDGE" >> /run/network.conf - -udhcpc $PARAM -O domain -O nissrv -O nisdomain -O wpad -O search -t 5 -T 2 -s "/inc/udhcpc-trigger" -f -n -q -i "$BRIDGE" -# udhcpc return value will be return value of this script diff --git a/builder/dnbd3-qcow2-rootfs/hooks/cmdline/enable-sysrq.sh b/builder/dnbd3-qcow2-rootfs/hooks/cmdline/enable-sysrq.sh deleted file mode 100755 index f779aa7a..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/cmdline/enable-sysrq.sh +++ /dev/null @@ -1,2 +0,0 @@ -# enables magic sysrq keys -echo 1 > /proc/sys/kernel/sysrq diff --git a/builder/dnbd3-qcow2-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh b/builder/dnbd3-qcow2-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh deleted file mode 100755 index 9f617b09..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh +++ /dev/null @@ -1,36 +0,0 @@ -command -v warn >/dev/null || . /lib/dracut-lib.sh - -# fakes the cmdline to fix the ip parsing in darcut's net-lib.sh -[ -d /fake ] || mkdir /fake - -# need to be a tmpfs for the hack to work -mount -t tmpfs tmpfs /fake - -for parameter in $(getargs ip=); do - local temp="$parameter:" - set -- - while [ -n "$temp" ]; do - set -- "$@" "${temp%%:*}" - temp=${temp#*:} - done - - [ -n "$1" ] && ip=$1 - [ -n "$2" ] && server_ip=$2 - [ -n "$3" ] && gateway_ip=$3 - [ -n "$4" ] && net_mask=$4 - - warn "PXE given net configuration: ip: $ip server_ip: $server_ip gateway_ip: $gateway_ip net_mask: $net_mask" - local final_dracut_ip_config="$ip::$gateway_ip:$net_mask:hiwi-test-28:eno1:none" - warn "Final dracut ip config: $final_dracut_ip_config" - sed --regexp-extended "s/ip=[^ ]*/ip=$final_dracut_ip_config/g" /proc/cmdline > /fake/cmdline -done - - -# bind mount it. Can we trust mount return codes here? -# # if so, we should check what we get in $? -mount -o bind /fake/cmdline /proc/cmdline - -# check if it worked -if ! grep 'hiwi-test-28:eno1:none' /proc/cmdline; then - warn 'Haxing cmdline did not work :( sad pandaz...' -fi diff --git a/builder/dnbd3-qcow2-rootfs/hooks/cmdline/set-dracut-environment-variables.sh b/builder/dnbd3-qcow2-rootfs/hooks/cmdline/set-dracut-environment-variables.sh deleted file mode 100755 index 6deeb78f..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/cmdline/set-dracut-environment-variables.sh +++ /dev/null @@ -1,5 +0,0 @@ -# set rootok and root as dracut expects them to be set by -# the module preparing the root filesystem. - -rootok=1 -root=block:/dev/devicemapper/root diff --git a/builder/dnbd3-qcow2-rootfs/hooks/mount/mount-root-device.sh b/builder/dnbd3-qcow2-rootfs/hooks/mount/mount-root-device.sh deleted file mode 100755 index f0d48174..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/mount/mount-root-device.sh +++ /dev/null @@ -1 +0,0 @@ -mount /dev/mapper/root "$NEWROOT" diff --git a/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/fetch-config.sh b/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/fetch-config.sh deleted file mode 100755 index a90481c8..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/fetch-config.sh +++ /dev/null @@ -1,39 +0,0 @@ -# load dracut functions -command -v getarg >/dev/null || . /lib/dracut-lib.sh - -# read SLX_SERVER and SLX_BASE from the kernel command line -SLX_SERVER=$(getarg slxsrv) -SLX_BASE=$(getarg slxbase) -SLX_CONFIG_DIR="/opt/openslx" -SLX_CONFIG_FILE="/opt/openslx/config" - -if [ -z "$SLX_SERVER" ]; then - warn "No 'slxsrv' parameter found in the kernel command line!" - warn "Skipping OpenSLX configuration..." - return 1 -fi -if [ -z "$SLX_BASE" ]; then - warn "No 'slxbase' parameter found in the kernel command line!" - warn "Skipping OpenSLX configuration..." - return 1 -fi - -info "Getting configuration from OPENSLX-Server..." -WGET="$(busybox which wget)" -if [ -z $WGET ]; then - # do nothing - warn "'wget' not found. Skipping openslx configuration..." - return 1 -fi - -# ok then we are ready to download the config -mkdir -p "${SLX_CONFIG_DIR}" -$WGET -T 5 -q "http://${SLX_SERVER}/${SLX_BASE}/config" -O "${SLX_CONFIG_FILE}" -RET="$?" -if [ $RET -ne 0 ]; then - warn "Downloading OpenSLX configuration from ${SLX_SERVER}/${SLX_BASE} failed: $RET" - emergency_shell -n "$0" - return 1 -else - return 0 -fi diff --git a/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/mount-qcow.sh b/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/mount-qcow.sh deleted file mode 100755 index d70492bf..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/mount-qcow.sh +++ /dev/null @@ -1,49 +0,0 @@ -############################################################################### -# CHECKS -# - -SETUP_ROOTFS_SCRIPT="/sbin/setup-qcow2" - -if [ ! -e "${SETUP_ROOTFS_SCRIPT}" ]; then - warn "No such file of directory: ${SETUP_ROOTFS_SCRIPT}" - emergency_shell -n "Error in $0" - return 1 -fi - -if [ ! -x "${SETUP_ROOTFS_SCRIPT}" ]; then - warn "Cannot execute: ${SETUP_ROOTFS_SCRIPT}" - emergency_shell -n "Error in $0" - return 1 -fi - -# -# END CHECKS -############################################################################### - -############################################################################### -# MAIN CODE -# - -# ok, let's source the setup script -if ! . ${SETUP_ROOTFS_SCRIPT} ; then - warn "Could not source: ${SETUP_ROOTFS_SCRIPT}" - emergency_shell -n "Error in $0" - return 1 -fi - -# just go over the functions in the right order ;-) -for fun in connect_dnbd3 create_qcow export_qcow connect_qcow; do - if ! $fun; then - # something failed, drop a shell for debugging - warn "'$fun' failed with: $?" - emergency_shell -n "Error in $fun" - return 1 - fi -done - -# all good, we are done -return 0 - -# -# END MAIN CODE -############################################################################### diff --git a/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/prepare-root-partition.sh b/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/prepare-root-partition.sh deleted file mode 100755 index 8b5ea48e..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/pre-mount/prepare-root-partition.sh +++ /dev/null @@ -1,42 +0,0 @@ -function create_partition_via_offset() { - local device="$1" - local nameOrUUID="$2" - local loopDevice=$(losetup -f) - - local sectorSize=$(blockdev --getbsz $device) - local partitionInfo=$(partx --raw --noheadings --output START,NAME,UUID /dev/nbd0 2>/dev/null| grep $nameOrUUID) - local offsetSectors=$(echo $partitionInfo | cut -d' ' -f1) - if [ -z "$offsetSectors" ]; then - warn "could not find partition with label/uuid '$nameOrUUID' on device $device" - return 1 - fi - #warn $(($offsetSectors*512)) # could overflow on 32bit systems - local offsetBytes=$(echo $| awk -v x=$offsetSectors -v y=$sectorSize '{print x * y}') - - # test if mount works directly (problem with btrfs device id) - #mount -v -o loop,offset=$offsetBytes $device $mountPoint - losetup -v -o $offsetBytes $loopDevice $device - echo $loopDevice -} - -# Close previous connections to be able to run this script many times. -dnbd3-client --device /dev/dnbd0 --close && \ -dnbd3-client --host gateway --image archLinux.qcow2 --device /dev/dnbd0 && \ -qemu-nbd --connect=/dev/nbd0 /dev/dnbd0 --read-only && \ -local read_only_partition="$(create_partition_via_offset /dev/nbd0 system)" && \ -# Make read-only partition writable. -# TODO implement persistent available indicator. -if true; then - local writable_device="/dev/ram0" && \ - mknod --mode 660 "$writable_device" b 1 1 && \ - chown root.disk "$writable_device" -else - # Use next free loop device. - local writable_device="$(losetup -f)" && \ - dd if=/dev/zero of=persistent_storage.img bs=1k count=1000 && \ - losetup "$writable_device" persistent_storage.img -fi -local size="$(blockdev --getsz "$read_only_partition")" && \ -local writable_partition_name="root" && \ -dmsetup create "$writable_partition_name" --table \ - "0 $partion_size snapshot $read_only_partition $writable_device N 1" diff --git a/builder/dnbd3-qcow2-rootfs/hooks/pre-pivot/mount-tmp.sh b/builder/dnbd3-qcow2-rootfs/hooks/pre-pivot/mount-tmp.sh deleted file mode 100755 index 3e702064..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/pre-pivot/mount-tmp.sh +++ /dev/null @@ -1,40 +0,0 @@ -# This script only checks if we found a usable partition for the -# future /tmp. The discovery of that partition is done by udev during -# the initqueue. If a valid partition is found (either GPT with the label -# OPENSLX_TMP or MBR with the type 0x44) its path will be written to -# /tmp/openslx.tmpdisk -OPENSLX_TMP_DISK_FLAG="/tmp/openslx.disk.tmp" - -if [ ! -e "$OPENSLX_TMP_DISK_FLAG" ]; then - warn "'$OPENSLX_TMP_DISK_FLAG' not found!" - warn "Systemd will manage $NEWROOT/tmp on its own." - # no partition for the future /tmp found, just - # let systemd manage it then (probably a tmpfs) - return 1 -fi - -# in /tmp/openslx.disk.tmp is the name of the device -# to mount as /tmp in the real system -# meaning we need to mount it to /sysroot/tmp here. - -OPENSLX_TMP_DISK_DEV="$(cat $OPENSLX_TMP_DISK_FLAG)" - -# sanity check: is the content a block device? -if [ ! -b "$OPENSLX_TMP_DISK_DEV" ]; then - warn "'$OPENSLX_TMP_DISK_DEV' appears not to be a block device!" - warn "Systemd will manage $NEWROOT/tmp on its own." - return 1 -fi - -# all good, keep on -if ! mount -t auto "$OPENSLX_TMP_DISK_DEV" $NEWROOT/tmp; then - # something else went wrong :( - warn "Mounting '$OPENSLX_TMP_DISK_DEV' to '$NEWROOT/tmp' failed with: $!" - warn "Systemd will manage $NEWROOT/tmp on its own." - return 1 -fi - -# still here? mount worked wohoo -# set permissions -chmod a+rwxt $NEWROOT/tmp -return 0 diff --git a/builder/dnbd3-qcow2-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh b/builder/dnbd3-qcow2-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh deleted file mode 100755 index 29f9f210..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh +++ /dev/null @@ -1,32 +0,0 @@ -# include dracut-lib.sh to use 'warn' -command -v warn >/dev/null || . /lib/dracut-lib.sh - -NBD_MOD_PATH="/usr/lib/modules/current/extra/nbd.ko" -DNBD3_MOD_PATH="/usr/lib/modules/current/extra/dnbd3.ko" - -# do we actually have our modules? -if [ ! -e "${NBD_MOD_PATH}" ]; then - warn "No such file of directory: ${NBD_MOD_PATH}" - emergency_shell -n "Error in $0" - return 1 -fi -if [ ! -e "${DNBD3_MOD_PATH}" ]; then - warn "No such file of directory: ${DNBD3_MOD_PATH}" - emergency_shell -n "Error in $0" - return 1 -fi - -# load the kernel modules for dnbd3 and nbd -if ! insmod "${DNBD3_MOD_PATH}"; then - warn "Failed to load DNBD3 kernel module..." - emergency_shell -n "Error in $0" - return 1 -fi - -if ! insmod "${NBD_MOD_PATH}"; then - warn "Failed to load NBD kernel module..." - emergency_shell -n "Error in $0" - return 1 -fi - -return 0 diff --git a/builder/dnbd3-qcow2-rootfs/hooks/pre-udev/setup-loopback-device.sh b/builder/dnbd3-qcow2-rootfs/hooks/pre-udev/setup-loopback-device.sh deleted file mode 100755 index 9103afd9..00000000 --- a/builder/dnbd3-qcow2-rootfs/hooks/pre-udev/setup-loopback-device.sh +++ /dev/null @@ -1 +0,0 @@ -/sbin/initqueue --name ifup-lo --unique --onetime /sbin/ifup lo -m diff --git a/builder/dnbd3-qcow2-rootfs/module-setup.sh b/builder/dnbd3-qcow2-rootfs/module-setup.sh deleted file mode 100755 index b9134871..00000000 --- a/builder/dnbd3-qcow2-rootfs/module-setup.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -source "$moddir/scripts/utils.sh" - -check() { - compile_nbd && \ - compile_dnbd3 && \ - compile_systemd_preserve_process_marker - return $? -} - -depends() { - echo base network bash kernel-modules -} - -installkernel() { - inst "$moddir/binaries/dnbd3/build/dnbd3.ko" \ - /usr/lib/modules/current/extra/dnbd3.ko - inst "$moddir/binaries/nbd/nbd.ko" \ - /usr/lib/modules/current/extra/nbd.ko - - instmods ext4 btrfs -} - -install() { - - # region binaries - - inst "$moddir/binaries/dnbd3/build/dnbd3-client" /usr/bin/dnbd3-client - inst "$moddir/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker" \ - /usr/bin/systemd-preserve-process-marker - - # endregion - - # region hooks - - inst_hook cmdline 00 "$moddir/hooks/cmdline/enable-sysrq.sh" - inst_hook cmdline 10 "$moddir/hooks/cmdline/prepare-network-kcl-parameter.sh" - inst_hook cmdline 90 "$moddir/hooks/cmdline/set-dracut-environment-variables.sh" - - inst_hook pre-udev 00 "$moddir/hooks/pre-udev/load-custom-kernel-modules.sh" - inst_hook pre-udev 00 "$moddir/hooks/pre-udev/setup-loopback-device.sh" - - # this is the configuration hook where the config stuff is wget'ed - # TODO - #inst_hook pre-mount 00 "$moddir/hooks/pre-mount/fetch-config.sh" - # this is the main hook where all the magic is triggered - #inst_hook pre-mount 10 "$moddir/hooks/pre-mount/mount-qcow.sh" - - inst_hook pre-mount 10 "$moddir/hooks/pre-mount/prepare-root-partition.sh" - - inst_hook mount 10 "$moddir/hooks/mount/mount-root-device.sh" - - inst_hook pre-pivot 00 "$moddir/hooks/pre-pivot/mount-tmp.sh" - - # endregion - - ## TODO deprecated - ### SCRIPTS - # the main magic script containing all the functions needed - # to prepare the qcow2-based root filesystem - #inst "$moddir/scripts/setup-qcow2" /sbin/setup-qcow2 - # - # the script triggered by udev upon finding the right partitions - #inst "$moddir/scripts/prepare-disks" /sbin/prepare-disks - ## - # udev rules detecting 44, 45, 46 partitions and running - # 'prepare-disks' to do then format/mount/use them - #inst "$moddir/udev/70-openslx-disk.rules" /etc/udev/rules.d/70-openslx-disk.rules - ## - - # Debugging Uncomment this version if you need some useful debugging tools - # in your iniramfs. - inst_multiple lsblk ping ip ifconfig sshd htop tail head cat vim \ - touch sed lsmod insmod qemu-img sleep route wget find lsof strace \ - chroot switch_root pivot_root qemu-nbd mount nbd-client fdisk mkfs.xfs - # Production: - # inst_multiple insmod qemu-img qemu-nbd -} diff --git a/builder/dnbd3-qcow2-rootfs/readme.md b/builder/dnbd3-qcow2-rootfs/readme.md deleted file mode 100644 index 9ad0f968..00000000 --- a/builder/dnbd3-qcow2-rootfs/readme.md +++ /dev/null @@ -1,472 +0,0 @@ -# TODO --ommit npd -# TODO Testmenue PW: t - -h1. Evaluation, dissection and modification of Linux remote boot - -h2. Inhalt - -{{toc}} - -#h2. Begriffe - -#* qcow - qemu copy-on-write -#* stage3.1 initramfs -#* stage4 finales System - -h2. Aufgabe - -Es wird ein Skript bzw. Dracut-Modul benötigt, dass ein initramfs basierend auf -systemd baut. Das resultierende initramfs muss Netzwerk-Support bereitstellen, -ein dnbd3 Blockdevice mounten können und einen "switch_root" auf das zuvor -gemountete Dateisystem umsetzen. Das Framework sollte möglichst -Distributionsunabhängig konstruiert sein. Es soll bereits vor dem -"switch_root", also bevor das eigentliche Zielsystem im Root-Verzeichnis -eingebunden werden systemd als init-System zum Einsatz kommen. Die Kernaufgabe -eine initramfs ist es alle nötigen Anwendungen bereitzustellen, die benötigt -werden, um dass finale Zielsystem einzubinden. In dieser konkreten -Aufgabenstellung muss, dass initramfs ein nicht schreibbares Blockgerät -eingebunden werden und eine schreibbare Zwischenshicht (Overlayfilesystem) -zusätzlich eingebunden werden. - -h2. Möglicher Technologien für das Overlaykonzept - -* Dateibasierte Overlay-FS (Union-FS, Alternat-Union-FS, Overlay-FS) - - Funktioniert derzeit nicht auf jedem Zielsystem (Kernel) - - Nicht für den Linux-Kernel zertifiziert oder lässt sich nicht über das - Root-System legen. - - Bei wenigen Änderungen in einer großen Datei muss komplette Datei in - der schreibbaren Schicht gespeichert werden. -* Blockorientierte Overlay-FS (Network-Block-Device, DNBD3, Qemu-Copy-On-Write-Image) - - NBD ist für den Linux-Kernel zertifiziert - - Weniger Netzwerkverkehr nötig, da nur geänderte Blöcke übertragen werden - müssen, statt ganze Dateien zu kopieren. - - DNBD3 hat Failover-Strategien, verzichtet auf komplexe Strategien zum - Schreiben in geänderte Blöcke über das Netzwerk - - Das verfügbare qcow2-Format bietet eine Technologie, um blockorientiert - Änderungen in einer zusätzlichen Dateisystemschicht zu speichern. - -h2. Zielablauf - -Der generelle Ablauf vor bzw. während des Ladens des initramfs und deren -Minilinux-System: - -# Boot PXE -> # Laden des initramfs images -> # Laden des Kernels -# Ausführen des iniramfs -> # Ausführen von Systemd -> > # Bereitstellen aller benötigten Dienste und Hardware (Netzwerk hochbringen) -> > # Mounten des finalen Dateisystems als Wurzel -> > # Wechsel (switch_root) in die finale Distribution -> > # Starten / Weiterausführen von Systemd als Init-System - -h2. Benötigte Pakete zum bauen des initramfs - -> * dracut -# TODO - -h2. Benötigte Pakete innerhalb des resultierenden initramfs - -> * systemd -> * quemu-img -> * quemu-nbd -> * nbd-client -> * dnbd3-client - -h2. Aufsetzen einer Test-Arbeitsumgebung für CentOS - -h3. CentOS7/ArchLinux/RedHat/Ubuntu + VirtualBox + VirtualBoxGuestAdditions - -Aufsetzen des *Dynamic Kernel Module Support*, um einfach neue VBox-Kernel-Module zu aktualisieren: - -> # Aktualisiere Paketdatenbank: @yum update@ -> # Intalliere C-Compiler: @yum install gcc@ -> # Lade erweitertes rpmforfe Repository: @wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm@ -> # Installiere Repository: @rpm -Uvh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm@ -> # Lade das DKMS-Paket: @wget ftp://rpmfind.net/linux/epel/5/x86_64/dkms-2.2.0.3-29.el5.noarch.rpm@ -> # Installiere DKMS-Paket: @yum localinstall dkms-2.2.0.3-25.el7.noarch.rpm --nogpgcheck@ -> # Aktiviere rpmforge Repository: @yum --enablerepo rpmforge install dkms@ -> # Installiere Entwicklertools zum bauen von Paketen: @yum groupinstall "Development Tools"@ -> # Installiere Metainformation zum Kernel: @yum install kernel-devel@ - -Installieren der VirtualBox-GuestAddtion: - -> # Lege die VirtualBox-GuestAddition-CD ein. -> # Mounte CD: @mount /dev/sr0 /mnt/ && cd /mnt/ && ./VBoxLinuxAdditions.run && reboot@ - -Erstellen eines Testboot Eintrags für Grub2: - -> - Füge in ??/etc/grub.d/40_custom?? den folgenden Inhalt hinzu: - -
-menuentry 'test' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-6c06919a-389a-4a50-8c6b-b086e65db9b0' {
-    load_video
-    set gfxpayload=keep
-    insmod gzio
-    insmod part_msdos
-    insmod xfs
-    set root='hd0,msdos1'
-    if [ x$feature_platform_search_hint = xy ]; then
-        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  4236333a-a808-4f6b-b4a6-d963f4a69a25
-    else
-        search --no-floppy --fs-uuid --set=root 4236333a-a808-4f6b-b4a6-d963f4a69a25
-    fi
-    linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=6c06919a-389a-4a50-8c6b-b086e65db9b0 ro rd.lvm.lv=centos/swap crashkernel=auto  rd.lvm.lv=centos/root vconsole.font=latarcyrheb-sun16 vconsole.keymap=de rhgb quiet 
-    initrd16 /initramfs-test.img
-}
-
- -> - Füge neuen Menüeintrag in die automatisch generierte Grub2 Konfigurations2-Datei hinzu: @grub2-mkconfig -o /boot/grub2/grub.cfg@ - -h2. Bauen eines Test-Initramfs - -Mache ein Backup vom aktuellen initamfs: -@cp -p /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.BACKUP@ - -Der folgende Befehl ersetzt das aktuelle Standart Initramfs mit dem neu -gebauten und berücksichtigt dabei alle bisher editierten Dracut-Module in -??/usr/lib/dracut/modules.d??. Die durchschnittliche Größe des resultierenden -initramfs beträgt komprimiert: zwischen 11 und 16 MB. - -

-dracut --verbose --force /boot/initramfs-3.10.0-123.el7.x86_64.test.img \
-    3.10.0-123.el7.x86_64
-
- -h3. Konfiguration - -TODO - -# Configure "cmdline" from "Chapter 8. DRACUT.CMDLINE(7)" in virtualbox in "/boot/startup.sh" for uefi or in "/boot/grub2/grub.cfg" for grub2 - -h2. Bauen eines minimalen individuellen Test-Initramfs - -

-dracut --verbose --hostonly --force 
-    /boot/initramfs-3.10.0-123.el7.x86_64.test.img \
-    3.10.0-123.el7.x86_64
-
- -Die Option "hostonly" veranlasst Dracut dazu nur alle nötigen Abhängigkeiten -für das aktuelle System in das resultierende Initramfs zu installieren. -Andernfalls fügt dracut viele zusätzliche Treiber hinzu, die die Größe der -resultierenden Datei erheblich vergrößern und damit größer wird als nötig. -Die durchschnittliche Größe des resultierenden initramfs beträgt -komprimiert: zwischen 11 und 16 MB. - -h2. Erstellen eines eigenen Dracut-Moduls - -Alle vorhanden Module befinden sich in ??/usr/lib/dracut/modules.d??. - -> # Erstelle ein neues Modul: @mkdir /usr/lib/dracut/modules.d/91test@ -> # Baue neues initramfs und achte darauf, dass ??\*\*Including module: test\*\*?? mit der Command-Line-Option ??--verbose?? ausgegeben wird. -> # Alle Modul-Installations-Informationen sind in der Datei ??module-setup.sh??: @touch /usr/lib/dracut/modules.d/91test/module-setup.sh@ -> # Konfiguriere Modul: -> > # Als erstes erstellt man eine ??check??-Funktion, die lediglich ??0?? - zurückgibt. Diese Funktion wird aufgerufen, wenn entschieden wird, welche - Dracutmodule geladen werden sollen. Durch zurückgeben der ??0?? wird das - Modul beim nächsten bauen eines Initramfs automatisch hinzugefügt ohne - das man es etwas in der ??/etc/dracut.conf?? oder per Command-Line-Option - "--add" angeben muss. Wenn die @$hostonly@ Variable gesetzt ist, dann - wird das Modul auch im "hostonly" Modus geladen. In diesem Fall sollte - die Funktion nur dann ??0?? zurückgeben, wenn das Modul auch wircklich - für den aktuellen Host benötigt wird. Wenn 255 zurückgegeben wird, wird - das Modul nur dann geladen, wenn es von einem andren Modul als - Abhängigkeit deklariert wurde. - -

-check() {
-    return 0
-}
-
- -Als nächstes wird eine ??install??-Funktion erstellt. Die ??install??-Funktion -wird aufgerufen, wenn alle nicht Kernel spezifischen Ressourcen installiert -werden sollen. Es können Binärdateien, Skripte und andere statischen Dateien -installiert werden. Um einen Datei im aktuellen Modul-Ordner zu addressieren -sollte die Variable "$moddir" als Prefix eingesetzt werden. -Eine solche Funktion kann beispielsweise einen ??Command-Line-Hook?? triggern, -der modulespezifische ??Kernel-Command-Line-Optionen?? verarbeitet während das -initiale Minilinux bootet. Im folgenden Beispiel werden ??Command-Line-Optionen -mit Priorität 20 vom Shell-Skript ??parse-insmodpost.sh?? gelesen und -ausgewertet. Dadurch muss natürlich auch das entsprechende Skript in das -initramfs kopiert werden. Dies wird durch den Aufruf der Funktion -??inst_simple?? erreicht. - -

-install() {
-    inst_hook cmdline 20 "$moddir/parse-cmdline.sh"
-    inst_simple "$moddir/parse-cmdline.sh" /sbin/insmodpost.sh
-}
-
- -Die ??parse-cmdline.sh?? parst die Kernel-Command-Line für die Argumente -??rd.driver.post??, verhindert, dass die Module automatisch geladen werden und -installiert den Hook ??hook.sh?? in der ??initqueue/settled??. Der Inhalt von -??parse-cmdline.sh?? könnte wie folgt aussehen: - -

-for p in $(getargs rd.driver.post=); do
-    echo "blacklist $p" >> /etc/modprobe.d/initramfsblacklist.conf
-done
-
- -In einer ??depends??-Funktion können andere Dracut-Module als Abhängigkeit -deklariert werden. Diese müssen einfach per "echo" als String Leerzeichen -getrennt ausgegeben werden. - -

-depends() {
-    echo 'debug virtfs'
-}
-
- -Mit dieser Funktion können zusätzliche benötigte Kernel-Command-Line-Argumente -ausgegeben werden, die benötigt werden um die aktuelle Maschine zu booten. -Die Ausgabe sollte mit einem Leerzeichen beginnen und keine neuen Zeilen -ausgeben. - -

-cmdline() {
-    echo 'TODO'
-}
-
- -Mit der Funktion ??installkernel?? sollen alle kernelspezifischen Dateien -installiert werden. Siehe hierzu auch den Abschnitt -??Hilfsfunktionen zur Installation?? - -

-installkernel() {
-    TODO
-}
-
- -h2. Hilfsfunktionen zur Installation - -??inst_multiple?? installiert mehrere Binärdateien. Sollten ausführbare Dateien -ohne entsprechendem Pfad ausgewählt werden, wird dracut folgende die Pfade -??/usr/sbin??, ??/sbin??, ??/usr/bin??, ??/bin?? durchsuchen, um den Pfad der -zugehörigen ausführbaren Datei zu ermitteln. Bei dem Kommando-Zeilen-Argument -??-o?? als erster Parameter werden Fehler bei nicht auffindbaren Dateien -unterdrückt. - -??inst_multiple [-o] [ …]?? - -??inst?? installiert eine referenzierte Datei an den korrespondierenden Ort im -??initramfs??. Die Datei wird innerhalb des ??initramfs?? am gleichen Ort zu -finden sein wie auf der Referenzmaschine. Optional kann als zweites Argument -ein anderer Ort für das temporäre Dateisystem angegeben werden. - -??inst []?? - -??inst_hook?? installiert eine ausführbare Datei im Pfad ???? im -Dracut-hook-Ordner ????. Der Einstiegspunkt wird mit Priorität -???? zur Laufzeit des initialen Mini-Linux-Systems ausgeführt. - -??inst_hook ?? - -??inst_rules?? installiert einen oder mehrere udev-Regeln. Nicht-existente -udev-Regeln werden beim bauen des initramfs gemeldet, führen aber nicht zum -Abbruch. - -??inst_rules [ …]?? - -??instmods?? installiert einen oder mehrere Kernel-Module in das initramfs. -???? kann auch ein komplettes Subsystem darstellen, wenn es mit -dem Prefiy "=" beginnt (z.B. "=drivers/net/team"). ??instmods?? sollte nur -innerhalb der ??installkernel()??-Funktion verwendet werden. Ist ??$hostonly?? -gesetzt und das aktuelle Modul nicht im Referenzsystem geladen und wird -demnach nicht in ??/sys/…/uevent MODALIAS?? verwendet, wird dieses nicht in -das initramfs integriert. Soll das Modul in jedem Fall geladen werden, kann -folgende Syntax verwendet werden: - -

-installkernel() {
-    hostonly='' instmods 
-}
-
- -??instmods [ … ]?? - -h3. Konfiguration - -TODO - -h3. Debugging - -TODO - -h2. Build kernel specific dnbd3 kernel module - -> # Installiere Metainformation zum Kernel: @yum install kernel-devel@ -> # Installiere cmake zum Bauen von dnbd3: @yum install cmake@ -> # Installiere zlib-devel zum Bauen von dnbd3: @yum install zlib-devel@ - -Die kernel header Dateien liegen in: - -/usr/lib/modules/3.10.0-229.1.2.el7.x86_64 - -TOOD - -dnbd3-client -h 132.230.4.1 -i stage4/torben/test -r 1 - -> # Installiere qemu-img: @yum install qemu-img@ -> # Installiere nbd: @wget http://dl.fedoraproject.org/pub/epel/6/x86_64/nbd-2.9.20-7.el6.x86_64.rpm && rpm -Uvh nbd-2.9.20-7.el6.x86_64.rpm@ - -NOTE: Disable NetworkManager to avoid reloading network on boot: systemctl disable NetworkManager - -h2. CentOS7 @rpmbuild@ - -First "Set up RPM build env":http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment -Now in that user's home, e.g. @/home/builder@: -
-# install yumdownloader
-yum install yum-utils
-
-# download source in /home/builder/
-yumdownloader --source systemd
-
-# should have now have a file ~/systemd-208-20.el7_1.2.src.rpm
-# "install" it in ~/rpmbuild
-rpm -ivh systemd-208-20.el7_1.2.src.rpm
-
-# install building deps
-yum-builddep ~/rpmbuild/SPECS/systemd.spec
-
-# now check if everything is working, by running the simple %prep% phase
-# (unpacks source & applies patches)
-rpmbuild -bp ~/rpmbuild/SPECS/systemd.spec
-
-# if it worked, we can probably compile
-# this runs %prep% and %build%
-rpmbuild -bp ~/rpmbuild/SPECS/systemd.spec
-
- -dmesg - 998 ping 8.8.8.8 - 999 shutdown .h now - 1000 shutdown -h now - 1001 y search yumdownloader - 1002 y install yum-utils - 1003 yumdownloader --help - 1004 yumdownloader --source glib2 qemu - 1005 yumdownloader --source qemu-img - 1006 ls - 1007 mkdir glib2_source - 1008 cd glib2 - 1009 cd glib2_source/ - 1010 rpm2cpio ../glib2-2.40.0-4.el7.src.rpm | cpio -idmv - 1011 ls - 1012 tar xf glib-2.40.0.tar.xz - 1013 ls - 1014 cd glib-2.40.0 - 1015 ls - 1016 ./configure --enable-static - 1017 make - 1018 ls - 1019 make - 1020 y search zlib - 1021 y search zlib-static - 1022 y install zlib-static - 1023 ./configure --enable-static - 1024 y search libffi - 1025 y install libffi - 1026 y install libffi-devel - 1027 ./configure --enable-static - 1028 make - 1029 ls - 1030 cd build/ - 1031 ls - 1032 .. - 1033 l - 1034 ls - 1035 make install - 1036 .. - 1037 l - 1038 .. - 1039 l - 1040 mkdir qemu-kvm - 1041 cd qemu-kvm - 1042 ls - 1043 rpm2cpio ../qemu-kvm-1.5.3-86.el7_1.1.src.rpm | cpio -idmv - 1044 l - 1045 pwd - 1046 ls - 1047 l - 1048 ls - 1049 .. - 1050 l - 1051 git clone git://git.qemu.org/qemu.git qemu - 1052 ls - 1053 rm qemu-kvm -rf - 1054 rm qemu-kvm-1.5.3-86.el7_1.1.src.rpm - 1055 l - 1056 cd qemu/ - 1057 l - 1058 ./configure --static --target-list=x86_64-linux-user - 1059 y install zlib - 1060 y install zlib-devel - 1061 y install zlib2 - 1062 y search zlib - 1063 y install zlib-static - 1064 y install zlib - 1065 ll /lib64/libz.a - 1066 ./configure --static --target-list=x86_64-linux-user - 1067 make clean - 1068 ./configure --static - 1069 y search zlib - 1070 y search zlib-static..x86_64 - 1071 y search zlib-static.x86_64 - 1072 y install zlib-static.x86_64 - 1073 ldconfig - 1074 ./configure --static - 1075 ./configure --help - 1076 ./configure --help | grep zlib - 1077 y search zlib - 1078 y install zlib-devel zlib-static zlib - 1079 y deinstall zlib - 1080 y remove zlib - 1081 y search libz - 1082 ls - 1083 git submodule update --init dtc - 1084 ./configure --static --target-list=x86_64-linux-user - 1085 find / -name zlib - 1086 find / -name libz - 1087 find / -name *libz* - 1088 find / -name *zlib* - 1089 ls - 1090 ./configure --disable-zlib-test --static --target-list=x86_64-linux-user - 1091 y search base-devel - 1092 y search devel - 1093 yum groupinstall "Development Tools" - 1094 yum groups mark install - 1095 yum group mark install - 1096 yum groupinstall "Development Tools" - 1097 yum groups mark install - 1098 yum grouplist - 1099 y search zlibrary - 1100 y search glibc - 1101 y install glibc-static - 1102 ls - 1103 ./configure --static --target-list=x86_64-linux-user - 1104 y search glib - 1105 y search glib-2 - 1106 y search glib2-devel - 1107 y install glib2-devel - 1108 ./configure --static --target-list=x86_64-linux-user - 1109 git submodule update --init pixman - 1110 ./configure --static --target-list=x86_64-linux-user - 1111 ls - 1112 ll - 1113 make -j3 - 1114 l - 1115 ldd qemu-nbd - 1116 history - -h2. Quellen - -* "Main Page Dracut on kerne.org":https://dracut.wiki.kernel.org/index.php/Main_Page -* "Documentation on kernel.org":https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html -* "Enable addional repository":http://www.tecmint.com/enable-rpmforge-repository -* "Getting Dynamic Kernel Module Support":http://rpmfind.net/linux/rpm2html/search.php?query=dkms diff --git a/builder/dnbd3-qcow2-rootfs/scripts/prepare-disks b/builder/dnbd3-qcow2-rootfs/scripts/prepare-disks deleted file mode 100755 index 2e68dd9e..00000000 --- a/builder/dnbd3-qcow2-rootfs/scripts/prepare-disks +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -############################################################################### -# GLOBALS -# - -# flag file containing pids of running instances for concurrency checks -declare -rg OPENSLX_DISK_FLAG="/tmp/openslx.disk" -# file that will contain the name of the device used for the /tmp partition -# - label 'OPENSLX_TMP' in GPT / type '0x44' in MBR -declare -rg OPENSLX_TMP_MARKER="/tmp/openslx.disk.tmp" -# file that will contain the name of the device used for storing qcow2 -# - label 'OPENSLX_SYS' in GPT / type '0x46' in MBR -declare -rg OPENSLX_SYS_MARKER="/tmp/openslx.disk.sys" -# mount point for system partition -declare -rg OPENSLX_SYS_MOUNT="/opt/openslx/system" - -# -# END GLOBALS -############################################################################### - -############################################################################### -# FUNCTION DEFINITIONS -# -# helper to mount the OPENSLX_SYS partition to /opt/openslx/system -# Usage: mount_sys_part -mount_sys_part() { - if [ ! -b "$1" ]; then - warn "($$) Refusing to mount '$1' as its not a block device!" - return 1 - fi - - local OPENSLX_SYS_DEVICE="$1" - mkdir -p ${OPENSLX_SYS_MOUNT} - if ! mount -t auto "${OPENSLX_SYS_DEVICE}" "${OPENSLX_SYS_MOUNT}"; then - warn "($$) Mounting '${OPENSLX_SYS_DEVICE}' to '${OPENSLX_SYS_MOUNT}' failed." - return 1 - fi - return 0 - -} -# -# generic helper to format the given partition with the given filesystem or -# from the prefdefined list of xfs, ext4, ... -# Usage: format_disk -# e.g. format_disk /dev/sda1 xfs -format_disk () { - local TARGET_DEVICE="$1" - local fslist="xfs ext4" - # if we have a second arguments, its the filesystem of choice - local fs - [ $# -ge 2 ] && fslist="$2" - for fs in $fslist ; do - unset found - local MKFS="$(busybox which mkfs.$fs)" - if [ -n $MKFS ]; then - found=yes - case "mkfs.$fs" in - mkfs.xfs) fopt="-fq" ;; - mkfs.ext4) fopt="-Fq" ;; - esac - info "($$) Formatting $TARGET_DEVICE as $fs" - return $(${MKFS} ${fopt} "${TARGET_DEVICE}") - fi - [ -n "$found" ] && break - done - # still here? then we didn't find a proper formatter... - warn "($$) Could not format $PART_DEV as $fs." - return 1 -} - -# -# END FUNCTION DEFINITIONS -############################################################################### - -############################################################################### -# MAIN CODE -# - -command -v warn >/dev/null || . /lib/dracut-lib.sh - -# let check the arguments -if [ "$#" -ne 2 ]; then - warn "($$) '$0' need 2 arguments: '$0 [OPENSLX_SYS|OPENSLX_TMP] '" - exit 1 -fi -# $1 sane? -if [ "x$1" != "xOPENSLX_SYS" ] && [ "x$1" != "xOPENSLX_TMP" ]; then - warn "($$) First arg needs to be either 'OPENSLX_SYS' or 'OPENSLX_TMP', given: $1" - exit 1 -fi -# $2 sane? -if [ ! -b "/dev/$2" ]; then - warn "($$) Second arg appears not to be a block device!" - exit 1 -fi - -# ok all seems well, set the arguments -PART_TYPE="$1" -PART_DEV="/dev/$2" - -unset OPENSLX_TMP_DEVICE -unset OPENSLX_SYS_DEVICE - -# lets check if we are already running -INSTANCES="$(grep "$PART_TYPE" "$OPENSLX_DISK_FLAG" | busybox wc -l)" -if [ "$INSTANCES" -ge 1 ]; then - # uhoh we are not alone! Need to check - # if the other instance actually did its job - warn "($$) '$0' already running for $PART_TYPE on $PART_DEV... checking state." - # here two/three cases depending on which PART_TYPE we are - # currently processing. - for timeout in 1 1 2; do - # always give the other instance time to finish - # but only check 3 times overall - sleep $timeout - case "$PART_TYPE" in - OPENSLX_TMP) - # was the tmp partition marker created with a device? - if [ ! -f "${OPENSLX_TMP_MARKER}" ]; then - info "($$) Invalid state: no marker for $PART_TYPE" - continue - fi - # it was, is it a valid block device? - OPENSLX_TMP_DEVICE="$(cat ${OPENSLX_TMP_MARKER})" - if [ -z $OPENSLX_TMP_DEVICE -o ! -b $OPENSLX_TMP_DEVICE ]; then - info "($$) Invalid state: no for device $OPENSLX_TMP_DEVICE" - continue - fi - # its detected, its a block device and as mounting is - # done later, we can not check for more at this point - info "($$) Valid state for $OPENSLX_TMP_DEVICE as $PART_TYPE" - exit 0 - ;; - OPENSLX_SYS) - # was the system partition marker created with a device? - if [ ! -f "${OPENSLX_SYS_MARKER}" ]; then - info "($$) Invalid state: no marker for $PART_TYPE" - continue - fi - # it was, is it a valid block device? - OPENSLX_SYS_DEVICE="$(cat ${OPENSLX_SYS_MARKER})" - if [ -z $OPENSLX_SYS_DEVICE -o ! -b $OPENSLX_SYS_DEVICE ]; then - info "($$) Invalid state: no for device $OPENSLX_SYS_DEVICE" - continue - fi - # its detected, its a block device, is it mounted? - if mount | grep -qE "^$OPENSLX_SYS_DEVICE\ on $OPENSLX_SYS_MOUNT"; then - info "($$) Valid state for $OPENSLX_SYS_DEVICE as $PART_TYPE" - exit 0 - fi - # if its not mounted, we want to keep on, so no exit! - ;; - *) - # weird case which should never happen - warn "($$) If you see this, then $0 was called with a bad PART_TYPE: $@" - continue - ;; - esac - done - warn "($$) Timeout reached!" - warn "($$) '$PART_TYPE' was found but not device was associated to it!" -fi - -# We write our pid to $OPENSLX_DISK_FLAG in order to make sure -# we are the only instance of this script running. -info "($$) Processing: $PART_TYPE -> $PART_DEV ($$)" -echo "$PART_TYPE.$$" >> "$OPENSLX_DISK_FLAG" - -# if we are still here, then we can go on and process the partition -if [ "$PART_TYPE" = "OPENSLX_TMP" ]; then - # always format /tmp partition - if ! format_disk "${PART_DEV}" xfs; then - # error while formatting, cleanup - warn "($$) Error formatting $PART_DEV ... removing $$" - sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" - exit 1 - fi - info "($$) Using '$PART_DEV' as '$PART_TYPE'" - # mark it for later: in pre-pivot we will check this file - # and mount it as $NEWROOT/tmp - echo "$PART_DEV" > "$OPENSLX_TMP_MARKER" - # remove our pid from OPENSLX_DISK_FLAG - sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" - exit 0 -fi -if [ "$PART_TYPE" = "OPENSLX_SYS" ]; then - # TODO make the formatting of the system partition configurable - if ! format_disk "${PART_DEV}" xfs; then - # error while formatting, cleanup - warn "($$) Error formatting $PART_DEV ... removing $$" - sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" - exit 1 - fi - # mark it - # mount it now, since qemu-nbd needs it asap! - if mount_sys_part "$PART_DEV"; then - # mount worked, mark it as done - info "($$) Using '$PART_DEV' as '$PART_TYPE'" - echo "$PART_DEV" > "$OPENSLX_SYS_MARKER" - sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" - exit 0 - else - warn "($$) 'mount_sys_part' failed in $0" - sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" - exit 1 - fi -fi - -# -# END MAIN CODE -############################################################################### diff --git a/builder/dnbd3-qcow2-rootfs/scripts/setup-qcow2 b/builder/dnbd3-qcow2-rootfs/scripts/setup-qcow2 deleted file mode 100755 index 70babc17..00000000 --- a/builder/dnbd3-qcow2-rootfs/scripts/setup-qcow2 +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/bash - -# dracut-lib to use debugging functions -command -v warn >/dev/null || . /lib/dracut-lib.sh -command -v emergency_shell >/dev/null || . /lib/dracut-lib.sh - -############################################################################### -# GLOBALS -# -# TODO make this configurable -[ -f /opt/openslx/config ] && . /opt/openslx/config -[ -z $SLX_DNBD3_SERVER ] && SLX_DNBD3_SERVER="132.230.4.1" -[ -z $SLX_STAGE4 ] && SLX_STAGE4="stage4/joe/centos7" -[ -z $SLX_STAGE4_RID ] && SLX_STAGE4_RID="4" -declare -rg DNBD3_SERVER="$SLX_DNBD3_SERVER" -declare -rg DNBD3_IMAGE="$SLX_STAGE4" -declare -rg DNBD3_RID="$SLX_STAGE4_RID" -declare -rg DNBD3_DEVICE="/dev/dnbd0" -declare -rg QCOW_CONTAINER="/opt/openslx/system/system.qcow2" -# -# END GLOBALS -############################################################################### - -############################################################################### -# FUNCTION DEFINITIONS -# -# helper to do some sanity checks -check_dnbd3() { - if [ ! command -v "dnbd3-client" >/dev/null ]; then - warn "No 'dnbd3-client' found. Was the initramfs built correctly?" - emergency_shell -n "Error in $0" - return 1 - fi - return 0 -} - -# helper to connect to the dnbd3-server -connect_dnbd3() { - # check if it already connected - local current_image_name="$(cat /sys/block/${DNBD3_DEVICE#/dev/}/net/image_name)" - [ "x${current_image_name}" != "x(null)" ] && return 0 - - # not connected yet, do it - if ! dnbd3-client -h "${DNBD3_SERVER}" \ - -i "${DNBD3_IMAGE}" \ - -r "${DNBD3_RID}" \ - -d "${DNBD3_DEVICE}" ; then - warn "Failed to mount $DNBD3_IMAGE from $DNBD3_SERVER to $DNBD3_DEVICE" - emergency_shell -n "Error in $0" - return 1 - fi - return 0 -} - -# helper to create the qcow2 container file using -# DNBD3_DEVICE as the base of the filesystem -# QCOW_CONTAINER as the writable file -# (our future rootfs) -create_qcow() { - # check if we already created the qcow2-container - [ -e "$QCOW_CONTAINER" ] && return 0 - - # check if we have our target directory, if not create it - [ ! -d "$(busybox dirname $QCOW_CONTAINER)" ] && \ - mkdir -p "$(busybox dirname $QCOW_CONTAINER)" - - # we did not, let's create it - if ! qemu-img create -f qcow2 -o \ - backing_file="$DNBD3_DEVICE",backing_fmt=qcow2 "$QCOW_CONTAINER"; then - warn "Failed to create qcow2-Container from $DNBD3_DEVICE" - emergency_shell -n "Error in $0" - rm -f -- "$QCOW_CONTAINER" - return 1 - fi - return 0 -} -# helper to start qemu-nbd on localhost:2000 -# use our wrapper to set argv[0][0] to '@' -# this keeps qemu-nbd running after switching root -export_qcow() { - # check if we already have a qemu-nbd - if [ -e /tmp/qemu-nbd.pid ]; then - kill -0 $(cat /tmp/qemu-nbd.pid) && return 0 - fi - # since we use the wrapper, we need a little more logic to see if it runs - /usr/bin/systemd-preserve-process-marker \ - /usr/bin/qemu-nbd -t -p 2000 "$QCOW_CONTAINER" & - # the wrapper returns 255 if the qemu-nbd binary is missing - local qemu_nbd_pid="$!" - for i in 0.5 1 2; do - sleep $i - if ! kill -0 $qemu_nbd_pid; then - # not running - wait $qemu_nbd_pid - local ret_wrapper="$?" - if [ "${ret_wrapper}" -eq 127 ]; then - # wrapper was not found by bash - warn "No such file or directory: /usr/bin/systemd-preserve-process-marker" - elif [ "${ret_wrapper}" -eq 255 ]; then - # qemu-nbd was not found - warn "No such file or directory: /usr/bin/qemu-nbd" - fi - emergency_shell -n "Error in $0" - return 1 - else - # all good, qemu-nbd is running, remember its pid - echo $qemu_nbd_pid > /tmp/qemu-nbd.pid - return 0 - fi - done - # fallback - return 1 -} -# helper to mount the qcow2-container per nbd -connect_qcow() { - # try to mount the locally exported qcow2-container using nbd-client - if /usr/bin/systemd-preserve-process-marker \ - nbd-client --persist 127.0.0.1 2000 /dev/nbd0; then - # it worked, lets set the symlink to /dev/root as dracut needs it - # later on to mount that device to the future root (/sysroot) - ln -sf /dev/nbd0 /dev/root - return 0 - else - # this is pretty bad, dracut would spawn an emergency later on - # since there is no /dev/root to mount. - # For debugging purposes, we drop an emergency shell ourselves - # if the mount fails. - warn "Could not mount /dev/nbd0 from 127.0.0.1:2000." - emergency_shell -n "Error in $0" - return 1 - fi -} -# -# END FUNCTION DEFINITIONS -############################################################################### - -# No main, use functions! diff --git a/builder/dnbd3-qcow2-rootfs/scripts/utils.sh b/builder/dnbd3-qcow2-rootfs/scripts/utils.sh deleted file mode 100644 index 0e0c9479..00000000 --- a/builder/dnbd3-qcow2-rootfs/scripts/utils.sh +++ /dev/null @@ -1,95 +0,0 @@ -function log() { - # Handles logging messages. Returns non zero and exit on log level - # error to support chaining the message into toolchain. - # - # Examples: - # - # >>> build_initramfs_log - # info: test - # >>> build_initramfs_log debug message - # debug: message - # >>> build_initramfs_log info message '\n' - # - # info: message - local loggingType='info' && \ - local message="$1" && \ - if [ "$2" ]; then - loggingType="$1" - message="$2" - fi - if [ "$_VERBOSE" == 'yes' ] || [ "$loggingType" == 'error' ] || \ - [ "$loggingType" == 'critical' ]; then - if [ "$3" ]; then - echo -e -n "$3" - fi - echo -e "${loggingType}: $message" - fi - if [ "$loggingType" == 'error' ]; then - exit 1 - fi - return 0 -} -function compile_nbd() { - # Downloads and compiles nbd. - # - # Examples: - # - # >>> build_initramfs_compile_nbd - # ... - # Provides the following file: - # ${_KERNEL_MODULE_DIRECTORY}/nbd/nbd.ko - pushd "${_KERNEL_MODULE_DIRECTORY}/nbd" \ - 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ - build_initramfs_log 'Compile the nbd kernel module.' && \ - make 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ - popd 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" - return $? - # TODO make clean -} -function compile_dnbd3() { - # Downloads and compiles dnbd3. - # - # Examples: - # - # >>> build_initramfs_compile_dnbd3 - # ... - # Provides the following file: - # ${_KERNEL_MODULE_DIRECTORY}/dnbd3/build/dnbd3.ko - rm --recursive --force ${_KERNEL_MODULE_DIRECTORY}/dnbd3 \ - 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ - pushd $_KERNEL_MODULE_DIRECTORY \ - 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ - git clone git://git.openslx.org/dnbd3.git \ - 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ - cd dnbd3 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ - ./build.sh 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ - popd 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" - return $? - # TODO rm -rf build -} -function compile_systemd_preserve_process_marker() { - # Compiles simple c program. - pushd && \ - make && \ - popd - return $? -} -function perform_dependency_check() { - # This function check if all given dependencies are present. - # - # Examples: - # - # >>> build_initramfs_perform_dependency_check "mkdir pacstrap mktemp" - # ... - local dependenciesToCheck="$1" && \ - local result=0 && \ - local dependency && \ - for dependency in ${dependenciesToCheck[*]}; do - if ! hash "$dependency" 1>"$_STANDARD_OUTPUT" 2>/dev/null; then - build_initramfs_log 'critical' \ - "Needed dependency \"$dependency\" isn't available." && \ - result=1 - fi - done - return $result -} diff --git a/builder/dnbd3-qcow2-rootfs/udev/70-openslx-disk.rules b/builder/dnbd3-qcow2-rootfs/udev/70-openslx-disk.rules deleted file mode 100644 index 5cb3fa52..00000000 --- a/builder/dnbd3-qcow2-rootfs/udev/70-openslx-disk.rules +++ /dev/null @@ -1,7 +0,0 @@ -# GPT rules -KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="gpt" ENV{ID_PART_ENTRY_NAME}=="OPENSLX_TMP" RUN+="/sbin/prepare-disks %E{ID_PART_ENTRY_NAME} %k" -KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="gpt" ENV{ID_PART_ENTRY_NAME}=="OPENSLX_SYS" RUN+="/sbin/prepare-disks %E{ID_PART_ENTRY_NAME} %k" - -# MBR rules -KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="dos" ENV{ID_PART_ENTRY_TYPE}=="0x44" RUN+="/sbin/prepare-disks OPENSLX_TMP %k" -KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="dos" ENV{ID_PART_ENTRY_TYPE}=="0x46" RUN+="/sbin/prepare-disks OPENSLX_SYS %k" diff --git a/builder/dnbd3-rootfs/binaries/busybox/busybox b/builder/dnbd3-rootfs/binaries/busybox/busybox new file mode 100755 index 00000000..7eceacf7 Binary files /dev/null and b/builder/dnbd3-rootfs/binaries/busybox/busybox differ diff --git a/builder/dnbd3-rootfs/binaries/dnbd3 b/builder/dnbd3-rootfs/binaries/dnbd3 new file mode 160000 index 00000000..c3c05085 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/dnbd3 @@ -0,0 +1 @@ +Subproject commit c3c050851dc866f2311d33a262ed81af8c57ce22 diff --git a/builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd b/builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd new file mode 100644 index 00000000..17386f08 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd @@ -0,0 +1 @@ +cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko := ld -r -m elf_x86_64 -T ./scripts/module-common.lds --build-id -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o diff --git a/builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd b/builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd new file mode 100644 index 00000000..1248ea8a --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd @@ -0,0 +1,595 @@ +cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := gcc -Wp,-MD,/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.nbd.mod.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(nbd.mod)" -D"KBUILD_MODNAME=KBUILD_STR(nbd)" -DMODULE -c -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.c + +source_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.c + +deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := \ + $(wildcard include/config/module/unload.h) \ + include/linux/module.h \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/module/sig.h) \ + $(wildcard include/config/modules/tree/lookup.h) \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + $(wildcard include/config/livepatch.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + include/uapi/linux/types.h \ + arch/x86/include/uapi/asm/types.h \ + include/uapi/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + include/uapi/asm-generic/int-ll64.h \ + arch/x86/include/uapi/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/uapi/asm-generic/bitsperlong.h \ + include/uapi/linux/posix_types.h \ + include/linux/stddef.h \ + include/uapi/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + $(wildcard include/config/kprobes.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + $(wildcard include/config/gcov/kernel.h) \ + $(wildcard include/config/arch/use/builtin/bswap.h) \ + arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + arch/x86/include/uapi/asm/posix_types_64.h \ + include/uapi/asm-generic/posix_types.h \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/uapi/linux/const.h \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/atomic/sleep.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/panic/timeout.h) \ + /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include/stdarg.h \ + include/linux/linkage.h \ + include/linux/stringify.h \ + include/linux/export.h \ + $(wildcard include/config/have/underscore/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/bitops.h \ + arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + arch/x86/include/asm/asm.h \ + arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/x86/debugctlmsr.h) \ + arch/x86/include/asm/segment.h \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + arch/x86/include/asm/page_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/kasan.h) \ + $(wildcard include/config/randomize/base.h) \ + $(wildcard include/config/randomize/base/max/offset.h) \ + arch/x86/include/uapi/asm/ptrace.h \ + arch/x86/include/uapi/asm/ptrace-abi.h \ + arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + arch/x86/include/uapi/asm/processor-flags.h \ + arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/pgtable/levels.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/queued/spinlocks.h) \ + $(wildcard include/config/paravirt/debug.h) \ + arch/x86/include/asm/desc_defs.h \ + arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/mem/soft/dirty.h) \ + $(wildcard include/config/proc/fs.h) \ + arch/x86/include/asm/pgtable_64_types.h \ + arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/sparsemem.h) \ + arch/x86/include/asm/spinlock_types.h \ + $(wildcard include/config/paravirt/spinlocks.h) \ + $(wildcard include/config/nr/cpus.h) \ + include/asm-generic/qspinlock_types.h \ + include/asm-generic/qrwlock_types.h \ + include/asm-generic/ptrace.h \ + arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/feature/names.h) \ + $(wildcard include/config/x86/debug/static/cpu/has.h) \ + arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + $(wildcard include/config/matom.h) \ + arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/x86/intel/mpx.h) \ + arch/x86/include/asm/rmwcc.h \ + arch/x86/include/asm/barrier.h \ + $(wildcard include/config/x86/ppro/fence.h) \ + arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/le.h \ + arch/x86/include/uapi/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/uapi/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + include/uapi/linux/swab.h \ + arch/x86/include/uapi/asm/swab.h \ + include/linux/byteorder/generic.h \ + include/asm-generic/bitops/ext2-atomic-setbit.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/message/loglevel/default.h) \ + $(wildcard include/config/early/printk.h) \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/broken/rodata.h) \ + $(wildcard include/config/lto.h) \ + include/linux/kern_levels.h \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/uapi/linux/kernel.h \ + include/uapi/linux/sysinfo.h \ + include/linux/dynamic_debug.h \ + include/linux/stat.h \ + arch/x86/include/uapi/asm/stat.h \ + include/uapi/linux/stat.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/seqlock.h \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/preempt.h) \ + include/linux/preempt.h \ + $(wildcard include/config/preempt/count.h) \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + arch/x86/include/asm/preempt.h \ + arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/threads.h \ + $(wildcard include/config/base/small.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + include/linux/thread_info.h \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + include/linux/bug.h \ + arch/x86/include/asm/bug.h \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/ia32/emulation.h) \ + arch/x86/include/asm/page.h \ + arch/x86/include/asm/page_64.h \ + $(wildcard include/config/debug/virtual.h) \ + $(wildcard include/config/flatmem.h) \ + $(wildcard include/config/x86/vsyscall/emulation.h) \ + include/linux/range.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + include/asm-generic/getorder.h \ + arch/x86/include/asm/processor.h \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/xen.h) \ + arch/x86/include/asm/vm86.h \ + arch/x86/include/uapi/asm/vm86.h \ + arch/x86/include/asm/math_emu.h \ + arch/x86/include/asm/sigcontext.h \ + arch/x86/include/uapi/asm/sigcontext.h \ + arch/x86/include/asm/current.h \ + arch/x86/include/asm/msr.h \ + arch/x86/include/asm/msr-index.h \ + arch/x86/include/uapi/asm/errno.h \ + include/uapi/asm-generic/errno.h \ + include/uapi/asm-generic/errno-base.h \ + arch/x86/include/asm/cpumask.h \ + include/linux/cpumask.h \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + include/uapi/linux/string.h \ + arch/x86/include/asm/string.h \ + arch/x86/include/asm/string_64.h \ + arch/x86/include/uapi/asm/msr.h \ + include/uapi/linux/ioctl.h \ + arch/x86/include/uapi/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + include/uapi/asm-generic/ioctl.h \ + arch/x86/include/asm/paravirt.h \ + arch/x86/include/asm/special_insns.h \ + arch/x86/include/asm/fpu/types.h \ + include/linux/personality.h \ + include/uapi/linux/personality.h \ + include/linux/math64.h \ + $(wildcard include/config/arch/supports/int128.h) \ + arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + include/linux/irqflags.h \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + arch/x86/include/asm/irqflags.h \ + include/linux/atomic.h \ + $(wildcard include/config/arch/has/atomic/or.h) \ + $(wildcard include/config/generic/atomic64.h) \ + arch/x86/include/asm/atomic.h \ + arch/x86/include/asm/cmpxchg.h \ + arch/x86/include/asm/cmpxchg_64.h \ + arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lockdep.h) \ + $(wildcard include/config/lock/stat.h) \ + include/linux/rwlock_types.h \ + arch/x86/include/asm/spinlock.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + arch/x86/include/asm/jump_label.h \ + arch/x86/include/asm/qspinlock.h \ + include/asm-generic/qspinlock.h \ + arch/x86/include/asm/qrwlock.h \ + include/asm-generic/qrwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/uninline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/time64.h \ + include/uapi/linux/time.h \ + include/linux/uidgid.h \ + $(wildcard include/config/multiuser.h) \ + $(wildcard include/config/user/ns.h) \ + include/linux/highuid.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + $(wildcard include/config/highmem.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/deferred/struct/page/init.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/cma.h) \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/memory/isolation.h) \ + $(wildcard include/config/memcg.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/have/memblock/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/page/extension.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/numa/balancing.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/have/memoryless/nodes.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/wait.h \ + include/uapi/linux/wait.h \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/nodemask.h \ + $(wildcard include/config/movable/node.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + $(wildcard include/config/have/bootmem/info/node.h) \ + include/linux/notifier.h \ + include/linux/errno.h \ + include/uapi/linux/errno.h \ + include/linux/mutex.h \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/mutex/spin/on/owner.h) \ + include/linux/osq_lock.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/spin/on/owner.h) \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + arch/x86/include/asm/rwsem.h \ + include/linux/srcu.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/trace.h) \ + $(wildcard include/config/rcu/stall/common.h) \ + $(wildcard include/config/rcu/user/qs.h) \ + $(wildcard include/config/rcu/nocb/cpu.h) \ + $(wildcard include/config/tasks/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/prove/rcu.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/rcu/nocb/cpu/all.h) \ + $(wildcard include/config/no/hz/full/sysidle.h) \ + include/linux/completion.h \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/ktime.h \ + include/linux/jiffies.h \ + include/linux/timex.h \ + include/uapi/linux/timex.h \ + include/uapi/linux/param.h \ + arch/x86/include/uapi/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/uapi/asm-generic/param.h \ + arch/x86/include/asm/timex.h \ + arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/generated/timeconst.h \ + include/linux/timekeeping.h \ + include/linux/rcutree.h \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + $(wildcard include/config/no/hz/common.h) \ + include/linux/sysctl.h \ + $(wildcard include/config/sysctl.h) \ + include/linux/rbtree.h \ + include/uapi/linux/sysctl.h \ + arch/x86/include/asm/mmzone.h \ + arch/x86/include/asm/mmzone_64.h \ + arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + $(wildcard include/config/debug/nmi/selftest.h) \ + arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + arch/x86/include/asm/mpspec_def.h \ + arch/x86/include/asm/x86_init.h \ + arch/x86/include/uapi/asm/bootparam.h \ + include/linux/screen_info.h \ + include/uapi/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/uapi/linux/apm_bios.h \ + include/linux/edd.h \ + include/uapi/linux/edd.h \ + arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/hibernation.h) \ + arch/x86/include/uapi/asm/e820.h \ + $(wildcard include/config/x86/pmem/legacy.h) \ + $(wildcard include/config/intel/txt.h) \ + include/linux/ioport.h \ + arch/x86/include/asm/ist.h \ + arch/x86/include/uapi/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + include/uapi/video/edid.h \ + arch/x86/include/asm/apicdef.h \ + arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/vt/console/sleep.h) \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/clk.h) \ + $(wildcard include/config/pm/generic/domains.h) \ + arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/paravirt/clock.h) \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/intel/mid.h) \ + arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi.h) \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + arch/x86/include/asm/topology.h \ + include/asm-generic/topology.h \ + arch/x86/include/asm/mmu.h \ + arch/x86/include/asm/realmode.h \ + $(wildcard include/config/acpi/sleep.h) \ + arch/x86/include/asm/io.h \ + $(wildcard include/config/mtrr.h) \ + arch/x86/include/generated/asm/early_ioremap.h \ + include/asm-generic/early_ioremap.h \ + $(wildcard include/config/generic/early/ioremap.h) \ + include/asm-generic/iomap.h \ + $(wildcard include/config/has/ioport/map.h) \ + $(wildcard include/config/pci.h) \ + $(wildcard include/config/generic/iomap.h) \ + include/asm-generic/pci_iomap.h \ + $(wildcard include/config/no/generic/pci/ioport/map.h) \ + $(wildcard include/config/generic/pci/iomap.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + $(wildcard include/config/xen/pvh.h) \ + include/xen/interface/xen.h \ + arch/x86/include/asm/xen/interface.h \ + arch/x86/include/asm/xen/interface_64.h \ + arch/x86/include/asm/pvclock-abi.h \ + arch/x86/include/asm/xen/hypervisor.h \ + include/xen/features.h \ + include/xen/interface/features.h \ + arch/x86/include/asm/pvclock.h \ + include/linux/clocksource.h \ + $(wildcard include/config/arch/clocksource/data.h) \ + $(wildcard include/config/clocksource/watchdog.h) \ + $(wildcard include/config/clksrc/of.h) \ + arch/x86/include/asm/clocksource.h \ + arch/x86/include/uapi/asm/vsyscall.h \ + include/asm-generic/fixmap.h \ + arch/x86/include/asm/idle.h \ + arch/x86/include/asm/io_apic.h \ + arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/have/kvm.h) \ + $(wildcard include/config/pci/msi.h) \ + include/linux/topology.h \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + $(wildcard include/config/sched/smt.h) \ + include/linux/smp.h \ + $(wildcard include/config/up/late/init.h) \ + include/linux/llist.h \ + $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/elf.h \ + arch/x86/include/asm/elf.h \ + $(wildcard include/config/x86/x32/abi.h) \ + arch/x86/include/asm/user.h \ + arch/x86/include/asm/user_64.h \ + arch/x86/include/uapi/asm/auxvec.h \ + arch/x86/include/asm/vdso.h \ + $(wildcard include/config/x86/x32.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ + $(wildcard include/config/have/cmpxchg/double.h) \ + $(wildcard include/config/have/aligned/struct/page.h) \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + include/uapi/linux/auxvec.h \ + include/linux/uprobes.h \ + $(wildcard include/config/uprobes.h) \ + arch/x86/include/asm/uprobes.h \ + include/uapi/linux/elf.h \ + include/uapi/linux/elf-em.h \ + include/linux/kobject.h \ + $(wildcard include/config/uevent/helper.h) \ + $(wildcard include/config/debug/kobject/release.h) \ + include/linux/sysfs.h \ + include/linux/kernfs.h \ + $(wildcard include/config/kernfs.h) \ + include/linux/idr.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/rbtree_latch.h \ + arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + $(wildcard include/config/have/mod/arch/specific.h) \ + $(wildcard include/config/modules/use/elf/rel.h) \ + $(wildcard include/config/modules/use/elf/rela.h) \ + include/linux/vermagic.h \ + include/generated/utsrelease.h \ + +/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o: $(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o) + +$(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o): diff --git a/builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd b/builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd new file mode 100644 index 00000000..b4c40a04 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd @@ -0,0 +1,1145 @@ +cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := gcc -Wp,-MD,/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.nbd.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(nbd)" -D"KBUILD_MODNAME=KBUILD_STR(nbd)" -c -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.tmp_nbd.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.c + +source_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.c + +deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := \ + $(wildcard include/config/debug/fs.h) \ + include/uapi/linux/major.h \ + include/linux/blkdev.h \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/blk/cgroup.h) \ + $(wildcard include/config/blk/dev/integrity.h) \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/blk/dev/bsg.h) \ + $(wildcard include/config/blk/dev/throttling.h) \ + $(wildcard include/config/bounce.h) \ + $(wildcard include/config/mmu.h) \ + include/linux/sched.h \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/no/hz/common.h) \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/debug/atomic/sleep.h) \ + $(wildcard include/config/prove/rcu.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/preempt/count.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting/native.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/sched/info.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/tasks/rcu.h) \ + $(wildcard include/config/memcg/kmem.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/virt/cpu/accounting/gen.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/lockdep.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/numa/balancing.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/kasan.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/memcg.h) \ + $(wildcard include/config/uprobes.h) \ + $(wildcard include/config/bcache.h) \ + $(wildcard include/config/arch/wants/dynamic/task/struct.h) \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/no/hz/full.h) \ + $(wildcard include/config/proc/fs.h) \ + $(wildcard include/config/stack/growsup.h) \ + $(wildcard include/config/have/copy/thread/tls.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + $(wildcard include/config/preempt.h) \ + include/uapi/linux/sched.h \ + include/linux/sched/prio.h \ + arch/x86/include/uapi/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/uapi/asm-generic/param.h \ + include/linux/capability.h \ + $(wildcard include/config/multiuser.h) \ + include/uapi/linux/capability.h \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + include/uapi/linux/types.h \ + arch/x86/include/uapi/asm/types.h \ + include/uapi/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + include/uapi/asm-generic/int-ll64.h \ + arch/x86/include/uapi/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/uapi/asm-generic/bitsperlong.h \ + include/uapi/linux/posix_types.h \ + include/linux/stddef.h \ + include/uapi/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + $(wildcard include/config/kprobes.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + $(wildcard include/config/gcov/kernel.h) \ + $(wildcard include/config/arch/use/builtin/bswap.h) \ + arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + arch/x86/include/uapi/asm/posix_types_64.h \ + include/uapi/asm-generic/posix_types.h \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/panic/timeout.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include/stdarg.h \ + include/linux/linkage.h \ + include/linux/stringify.h \ + include/linux/export.h \ + $(wildcard include/config/have/underscore/symbol/prefix.h) \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/bitops.h \ + arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + arch/x86/include/asm/asm.h \ + arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/x86/debugctlmsr.h) \ + arch/x86/include/asm/segment.h \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + include/uapi/linux/const.h \ + arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + arch/x86/include/asm/page_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/randomize/base.h) \ + $(wildcard include/config/randomize/base/max/offset.h) \ + arch/x86/include/uapi/asm/ptrace.h \ + arch/x86/include/uapi/asm/ptrace-abi.h \ + arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + arch/x86/include/uapi/asm/processor-flags.h \ + arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/pgtable/levels.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/queued/spinlocks.h) \ + $(wildcard include/config/paravirt/debug.h) \ + arch/x86/include/asm/desc_defs.h \ + arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/mem/soft/dirty.h) \ + arch/x86/include/asm/pgtable_64_types.h \ + arch/x86/include/asm/sparsemem.h \ + $(wildcard include/config/sparsemem.h) \ + arch/x86/include/asm/spinlock_types.h \ + $(wildcard include/config/paravirt/spinlocks.h) \ + include/asm-generic/qspinlock_types.h \ + include/asm-generic/qrwlock_types.h \ + include/asm-generic/ptrace.h \ + arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/feature/names.h) \ + $(wildcard include/config/x86/debug/static/cpu/has.h) \ + arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + $(wildcard include/config/matom.h) \ + arch/x86/include/asm/disabled-features.h \ + $(wildcard include/config/x86/intel/mpx.h) \ + arch/x86/include/asm/rmwcc.h \ + arch/x86/include/asm/barrier.h \ + $(wildcard include/config/x86/ppro/fence.h) \ + arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/le.h \ + arch/x86/include/uapi/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/uapi/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + include/uapi/linux/swab.h \ + arch/x86/include/uapi/asm/swab.h \ + include/linux/byteorder/generic.h \ + include/asm-generic/bitops/ext2-atomic-setbit.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/message/loglevel/default.h) \ + $(wildcard include/config/early/printk.h) \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/broken/rodata.h) \ + $(wildcard include/config/lto.h) \ + include/linux/kern_levels.h \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/uapi/linux/kernel.h \ + include/uapi/linux/sysinfo.h \ + include/linux/dynamic_debug.h \ + include/linux/timex.h \ + include/uapi/linux/timex.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/seqlock.h \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + include/linux/preempt.h \ + $(wildcard include/config/preempt/tracer.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + arch/x86/include/asm/preempt.h \ + arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + include/linux/thread_info.h \ + include/linux/bug.h \ + $(wildcard include/config/generic/bug.h) \ + arch/x86/include/asm/bug.h \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/ia32/emulation.h) \ + arch/x86/include/asm/page.h \ + arch/x86/include/asm/page_64.h \ + $(wildcard include/config/debug/virtual.h) \ + $(wildcard include/config/flatmem.h) \ + $(wildcard include/config/x86/vsyscall/emulation.h) \ + include/linux/range.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + include/asm-generic/getorder.h \ + arch/x86/include/asm/processor.h \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/xen.h) \ + arch/x86/include/asm/vm86.h \ + arch/x86/include/uapi/asm/vm86.h \ + arch/x86/include/asm/math_emu.h \ + arch/x86/include/asm/sigcontext.h \ + arch/x86/include/uapi/asm/sigcontext.h \ + arch/x86/include/asm/current.h \ + arch/x86/include/asm/msr.h \ + arch/x86/include/asm/msr-index.h \ + arch/x86/include/uapi/asm/errno.h \ + include/uapi/asm-generic/errno.h \ + include/uapi/asm-generic/errno-base.h \ + arch/x86/include/asm/cpumask.h \ + include/linux/cpumask.h \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + include/uapi/linux/string.h \ + arch/x86/include/asm/string.h \ + arch/x86/include/asm/string_64.h \ + arch/x86/include/uapi/asm/msr.h \ + include/uapi/linux/ioctl.h \ + arch/x86/include/uapi/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + include/uapi/asm-generic/ioctl.h \ + arch/x86/include/asm/paravirt.h \ + arch/x86/include/asm/special_insns.h \ + arch/x86/include/asm/fpu/types.h \ + include/linux/personality.h \ + include/uapi/linux/personality.h \ + include/linux/math64.h \ + $(wildcard include/config/arch/supports/int128.h) \ + arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + include/linux/irqflags.h \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + arch/x86/include/asm/irqflags.h \ + include/linux/atomic.h \ + $(wildcard include/config/arch/has/atomic/or.h) \ + $(wildcard include/config/generic/atomic64.h) \ + arch/x86/include/asm/atomic.h \ + arch/x86/include/asm/cmpxchg.h \ + arch/x86/include/asm/cmpxchg_64.h \ + arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lock/stat.h) \ + include/linux/rwlock_types.h \ + arch/x86/include/asm/spinlock.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + arch/x86/include/asm/jump_label.h \ + arch/x86/include/asm/qspinlock.h \ + include/asm-generic/qspinlock.h \ + arch/x86/include/asm/qrwlock.h \ + include/asm-generic/qrwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/uninline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/time64.h \ + include/uapi/linux/time.h \ + include/uapi/linux/param.h \ + arch/x86/include/asm/timex.h \ + arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/jiffies.h \ + include/generated/timeconst.h \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/rbtree.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/rcu/trace.h) \ + $(wildcard include/config/rcu/stall/common.h) \ + $(wildcard include/config/rcu/user/qs.h) \ + $(wildcard include/config/rcu/nocb/cpu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/rcu/nocb/cpu/all.h) \ + $(wildcard include/config/no/hz/full/sysidle.h) \ + include/linux/completion.h \ + include/linux/wait.h \ + include/uapi/linux/wait.h \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/ktime.h \ + include/linux/timekeeping.h \ + include/linux/rcutree.h \ + include/linux/errno.h \ + include/uapi/linux/errno.h \ + include/linux/nodemask.h \ + $(wildcard include/config/highmem.h) \ + $(wildcard include/config/movable/node.h) \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \ + $(wildcard include/config/have/cmpxchg/double.h) \ + $(wildcard include/config/have/aligned/struct/page.h) \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + $(wildcard include/config/compaction.h) \ + include/linux/auxvec.h \ + include/uapi/linux/auxvec.h \ + arch/x86/include/uapi/asm/auxvec.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/spin/on/owner.h) \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + include/linux/osq_lock.h \ + arch/x86/include/asm/rwsem.h \ + include/linux/uprobes.h \ + arch/x86/include/asm/uprobes.h \ + include/linux/notifier.h \ + include/linux/mutex.h \ + $(wildcard include/config/mutex/spin/on/owner.h) \ + include/linux/srcu.h \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + $(wildcard include/config/sysfs.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/sysctl.h \ + $(wildcard include/config/sysctl.h) \ + include/uapi/linux/sysctl.h \ + include/linux/page-flags-layout.h \ + include/generated/bounds.h \ + arch/x86/include/asm/mmu.h \ + include/linux/cputime.h \ + arch/x86/include/generated/asm/cputime.h \ + include/asm-generic/cputime.h \ + $(wildcard include/config/virt/cpu/accounting.h) \ + include/asm-generic/cputime_jiffies.h \ + include/linux/smp.h \ + $(wildcard include/config/up/late/init.h) \ + include/linux/llist.h \ + $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \ + arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + $(wildcard include/config/debug/nmi/selftest.h) \ + arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + arch/x86/include/asm/mpspec_def.h \ + arch/x86/include/asm/x86_init.h \ + arch/x86/include/uapi/asm/bootparam.h \ + include/linux/screen_info.h \ + include/uapi/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/uapi/linux/apm_bios.h \ + include/linux/edd.h \ + include/uapi/linux/edd.h \ + arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/hibernation.h) \ + arch/x86/include/uapi/asm/e820.h \ + $(wildcard include/config/x86/pmem/legacy.h) \ + $(wildcard include/config/intel/txt.h) \ + include/linux/ioport.h \ + $(wildcard include/config/memory/hotremove.h) \ + arch/x86/include/asm/ist.h \ + arch/x86/include/uapi/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + include/uapi/video/edid.h \ + arch/x86/include/asm/apicdef.h \ + arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/vt/console/sleep.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/clk.h) \ + $(wildcard include/config/pm/generic/domains.h) \ + arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/paravirt/clock.h) \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/intel/mid.h) \ + arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi.h) \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + arch/x86/include/asm/topology.h \ + include/asm-generic/topology.h \ + $(wildcard include/config/have/memoryless/nodes.h) \ + arch/x86/include/asm/realmode.h \ + $(wildcard include/config/acpi/sleep.h) \ + arch/x86/include/asm/io.h \ + $(wildcard include/config/mtrr.h) \ + arch/x86/include/generated/asm/early_ioremap.h \ + include/asm-generic/early_ioremap.h \ + $(wildcard include/config/generic/early/ioremap.h) \ + include/asm-generic/iomap.h \ + $(wildcard include/config/has/ioport/map.h) \ + $(wildcard include/config/pci.h) \ + $(wildcard include/config/generic/iomap.h) \ + include/asm-generic/pci_iomap.h \ + $(wildcard include/config/no/generic/pci/ioport/map.h) \ + $(wildcard include/config/generic/pci/iomap.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + $(wildcard include/config/xen/pvh.h) \ + include/xen/interface/xen.h \ + arch/x86/include/asm/xen/interface.h \ + arch/x86/include/asm/xen/interface_64.h \ + arch/x86/include/asm/pvclock-abi.h \ + arch/x86/include/asm/xen/hypervisor.h \ + include/xen/features.h \ + include/xen/interface/features.h \ + arch/x86/include/asm/pvclock.h \ + include/linux/clocksource.h \ + $(wildcard include/config/arch/clocksource/data.h) \ + $(wildcard include/config/clocksource/watchdog.h) \ + $(wildcard include/config/clksrc/of.h) \ + arch/x86/include/asm/clocksource.h \ + arch/x86/include/uapi/asm/vsyscall.h \ + include/asm-generic/fixmap.h \ + arch/x86/include/asm/idle.h \ + arch/x86/include/asm/io_apic.h \ + arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/have/kvm.h) \ + $(wildcard include/config/pci/msi.h) \ + include/linux/sem.h \ + include/uapi/linux/sem.h \ + include/linux/ipc.h \ + include/linux/uidgid.h \ + $(wildcard include/config/user/ns.h) \ + include/linux/highuid.h \ + include/uapi/linux/ipc.h \ + arch/x86/include/uapi/asm/ipcbuf.h \ + include/uapi/asm-generic/ipcbuf.h \ + arch/x86/include/uapi/asm/sembuf.h \ + include/linux/shm.h \ + include/uapi/linux/shm.h \ + arch/x86/include/uapi/asm/shmbuf.h \ + include/uapi/asm-generic/shmbuf.h \ + arch/x86/include/asm/shmparam.h \ + include/linux/signal.h \ + $(wildcard include/config/old/sigaction.h) \ + include/uapi/linux/signal.h \ + arch/x86/include/asm/signal.h \ + arch/x86/include/uapi/asm/signal.h \ + include/uapi/asm-generic/signal-defs.h \ + arch/x86/include/uapi/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/uapi/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + include/linux/pfn.h \ + include/linux/topology.h \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/cma.h) \ + $(wildcard include/config/memory/isolation.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/have/memblock/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/page/extension.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/deferred/struct/page/init.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + $(wildcard include/config/have/bootmem/info/node.h) \ + arch/x86/include/asm/mmzone.h \ + arch/x86/include/asm/mmzone_64.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/gfp.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/have/arch/seccomp/filter.h) \ + $(wildcard include/config/seccomp/filter.h) \ + include/uapi/linux/seccomp.h \ + arch/x86/include/asm/seccomp.h \ + arch/x86/include/asm/unistd.h \ + $(wildcard include/config/x86/x32/abi.h) \ + arch/x86/include/uapi/asm/unistd.h \ + arch/x86/include/generated/uapi/asm/unistd_64.h \ + arch/x86/include/generated/asm/unistd_64_x32.h \ + arch/x86/include/asm/ia32_unistd.h \ + arch/x86/include/generated/asm/unistd_32_ia32.h \ + include/asm-generic/seccomp.h \ + include/uapi/linux/unistd.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/resource.h \ + include/uapi/linux/resource.h \ + arch/x86/include/uapi/asm/resource.h \ + include/asm-generic/resource.h \ + include/uapi/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + include/linux/key.h \ + include/linux/assoc_array.h \ + $(wildcard include/config/associative/array.h) \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/uapi/linux/magic.h \ + include/linux/cgroup-defs.h \ + include/uapi/linux/limits.h \ + include/linux/idr.h \ + include/linux/percpu-refcount.h \ + include/linux/percpu-rwsem.h \ + include/linux/cgroup_subsys.h \ + $(wildcard include/config/cgroup/cpuacct.h) \ + $(wildcard include/config/cgroup/device.h) \ + $(wildcard include/config/cgroup/freezer.h) \ + $(wildcard include/config/cgroup/net/classid.h) \ + $(wildcard include/config/cgroup/perf.h) \ + $(wildcard include/config/cgroup/net/prio.h) \ + $(wildcard include/config/cgroup/hugetlb.h) \ + $(wildcard include/config/cgroup/debug.h) \ + include/linux/genhd.h \ + $(wildcard include/config/fail/make/request.h) \ + $(wildcard include/config/solaris/x86/partition.h) \ + $(wildcard include/config/bsd/disklabel.h) \ + $(wildcard include/config/unixware/disklabel.h) \ + $(wildcard include/config/minix/subpartition.h) \ + include/linux/kdev_t.h \ + include/uapi/linux/kdev_t.h \ + include/linux/slab.h \ + $(wildcard include/config/debug/slab.h) \ + $(wildcard include/config/failslab.h) \ + $(wildcard include/config/slab.h) \ + $(wildcard include/config/slub.h) \ + $(wildcard include/config/slob.h) \ + include/linux/kmemleak.h \ + $(wildcard include/config/debug/kmemleak.h) \ + include/linux/kasan.h \ + $(wildcard include/config/kasan/shadow/offset.h) \ + include/linux/device.h \ + $(wildcard include/config/debug/devres.h) \ + $(wildcard include/config/pinctrl.h) \ + $(wildcard include/config/dma/cma.h) \ + $(wildcard include/config/of.h) \ + $(wildcard include/config/devtmpfs.h) \ + $(wildcard include/config/sysfs/deprecated.h) \ + include/linux/kobject.h \ + $(wildcard include/config/uevent/helper.h) \ + $(wildcard include/config/debug/kobject/release.h) \ + include/linux/sysfs.h \ + include/linux/kernfs.h \ + $(wildcard include/config/kernfs.h) \ + include/linux/kobject_ns.h \ + include/linux/stat.h \ + arch/x86/include/uapi/asm/stat.h \ + include/uapi/linux/stat.h \ + include/linux/kref.h \ + include/linux/klist.h \ + include/linux/pinctrl/devinfo.h \ + include/linux/pinctrl/consumer.h \ + include/linux/seq_file.h \ + include/linux/pinctrl/pinctrl-state.h \ + include/linux/ratelimit.h \ + arch/x86/include/asm/device.h \ + $(wildcard include/config/x86/dev/dma/ops.h) \ + $(wildcard include/config/intel/iommu.h) \ + $(wildcard include/config/amd/iommu.h) \ + include/linux/pm_wakeup.h \ + include/linux/fs.h \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/cgroup/writeback.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fs/dax.h) \ + $(wildcard include/config/migration.h) \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/lockref.h \ + $(wildcard include/config/arch/use/cmpxchg/lockref.h) \ + include/linux/path.h \ + include/linux/list_lru.h \ + include/linux/shrinker.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/uapi/linux/fiemap.h \ + include/linux/migrate_mode.h \ + include/linux/blk_types.h \ + include/uapi/linux/fs.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/uapi/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/projid.h \ + include/uapi/linux/quota.h \ + include/linux/nfs_fs_i.h \ + include/linux/fcntl.h \ + include/uapi/linux/fcntl.h \ + arch/x86/include/uapi/asm/fcntl.h \ + include/uapi/asm-generic/fcntl.h \ + include/linux/pagemap.h \ + include/linux/mm.h \ + $(wildcard include/config/ppc.h) \ + $(wildcard include/config/parisc.h) \ + $(wildcard include/config/metag.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/shmem.h) \ + $(wildcard include/config/debug/vm/rb.h) \ + $(wildcard include/config/debug/pagealloc.h) \ + $(wildcard include/config/hugetlbfs.h) \ + include/linux/debug_locks.h \ + $(wildcard include/config/debug/locking/api/selftests.h) \ + include/linux/page_ext.h \ + $(wildcard include/config/page/owner.h) \ + include/linux/stacktrace.h \ + $(wildcard include/config/stacktrace.h) \ + $(wildcard include/config/user/stacktrace/support.h) \ + arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/have/arch/soft/dirty.h) \ + arch/x86/include/asm/pgtable_64.h \ + include/asm-generic/pgtable.h \ + $(wildcard include/config/have/arch/huge/vmap.h) \ + include/linux/page-flags.h \ + $(wildcard include/config/pageflags/extended.h) \ + $(wildcard include/config/arch/uses/pg/uncached.h) \ + $(wildcard include/config/memory/failure.h) \ + $(wildcard include/config/swap.h) \ + $(wildcard include/config/ksm.h) \ + include/linux/huge_mm.h \ + include/linux/vmstat.h \ + $(wildcard include/config/vm/event/counters.h) \ + $(wildcard include/config/debug/tlbflush.h) \ + $(wildcard include/config/debug/vm/vmacache.h) \ + include/linux/vm_event_item.h \ + $(wildcard include/config/memory/balloon.h) \ + $(wildcard include/config/balloon/compaction.h) \ + include/linux/highmem.h \ + include/linux/uaccess.h \ + arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/intel/usercopy.h) \ + $(wildcard include/config/debug/strict/user/copy/checks.h) \ + arch/x86/include/asm/smap.h \ + $(wildcard include/config/x86/smap.h) \ + arch/x86/include/asm/uaccess_64.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + include/linux/vtime.h \ + include/linux/context_tracking_state.h \ + $(wildcard include/config/context/tracking.h) \ + include/linux/static_key.h \ + arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + $(wildcard include/config/x86/mce/amd.h) \ + $(wildcard include/config/hyperv.h) \ + include/linux/irq.h \ + $(wildcard include/config/irq/domain/hierarchy.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + $(wildcard include/config/hardirqs/sw/resend.h) \ + $(wildcard include/config/generic/irq/legacy/alloc/hwirq.h) \ + $(wildcard include/config/generic/irq/legacy.h) \ + include/linux/irqhandler.h \ + include/linux/irqreturn.h \ + include/linux/irqnr.h \ + include/uapi/linux/irqnr.h \ + include/linux/io.h \ + arch/x86/include/asm/irq.h \ + arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + $(wildcard include/config/sparse/irq.h) \ + $(wildcard include/config/handle/domain/irq.h) \ + arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/hpet/timer.h) \ + $(wildcard include/config/dmar/table.h) \ + $(wildcard include/config/ht/irq.h) \ + $(wildcard include/config/x86/uv.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + arch/x86/include/asm/cacheflush.h \ + $(wildcard include/config/debug/rodata/test.h) \ + include/asm-generic/cacheflush.h \ + include/linux/hugetlb_inline.h \ + include/linux/backing-dev-defs.h \ + include/linux/flex_proportions.h \ + include/linux/mempool.h \ + include/linux/bio.h \ + include/linux/ioprio.h \ + include/linux/iocontext.h \ + include/linux/bsg.h \ + include/uapi/linux/bsg.h \ + include/linux/scatterlist.h \ + $(wildcard include/config/debug/sg.h) \ + $(wildcard include/config/need/sg/dma/length.h) \ + $(wildcard include/config/arch/has/sg/chain.h) \ + include/linux/elevator.h \ + include/linux/hashtable.h \ + include/linux/hash.h \ + $(wildcard include/config/arch/has/fast/multiplier.h) \ + include/linux/module.h \ + $(wildcard include/config/module/sig.h) \ + $(wildcard include/config/modules/tree/lookup.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/livepatch.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/kmod.h \ + include/linux/elf.h \ + arch/x86/include/asm/elf.h \ + arch/x86/include/asm/user.h \ + arch/x86/include/asm/user_64.h \ + arch/x86/include/asm/vdso.h \ + $(wildcard include/config/x86/x32.h) \ + include/uapi/linux/elf.h \ + include/uapi/linux/elf-em.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/rbtree_latch.h \ + arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + $(wildcard include/config/have/mod/arch/specific.h) \ + $(wildcard include/config/modules/use/elf/rel.h) \ + $(wildcard include/config/modules/use/elf/rela.h) \ + include/linux/file.h \ + include/net/sock.h \ + $(wildcard include/config/net.h) \ + $(wildcard include/config/ipv6.h) \ + $(wildcard include/config/rps.h) \ + $(wildcard include/config/net/rx/busy/poll.h) \ + $(wildcard include/config/xfrm.h) \ + $(wildcard include/config/inet.h) \ + include/linux/list_nulls.h \ + include/linux/netdevice.h \ + $(wildcard include/config/dcb.h) \ + $(wildcard include/config/wlan.h) \ + $(wildcard include/config/ax25.h) \ + $(wildcard include/config/mac80211/mesh.h) \ + $(wildcard include/config/net/ipip.h) \ + $(wildcard include/config/net/ipgre.h) \ + $(wildcard include/config/ipv6/sit.h) \ + $(wildcard include/config/ipv6/tunnel.h) \ + $(wildcard include/config/netpoll.h) \ + $(wildcard include/config/xps.h) \ + $(wildcard include/config/bql.h) \ + $(wildcard include/config/rfs/accel.h) \ + $(wildcard include/config/fcoe.h) \ + $(wildcard include/config/net/poll/controller.h) \ + $(wildcard include/config/libfcoe.h) \ + $(wildcard include/config/wireless/ext.h) \ + $(wildcard include/config/net/switchdev.h) \ + $(wildcard include/config/vlan/8021q.h) \ + $(wildcard include/config/net/dsa.h) \ + $(wildcard include/config/tipc.h) \ + $(wildcard include/config/mpls/routing.h) \ + $(wildcard include/config/net/cls/act.h) \ + $(wildcard include/config/netfilter/ingress.h) \ + $(wildcard include/config/net/flow/limit.h) \ + include/linux/delay.h \ + arch/x86/include/asm/delay.h \ + include/asm-generic/delay.h \ + include/linux/prefetch.h \ + include/linux/dmaengine.h \ + $(wildcard include/config/async/tx/enable/channel/switch.h) \ + $(wildcard include/config/dma/engine.h) \ + $(wildcard include/config/rapidio/dma/engine.h) \ + $(wildcard include/config/async/tx/dma.h) \ + include/linux/uio.h \ + include/uapi/linux/uio.h \ + include/linux/dynamic_queue_limits.h \ + include/linux/ethtool.h \ + include/linux/compat.h \ + $(wildcard include/config/compat/old/sigaction.h) \ + $(wildcard include/config/odd/rt/sigaction.h) \ + include/linux/socket.h \ + arch/x86/include/uapi/asm/socket.h \ + include/uapi/asm-generic/socket.h \ + arch/x86/include/uapi/asm/sockios.h \ + include/uapi/asm-generic/sockios.h \ + include/uapi/linux/sockios.h \ + include/uapi/linux/socket.h \ + include/uapi/linux/if.h \ + include/uapi/linux/hdlc/ioctl.h \ + include/uapi/linux/aio_abi.h \ + arch/x86/include/asm/compat.h \ + arch/x86/include/asm/user32.h \ + include/uapi/linux/ethtool.h \ + include/linux/if_ether.h \ + include/linux/skbuff.h \ + $(wildcard include/config/nf/conntrack.h) \ + $(wildcard include/config/bridge/netfilter.h) \ + $(wildcard include/config/ipv6/ndisc/nodetype.h) \ + $(wildcard include/config/net/sched.h) \ + $(wildcard include/config/network/secmark.h) \ + $(wildcard include/config/network/phy/timestamping.h) \ + $(wildcard include/config/netfilter/xt/target/trace.h) \ + $(wildcard include/config/nf/tables.h) \ + include/linux/kmemcheck.h \ + include/linux/net.h \ + include/linux/random.h \ + $(wildcard include/config/arch/random.h) \ + include/uapi/linux/random.h \ + arch/x86/include/asm/archrandom.h \ + include/uapi/linux/net.h \ + include/linux/textsearch.h \ + include/net/checksum.h \ + arch/x86/include/asm/checksum.h \ + arch/x86/include/asm/checksum_64.h \ + include/linux/dma-mapping.h \ + $(wildcard include/config/has/dma.h) \ + $(wildcard include/config/arch/has/dma/set/coherent/mask.h) \ + $(wildcard include/config/have/dma/attrs.h) \ + $(wildcard include/config/need/dma/map/state.h) \ + include/linux/dma-attrs.h \ + include/linux/dma-direction.h \ + arch/x86/include/asm/dma-mapping.h \ + $(wildcard include/config/isa.h) \ + $(wildcard include/config/x86/dma/remap.h) \ + include/linux/dma-debug.h \ + $(wildcard include/config/dma/api/debug.h) \ + arch/x86/include/asm/swiotlb.h \ + $(wildcard include/config/swiotlb.h) \ + include/linux/swiotlb.h \ + include/asm-generic/dma-coherent.h \ + $(wildcard include/config/have/generic/dma/coherent.h) \ + include/linux/dma-contiguous.h \ + include/asm-generic/dma-mapping-common.h \ + include/linux/netdev_features.h \ + include/net/flow_dissector.h \ + include/linux/in6.h \ + include/uapi/linux/in6.h \ + include/uapi/linux/libc-compat.h \ + include/uapi/linux/if_ether.h \ + include/linux/splice.h \ + include/linux/pipe_fs_i.h \ + include/net/net_namespace.h \ + $(wildcard include/config/ieee802154/6lowpan.h) \ + $(wildcard include/config/ip/sctp.h) \ + $(wildcard include/config/ip/dccp.h) \ + $(wildcard include/config/netfilter.h) \ + $(wildcard include/config/nf/defrag/ipv6.h) \ + $(wildcard include/config/wext/core.h) \ + $(wildcard include/config/ip/vs.h) \ + $(wildcard include/config/mpls.h) \ + $(wildcard include/config/net/ns.h) \ + include/net/flow.h \ + include/net/netns/core.h \ + include/net/netns/mib.h \ + $(wildcard include/config/xfrm/statistics.h) \ + include/net/snmp.h \ + include/uapi/linux/snmp.h \ + include/linux/u64_stats_sync.h \ + include/net/netns/unix.h \ + include/net/netns/packet.h \ + include/net/netns/ipv4.h \ + $(wildcard include/config/ip/multiple/tables.h) \ + $(wildcard include/config/ip/route/classid.h) \ + $(wildcard include/config/ip/mroute.h) \ + $(wildcard include/config/ip/mroute/multiple/tables.h) \ + include/net/inet_frag.h \ + include/net/netns/ipv6.h \ + $(wildcard include/config/ipv6/multiple/tables.h) \ + $(wildcard include/config/ipv6/mroute.h) \ + $(wildcard include/config/ipv6/mroute/multiple/tables.h) \ + include/net/dst_ops.h \ + include/net/netns/ieee802154_6lowpan.h \ + include/net/netns/sctp.h \ + include/net/netns/dccp.h \ + include/net/netns/netfilter.h \ + include/linux/netfilter_defs.h \ + include/uapi/linux/netfilter.h \ + include/linux/in.h \ + include/uapi/linux/in.h \ + include/net/netns/x_tables.h \ + $(wildcard include/config/bridge/nf/ebtables.h) \ + include/net/netns/conntrack.h \ + $(wildcard include/config/nf/conntrack/proc/compat.h) \ + $(wildcard include/config/nf/conntrack/events.h) \ + $(wildcard include/config/nf/conntrack/labels.h) \ + $(wildcard include/config/nf/nat/needed.h) \ + include/linux/netfilter/nf_conntrack_tcp.h \ + include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + include/net/netns/nftables.h \ + include/net/netns/xfrm.h \ + include/uapi/linux/xfrm.h \ + include/net/flowcache.h \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/net/netns/mpls.h \ + include/linux/ns_common.h \ + include/linux/seq_file_net.h \ + include/net/dsa.h \ + $(wildcard include/config/net/dsa/hwmon.h) \ + include/linux/of.h \ + $(wildcard include/config/sparc.h) \ + $(wildcard include/config/of/dynamic.h) \ + $(wildcard include/config/attach/node.h) \ + $(wildcard include/config/detach/node.h) \ + $(wildcard include/config/add/property.h) \ + $(wildcard include/config/remove/property.h) \ + $(wildcard include/config/update/property.h) \ + $(wildcard include/config/no/change.h) \ + $(wildcard include/config/change/add.h) \ + $(wildcard include/config/change/remove.h) \ + $(wildcard include/config/of/resolve.h) \ + $(wildcard include/config/of/overlay.h) \ + include/linux/mod_devicetable.h \ + include/linux/uuid.h \ + include/uapi/linux/uuid.h \ + include/linux/property.h \ + include/linux/fwnode.h \ + include/linux/phy.h \ + include/linux/mii.h \ + include/uapi/linux/mii.h \ + include/linux/phy_fixed.h \ + $(wildcard include/config/fixed/phy.h) \ + include/net/netprio_cgroup.h \ + include/linux/cgroup.h \ + include/uapi/linux/cgroupstats.h \ + include/uapi/linux/taskstats.h \ + include/uapi/linux/neighbour.h \ + include/linux/netlink.h \ + include/net/scm.h \ + $(wildcard include/config/security/network.h) \ + include/linux/security.h \ + $(wildcard include/config/security/network/xfrm.h) \ + $(wildcard include/config/security/path.h) \ + $(wildcard include/config/securityfs.h) \ + include/linux/nsproxy.h \ + include/uapi/linux/netlink.h \ + include/uapi/linux/netdevice.h \ + include/uapi/linux/if_packet.h \ + include/linux/if_link.h \ + include/uapi/linux/if_link.h \ + include/uapi/linux/if_bonding.h \ + include/linux/page_counter.h \ + include/linux/memcontrol.h \ + $(wildcard include/config/memcg/swap.h) \ + include/linux/filter.h \ + $(wildcard include/config/bpf/jit.h) \ + include/uapi/linux/filter.h \ + include/uapi/linux/bpf_common.h \ + include/uapi/linux/bpf.h \ + include/linux/rculist_nulls.h \ + include/linux/poll.h \ + include/uapi/linux/poll.h \ + arch/x86/include/uapi/asm/poll.h \ + include/uapi/asm-generic/poll.h \ + include/net/dst.h \ + include/linux/rtnetlink.h \ + $(wildcard include/config/net/ingress.h) \ + include/uapi/linux/rtnetlink.h \ + include/uapi/linux/if_addr.h \ + include/net/neighbour.h \ + include/net/rtnetlink.h \ + include/net/netlink.h \ + include/net/tcp_states.h \ + include/uapi/linux/net_tstamp.h \ + include/linux/kthread.h \ + include/linux/debugfs.h \ + include/uapi/linux/nbd.h \ + +/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o: $(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o) + +$(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o): diff --git a/builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod b/builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod new file mode 100644 index 00000000..f2bc3309 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod @@ -0,0 +1,2 @@ +/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko +/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o diff --git a/builder/dnbd3-rootfs/binaries/nbd/Makefile b/builder/dnbd3-rootfs/binaries/nbd/Makefile new file mode 100644 index 00000000..ca0423f5 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/Makefile @@ -0,0 +1,15 @@ +obj-m += nbd.o + +all: build + +build: update + make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) modules + +install: + make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) modules_install + +clean: + make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) clean + +update: + curl --location --remote-name https://raw.githubusercontent.com/torvalds/linux/master/drivers/block/nbd.c diff --git a/builder/dnbd3-rootfs/binaries/nbd/Module.symvers b/builder/dnbd3-rootfs/binaries/nbd/Module.symvers new file mode 100644 index 00000000..e69de29b diff --git a/builder/dnbd3-rootfs/binaries/nbd/modules.order b/builder/dnbd3-rootfs/binaries/nbd/modules.order new file mode 100644 index 00000000..8f303a78 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/modules.order @@ -0,0 +1 @@ +kernel//media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.c b/builder/dnbd3-rootfs/binaries/nbd/nbd.c new file mode 100644 index 00000000..1b876233 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/nbd.c @@ -0,0 +1,1136 @@ +/* + * Network block device - make block devices work over TCP + * + * Note that you can not swap over this thing, yet. Seems to work but + * deadlocks sometimes - you can not swap over TCP in general. + * + * Copyright 1997-2000, 2008 Pavel Machek + * Parts copyright 2001 Steven Whitehouse + * + * This file is released under GPLv2 or later. + * + * (part of code stolen from loop.c) + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +struct nbd_device { + u32 flags; + struct socket * sock; /* If == NULL, device is not ready, yet */ + int magic; + + spinlock_t queue_lock; + struct list_head queue_head; /* Requests waiting result */ + struct request *active_req; + wait_queue_head_t active_wq; + struct list_head waiting_queue; /* Requests to be sent */ + wait_queue_head_t waiting_wq; + + struct mutex tx_lock; + struct gendisk *disk; + int blksize; + loff_t bytesize; + int xmit_timeout; + bool disconnect; /* a disconnect has been requested by user */ + + struct timer_list timeout_timer; + spinlock_t tasks_lock; + struct task_struct *task_recv; + struct task_struct *task_send; + +#if IS_ENABLED(CONFIG_DEBUG_FS) + struct dentry *dbg_dir; +#endif +}; + +#if IS_ENABLED(CONFIG_DEBUG_FS) +static struct dentry *nbd_dbg_dir; +#endif + +#define nbd_name(nbd) ((nbd)->disk->disk_name) + +#define NBD_MAGIC 0x68797548 + +static unsigned int nbds_max = 16; +static struct nbd_device *nbd_dev; +static int max_part; + +/* + * Use just one lock (or at most 1 per NIC). Two arguments for this: + * 1. Each NIC is essentially a synchronization point for all servers + * accessed through that NIC so there's no need to have more locks + * than NICs anyway. + * 2. More locks lead to more "Dirty cache line bouncing" which will slow + * down each lock to the point where they're actually slower than just + * a single lock. + * Thanks go to Jens Axboe and Al Viro for their LKML emails explaining this! + */ +static DEFINE_SPINLOCK(nbd_lock); + +static inline struct device *nbd_to_dev(struct nbd_device *nbd) +{ + return disk_to_dev(nbd->disk); +} + +static const char *nbdcmd_to_ascii(int cmd) +{ + switch (cmd) { + case NBD_CMD_READ: return "read"; + case NBD_CMD_WRITE: return "write"; + case NBD_CMD_DISC: return "disconnect"; + case NBD_CMD_FLUSH: return "flush"; + case NBD_CMD_TRIM: return "trim/discard"; + } + return "invalid"; +} + +static void nbd_end_request(struct nbd_device *nbd, struct request *req) +{ + int error = req->errors ? -EIO : 0; + struct request_queue *q = req->q; + unsigned long flags; + + dev_dbg(nbd_to_dev(nbd), "request %p: %s\n", req, + error ? "failed" : "done"); + + spin_lock_irqsave(q->queue_lock, flags); + __blk_end_request_all(req, error); + spin_unlock_irqrestore(q->queue_lock, flags); +} + +/* + * Forcibly shutdown the socket causing all listeners to error + */ +static void sock_shutdown(struct nbd_device *nbd) +{ + if (!nbd->sock) + return; + + dev_warn(disk_to_dev(nbd->disk), "shutting down socket\n"); + kernel_sock_shutdown(nbd->sock, SHUT_RDWR); + nbd->sock = NULL; + del_timer_sync(&nbd->timeout_timer); +} + +static void nbd_xmit_timeout(unsigned long arg) +{ + struct nbd_device *nbd = (struct nbd_device *)arg; + unsigned long flags; + + if (list_empty(&nbd->queue_head)) + return; + + nbd->disconnect = true; + + spin_lock_irqsave(&nbd->tasks_lock, flags); + + if (nbd->task_recv) + force_sig(SIGKILL, nbd->task_recv); + + if (nbd->task_send) + force_sig(SIGKILL, nbd->task_send); + + spin_unlock_irqrestore(&nbd->tasks_lock, flags); + + dev_err(nbd_to_dev(nbd), "Connection timed out, killed receiver and sender, shutting down connection\n"); +} + +/* + * Send or receive packet. + */ +static int sock_xmit(struct nbd_device *nbd, int send, void *buf, int size, + int msg_flags) +{ + struct socket *sock = nbd->sock; + int result; + struct msghdr msg; + struct kvec iov; + sigset_t blocked, oldset; + unsigned long pflags = current->flags; + + if (unlikely(!sock)) { + dev_err(disk_to_dev(nbd->disk), + "Attempted %s on closed socket in sock_xmit\n", + (send ? "send" : "recv")); + return -EINVAL; + } + + /* Allow interception of SIGKILL only + * Don't allow other signals to interrupt the transmission */ + siginitsetinv(&blocked, sigmask(SIGKILL)); + sigprocmask(SIG_SETMASK, &blocked, &oldset); + + current->flags |= PF_MEMALLOC; + do { + sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC; + iov.iov_base = buf; + iov.iov_len = size; + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = msg_flags | MSG_NOSIGNAL; + + if (send) + result = kernel_sendmsg(sock, &msg, &iov, 1, size); + else + result = kernel_recvmsg(sock, &msg, &iov, 1, size, + msg.msg_flags); + + if (result <= 0) { + if (result == 0) + result = -EPIPE; /* short read */ + break; + } + size -= result; + buf += result; + } while (size > 0); + + sigprocmask(SIG_SETMASK, &oldset, NULL); + tsk_restore_flags(current, pflags, PF_MEMALLOC); + + if (!send && nbd->xmit_timeout) + mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout); + + return result; +} + +static inline int sock_send_bvec(struct nbd_device *nbd, struct bio_vec *bvec, + int flags) +{ + int result; + void *kaddr = kmap(bvec->bv_page); + result = sock_xmit(nbd, 1, kaddr + bvec->bv_offset, + bvec->bv_len, flags); + kunmap(bvec->bv_page); + return result; +} + +/* always call with the tx_lock held */ +static int nbd_send_req(struct nbd_device *nbd, struct request *req) +{ + int result, flags; + struct nbd_request request; + unsigned long size = blk_rq_bytes(req); + u32 type; + + if (req->cmd_type == REQ_TYPE_DRV_PRIV) + type = NBD_CMD_DISC; + else if (req->cmd_flags & REQ_DISCARD) + type = NBD_CMD_TRIM; + else if (req->cmd_flags & REQ_FLUSH) + type = NBD_CMD_FLUSH; + else if (rq_data_dir(req) == WRITE) + type = NBD_CMD_WRITE; + else + type = NBD_CMD_READ; + + memset(&request, 0, sizeof(request)); + request.magic = htonl(NBD_REQUEST_MAGIC); + request.type = htonl(type); + if (type != NBD_CMD_FLUSH && type != NBD_CMD_DISC) { + request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9); + request.len = htonl(size); + } + memcpy(request.handle, &req, sizeof(req)); + + dev_dbg(nbd_to_dev(nbd), "request %p: sending control (%s@%llu,%uB)\n", + req, nbdcmd_to_ascii(type), + (unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req)); + result = sock_xmit(nbd, 1, &request, sizeof(request), + (type == NBD_CMD_WRITE) ? MSG_MORE : 0); + if (result <= 0) { + dev_err(disk_to_dev(nbd->disk), + "Send control failed (result %d)\n", result); + return -EIO; + } + + if (type == NBD_CMD_WRITE) { + struct req_iterator iter; + struct bio_vec bvec; + /* + * we are really probing at internals to determine + * whether to set MSG_MORE or not... + */ + rq_for_each_segment(bvec, req, iter) { + flags = 0; + if (!rq_iter_last(bvec, iter)) + flags = MSG_MORE; + dev_dbg(nbd_to_dev(nbd), "request %p: sending %d bytes data\n", + req, bvec.bv_len); + result = sock_send_bvec(nbd, &bvec, flags); + if (result <= 0) { + dev_err(disk_to_dev(nbd->disk), + "Send data failed (result %d)\n", + result); + return -EIO; + } + } + } + return 0; +} + +static struct request *nbd_find_request(struct nbd_device *nbd, + struct request *xreq) +{ + struct request *req, *tmp; + int err; + + err = wait_event_interruptible(nbd->active_wq, nbd->active_req != xreq); + if (unlikely(err)) + return ERR_PTR(err); + + spin_lock(&nbd->queue_lock); + list_for_each_entry_safe(req, tmp, &nbd->queue_head, queuelist) { + if (req != xreq) + continue; + list_del_init(&req->queuelist); + spin_unlock(&nbd->queue_lock); + return req; + } + spin_unlock(&nbd->queue_lock); + + return ERR_PTR(-ENOENT); +} + +static inline int sock_recv_bvec(struct nbd_device *nbd, struct bio_vec *bvec) +{ + int result; + void *kaddr = kmap(bvec->bv_page); + result = sock_xmit(nbd, 0, kaddr + bvec->bv_offset, bvec->bv_len, + MSG_WAITALL); + kunmap(bvec->bv_page); + return result; +} + +/* NULL returned = something went wrong, inform userspace */ +static struct request *nbd_read_stat(struct nbd_device *nbd) +{ + int result; + struct nbd_reply reply; + struct request *req; + + reply.magic = 0; + result = sock_xmit(nbd, 0, &reply, sizeof(reply), MSG_WAITALL); + if (result <= 0) { + dev_err(disk_to_dev(nbd->disk), + "Receive control failed (result %d)\n", result); + return ERR_PTR(result); + } + + if (ntohl(reply.magic) != NBD_REPLY_MAGIC) { + dev_err(disk_to_dev(nbd->disk), "Wrong magic (0x%lx)\n", + (unsigned long)ntohl(reply.magic)); + return ERR_PTR(-EPROTO); + } + + req = nbd_find_request(nbd, *(struct request **)reply.handle); + if (IS_ERR(req)) { + result = PTR_ERR(req); + if (result != -ENOENT) + return ERR_PTR(result); + + dev_err(disk_to_dev(nbd->disk), "Unexpected reply (%p)\n", + reply.handle); + return ERR_PTR(-EBADR); + } + + if (ntohl(reply.error)) { + dev_err(disk_to_dev(nbd->disk), "Other side returned error (%d)\n", + ntohl(reply.error)); + req->errors++; + return req; + } + + dev_dbg(nbd_to_dev(nbd), "request %p: got reply\n", req); + if (rq_data_dir(req) != WRITE) { + struct req_iterator iter; + struct bio_vec bvec; + + rq_for_each_segment(bvec, req, iter) { + result = sock_recv_bvec(nbd, &bvec); + if (result <= 0) { + dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n", + result); + req->errors++; + return req; + } + dev_dbg(nbd_to_dev(nbd), "request %p: got %d bytes data\n", + req, bvec.bv_len); + } + } + return req; +} + +static ssize_t pid_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct gendisk *disk = dev_to_disk(dev); + struct nbd_device *nbd = (struct nbd_device *)disk->private_data; + + return sprintf(buf, "%d\n", task_pid_nr(nbd->task_recv)); +} + +static struct device_attribute pid_attr = { + .attr = { .name = "pid", .mode = S_IRUGO}, + .show = pid_show, +}; + +static int nbd_thread_recv(struct nbd_device *nbd) +{ + struct request *req; + int ret; + unsigned long flags; + + BUG_ON(nbd->magic != NBD_MAGIC); + + sk_set_memalloc(nbd->sock->sk); + + spin_lock_irqsave(&nbd->tasks_lock, flags); + nbd->task_recv = current; + spin_unlock_irqrestore(&nbd->tasks_lock, flags); + + ret = device_create_file(disk_to_dev(nbd->disk), &pid_attr); + if (ret) { + dev_err(disk_to_dev(nbd->disk), "device_create_file failed!\n"); + + spin_lock_irqsave(&nbd->tasks_lock, flags); + nbd->task_recv = NULL; + spin_unlock_irqrestore(&nbd->tasks_lock, flags); + + return ret; + } + + while (1) { + req = nbd_read_stat(nbd); + if (IS_ERR(req)) { + ret = PTR_ERR(req); + break; + } + + nbd_end_request(nbd, req); + } + + device_remove_file(disk_to_dev(nbd->disk), &pid_attr); + + spin_lock_irqsave(&nbd->tasks_lock, flags); + nbd->task_recv = NULL; + spin_unlock_irqrestore(&nbd->tasks_lock, flags); + + if (signal_pending(current)) { + siginfo_t info; + + ret = dequeue_signal_lock(current, ¤t->blocked, &info); + dev_warn(nbd_to_dev(nbd), "pid %d, %s, got signal %d\n", + task_pid_nr(current), current->comm, ret); + mutex_lock(&nbd->tx_lock); + sock_shutdown(nbd); + mutex_unlock(&nbd->tx_lock); + ret = -ETIMEDOUT; + } + + return ret; +} + +static void nbd_clear_que(struct nbd_device *nbd) +{ + struct request *req; + + BUG_ON(nbd->magic != NBD_MAGIC); + + /* + * Because we have set nbd->sock to NULL under the tx_lock, all + * modifications to the list must have completed by now. For + * the same reason, the active_req must be NULL. + * + * As a consequence, we don't need to take the spin lock while + * purging the list here. + */ + BUG_ON(nbd->sock); + BUG_ON(nbd->active_req); + + while (!list_empty(&nbd->queue_head)) { + req = list_entry(nbd->queue_head.next, struct request, + queuelist); + list_del_init(&req->queuelist); + req->errors++; + nbd_end_request(nbd, req); + } + + while (!list_empty(&nbd->waiting_queue)) { + req = list_entry(nbd->waiting_queue.next, struct request, + queuelist); + list_del_init(&req->queuelist); + req->errors++; + nbd_end_request(nbd, req); + } + dev_dbg(disk_to_dev(nbd->disk), "queue cleared\n"); +} + + +static void nbd_handle_req(struct nbd_device *nbd, struct request *req) +{ + if (req->cmd_type != REQ_TYPE_FS) + goto error_out; + + if (rq_data_dir(req) == WRITE && + (nbd->flags & NBD_FLAG_READ_ONLY)) { + dev_err(disk_to_dev(nbd->disk), + "Write on read-only\n"); + goto error_out; + } + + req->errors = 0; + + mutex_lock(&nbd->tx_lock); + if (unlikely(!nbd->sock)) { + mutex_unlock(&nbd->tx_lock); + dev_err(disk_to_dev(nbd->disk), + "Attempted send on closed socket\n"); + goto error_out; + } + + nbd->active_req = req; + + if (nbd->xmit_timeout && list_empty_careful(&nbd->queue_head)) + mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout); + + if (nbd_send_req(nbd, req) != 0) { + dev_err(disk_to_dev(nbd->disk), "Request send failed\n"); + req->errors++; + nbd_end_request(nbd, req); + } else { + spin_lock(&nbd->queue_lock); + list_add_tail(&req->queuelist, &nbd->queue_head); + spin_unlock(&nbd->queue_lock); + } + + nbd->active_req = NULL; + mutex_unlock(&nbd->tx_lock); + wake_up_all(&nbd->active_wq); + + return; + +error_out: + req->errors++; + nbd_end_request(nbd, req); +} + +static int nbd_thread_send(void *data) +{ + struct nbd_device *nbd = data; + struct request *req; + unsigned long flags; + + spin_lock_irqsave(&nbd->tasks_lock, flags); + nbd->task_send = current; + spin_unlock_irqrestore(&nbd->tasks_lock, flags); + + set_user_nice(current, MIN_NICE); + while (!kthread_should_stop() || !list_empty(&nbd->waiting_queue)) { + /* wait for something to do */ + wait_event_interruptible(nbd->waiting_wq, + kthread_should_stop() || + !list_empty(&nbd->waiting_queue)); + + if (signal_pending(current)) { + siginfo_t info; + int ret; + + ret = dequeue_signal_lock(current, ¤t->blocked, + &info); + dev_warn(nbd_to_dev(nbd), "pid %d, %s, got signal %d\n", + task_pid_nr(current), current->comm, ret); + mutex_lock(&nbd->tx_lock); + sock_shutdown(nbd); + mutex_unlock(&nbd->tx_lock); + break; + } + + /* extract request */ + if (list_empty(&nbd->waiting_queue)) + continue; + + spin_lock_irq(&nbd->queue_lock); + req = list_entry(nbd->waiting_queue.next, struct request, + queuelist); + list_del_init(&req->queuelist); + spin_unlock_irq(&nbd->queue_lock); + + /* handle request */ + nbd_handle_req(nbd, req); + } + + spin_lock_irqsave(&nbd->tasks_lock, flags); + nbd->task_send = NULL; + spin_unlock_irqrestore(&nbd->tasks_lock, flags); + + /* Clear maybe pending signals */ + if (signal_pending(current)) { + siginfo_t info; + dequeue_signal_lock(current, ¤t->blocked, &info); + } + + return 0; +} + +/* + * We always wait for result of write, for now. It would be nice to make it optional + * in future + * if ((rq_data_dir(req) == WRITE) && (nbd->flags & NBD_WRITE_NOCHK)) + * { printk( "Warning: Ignoring result!\n"); nbd_end_request( req ); } + */ + +static void nbd_request_handler(struct request_queue *q) + __releases(q->queue_lock) __acquires(q->queue_lock) +{ + struct request *req; + + while ((req = blk_fetch_request(q)) != NULL) { + struct nbd_device *nbd; + + spin_unlock_irq(q->queue_lock); + + nbd = req->rq_disk->private_data; + + BUG_ON(nbd->magic != NBD_MAGIC); + + dev_dbg(nbd_to_dev(nbd), "request %p: dequeued (flags=%x)\n", + req, req->cmd_type); + + if (unlikely(!nbd->sock)) { + dev_err(disk_to_dev(nbd->disk), + "Attempted send on closed socket\n"); + req->errors++; + nbd_end_request(nbd, req); + spin_lock_irq(q->queue_lock); + continue; + } + + spin_lock_irq(&nbd->queue_lock); + list_add_tail(&req->queuelist, &nbd->waiting_queue); + spin_unlock_irq(&nbd->queue_lock); + + wake_up(&nbd->waiting_wq); + + spin_lock_irq(q->queue_lock); + } +} + +static int nbd_dev_dbg_init(struct nbd_device *nbd); +static void nbd_dev_dbg_close(struct nbd_device *nbd); + +/* Must be called with tx_lock held */ + +static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, + unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case NBD_DISCONNECT: { + struct request sreq; + + dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n"); + if (!nbd->sock) + return -EINVAL; + + mutex_unlock(&nbd->tx_lock); + fsync_bdev(bdev); + mutex_lock(&nbd->tx_lock); + blk_rq_init(NULL, &sreq); + sreq.cmd_type = REQ_TYPE_DRV_PRIV; + + /* Check again after getting mutex back. */ + if (!nbd->sock) + return -EINVAL; + + nbd->disconnect = true; + + nbd_send_req(nbd, &sreq); + return 0; + } + + case NBD_CLEAR_SOCK: { + struct socket *sock = nbd->sock; + nbd->sock = NULL; + nbd_clear_que(nbd); + BUG_ON(!list_empty(&nbd->queue_head)); + BUG_ON(!list_empty(&nbd->waiting_queue)); + kill_bdev(bdev); + if (sock) + sockfd_put(sock); + return 0; + } + + case NBD_SET_SOCK: { + struct socket *sock; + int err; + if (nbd->sock) + return -EBUSY; + sock = sockfd_lookup(arg, &err); + if (sock) { + nbd->sock = sock; + if (max_part > 0) + bdev->bd_invalidated = 1; + nbd->disconnect = false; /* we're connected now */ + return 0; + } + return -EINVAL; + } + + case NBD_SET_BLKSIZE: + nbd->blksize = arg; + nbd->bytesize &= ~(nbd->blksize-1); + bdev->bd_inode->i_size = nbd->bytesize; + set_blocksize(bdev, nbd->blksize); + set_capacity(nbd->disk, nbd->bytesize >> 9); + return 0; + + case NBD_SET_SIZE: + nbd->bytesize = arg & ~(nbd->blksize-1); + bdev->bd_inode->i_size = nbd->bytesize; + set_blocksize(bdev, nbd->blksize); + set_capacity(nbd->disk, nbd->bytesize >> 9); + return 0; + + case NBD_SET_TIMEOUT: + nbd->xmit_timeout = arg * HZ; + if (arg) + mod_timer(&nbd->timeout_timer, + jiffies + nbd->xmit_timeout); + else + del_timer_sync(&nbd->timeout_timer); + + return 0; + + case NBD_SET_FLAGS: + nbd->flags = arg; + return 0; + + case NBD_SET_SIZE_BLOCKS: + nbd->bytesize = ((u64) arg) * nbd->blksize; + bdev->bd_inode->i_size = nbd->bytesize; + set_blocksize(bdev, nbd->blksize); + set_capacity(nbd->disk, nbd->bytesize >> 9); + return 0; + + case NBD_DO_IT: { + struct task_struct *thread; + struct socket *sock; + int error; + + if (nbd->task_recv) + return -EBUSY; + if (!nbd->sock) + return -EINVAL; + + mutex_unlock(&nbd->tx_lock); + + if (nbd->flags & NBD_FLAG_READ_ONLY) + set_device_ro(bdev, true); + if (nbd->flags & NBD_FLAG_SEND_TRIM) + queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, + nbd->disk->queue); + if (nbd->flags & NBD_FLAG_SEND_FLUSH) + blk_queue_flush(nbd->disk->queue, REQ_FLUSH); + else + blk_queue_flush(nbd->disk->queue, 0); + + thread = kthread_run(nbd_thread_send, nbd, "%s", + nbd_name(nbd)); + if (IS_ERR(thread)) { + mutex_lock(&nbd->tx_lock); + return PTR_ERR(thread); + } + + nbd_dev_dbg_init(nbd); + error = nbd_thread_recv(nbd); + nbd_dev_dbg_close(nbd); + kthread_stop(thread); + + mutex_lock(&nbd->tx_lock); + + sock_shutdown(nbd); + sock = nbd->sock; + nbd->sock = NULL; + nbd_clear_que(nbd); + kill_bdev(bdev); + queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue); + set_device_ro(bdev, false); + if (sock) + sockfd_put(sock); + nbd->flags = 0; + nbd->bytesize = 0; + bdev->bd_inode->i_size = 0; + set_capacity(nbd->disk, 0); + if (max_part > 0) + blkdev_reread_part(bdev); + if (nbd->disconnect) /* user requested, ignore socket errors */ + return 0; + return error; + } + + case NBD_CLEAR_QUE: + /* + * This is for compatibility only. The queue is always cleared + * by NBD_DO_IT or NBD_CLEAR_SOCK. + */ + return 0; + + case NBD_PRINT_DEBUG: + dev_info(disk_to_dev(nbd->disk), + "next = %p, prev = %p, head = %p\n", + nbd->queue_head.next, nbd->queue_head.prev, + &nbd->queue_head); + return 0; + } + return -ENOTTY; +} + +static int nbd_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + struct nbd_device *nbd = bdev->bd_disk->private_data; + int error; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + BUG_ON(nbd->magic != NBD_MAGIC); + + mutex_lock(&nbd->tx_lock); + error = __nbd_ioctl(bdev, nbd, cmd, arg); + mutex_unlock(&nbd->tx_lock); + + return error; +} + +static const struct block_device_operations nbd_fops = +{ + .owner = THIS_MODULE, + .ioctl = nbd_ioctl, +}; + +#if IS_ENABLED(CONFIG_DEBUG_FS) + +static int nbd_dbg_tasks_show(struct seq_file *s, void *unused) +{ + struct nbd_device *nbd = s->private; + + if (nbd->task_recv) + seq_printf(s, "recv: %d\n", task_pid_nr(nbd->task_recv)); + if (nbd->task_send) + seq_printf(s, "send: %d\n", task_pid_nr(nbd->task_send)); + + return 0; +} + +static int nbd_dbg_tasks_open(struct inode *inode, struct file *file) +{ + return single_open(file, nbd_dbg_tasks_show, inode->i_private); +} + +static const struct file_operations nbd_dbg_tasks_ops = { + .open = nbd_dbg_tasks_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int nbd_dbg_flags_show(struct seq_file *s, void *unused) +{ + struct nbd_device *nbd = s->private; + u32 flags = nbd->flags; + + seq_printf(s, "Hex: 0x%08x\n\n", flags); + + seq_puts(s, "Known flags:\n"); + + if (flags & NBD_FLAG_HAS_FLAGS) + seq_puts(s, "NBD_FLAG_HAS_FLAGS\n"); + if (flags & NBD_FLAG_READ_ONLY) + seq_puts(s, "NBD_FLAG_READ_ONLY\n"); + if (flags & NBD_FLAG_SEND_FLUSH) + seq_puts(s, "NBD_FLAG_SEND_FLUSH\n"); + if (flags & NBD_FLAG_SEND_TRIM) + seq_puts(s, "NBD_FLAG_SEND_TRIM\n"); + + return 0; +} + +static int nbd_dbg_flags_open(struct inode *inode, struct file *file) +{ + return single_open(file, nbd_dbg_flags_show, inode->i_private); +} + +static const struct file_operations nbd_dbg_flags_ops = { + .open = nbd_dbg_flags_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int nbd_dev_dbg_init(struct nbd_device *nbd) +{ + struct dentry *dir; + struct dentry *f; + + dir = debugfs_create_dir(nbd_name(nbd), nbd_dbg_dir); + if (IS_ERR_OR_NULL(dir)) { + dev_err(nbd_to_dev(nbd), "Failed to create debugfs dir for '%s' (%ld)\n", + nbd_name(nbd), PTR_ERR(dir)); + return PTR_ERR(dir); + } + nbd->dbg_dir = dir; + + f = debugfs_create_file("tasks", 0444, dir, nbd, &nbd_dbg_tasks_ops); + if (IS_ERR_OR_NULL(f)) { + dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'tasks', %ld\n", + PTR_ERR(f)); + return PTR_ERR(f); + } + + f = debugfs_create_u64("size_bytes", 0444, dir, &nbd->bytesize); + if (IS_ERR_OR_NULL(f)) { + dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'size_bytes', %ld\n", + PTR_ERR(f)); + return PTR_ERR(f); + } + + f = debugfs_create_u32("timeout", 0444, dir, &nbd->xmit_timeout); + if (IS_ERR_OR_NULL(f)) { + dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'timeout', %ld\n", + PTR_ERR(f)); + return PTR_ERR(f); + } + + f = debugfs_create_u32("blocksize", 0444, dir, &nbd->blksize); + if (IS_ERR_OR_NULL(f)) { + dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'blocksize', %ld\n", + PTR_ERR(f)); + return PTR_ERR(f); + } + + f = debugfs_create_file("flags", 0444, dir, &nbd, &nbd_dbg_flags_ops); + if (IS_ERR_OR_NULL(f)) { + dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'flags', %ld\n", + PTR_ERR(f)); + return PTR_ERR(f); + } + + return 0; +} + +static void nbd_dev_dbg_close(struct nbd_device *nbd) +{ + debugfs_remove_recursive(nbd->dbg_dir); +} + +static int nbd_dbg_init(void) +{ + struct dentry *dbg_dir; + + dbg_dir = debugfs_create_dir("nbd", NULL); + if (IS_ERR(dbg_dir)) + return PTR_ERR(dbg_dir); + + nbd_dbg_dir = dbg_dir; + + return 0; +} + +static void nbd_dbg_close(void) +{ + debugfs_remove_recursive(nbd_dbg_dir); +} + +#else /* IS_ENABLED(CONFIG_DEBUG_FS) */ + +static int nbd_dev_dbg_init(struct nbd_device *nbd) +{ + return 0; +} + +static void nbd_dev_dbg_close(struct nbd_device *nbd) +{ +} + +static int nbd_dbg_init(void) +{ + return 0; +} + +static void nbd_dbg_close(void) +{ +} + +#endif + +/* + * And here should be modules and kernel interface + * (Just smiley confuses emacs :-) + */ + +static int __init nbd_init(void) +{ + int err = -ENOMEM; + int i; + int part_shift; + + BUILD_BUG_ON(sizeof(struct nbd_request) != 28); + + if (max_part < 0) { + printk(KERN_ERR "nbd: max_part must be >= 0\n"); + return -EINVAL; + } + + part_shift = 0; + if (max_part > 0) { + part_shift = fls(max_part); + + /* + * Adjust max_part according to part_shift as it is exported + * to user space so that user can know the max number of + * partition kernel should be able to manage. + * + * Note that -1 is required because partition 0 is reserved + * for the whole disk. + */ + max_part = (1UL << part_shift) - 1; + } + + if ((1UL << part_shift) > DISK_MAX_PARTS) + return -EINVAL; + + if (nbds_max > 1UL << (MINORBITS - part_shift)) + return -EINVAL; + + nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL); + if (!nbd_dev) + return -ENOMEM; + + for (i = 0; i < nbds_max; i++) { + struct gendisk *disk = alloc_disk(1 << part_shift); + if (!disk) + goto out; + nbd_dev[i].disk = disk; + /* + * The new linux 2.5 block layer implementation requires + * every gendisk to have its very own request_queue struct. + * These structs are big so we dynamically allocate them. + */ + disk->queue = blk_init_queue(nbd_request_handler, &nbd_lock); + if (!disk->queue) { + put_disk(disk); + goto out; + } + /* + * Tell the block layer that we are not a rotational device + */ + queue_flag_set_unlocked(QUEUE_FLAG_NONROT, disk->queue); + queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, disk->queue); + disk->queue->limits.discard_granularity = 512; + blk_queue_max_discard_sectors(disk->queue, UINT_MAX); + disk->queue->limits.discard_zeroes_data = 0; + blk_queue_max_hw_sectors(disk->queue, 65536); + disk->queue->limits.max_sectors = 256; + } + + if (register_blkdev(NBD_MAJOR, "nbd")) { + err = -EIO; + goto out; + } + + printk(KERN_INFO "nbd: registered device at major %d\n", NBD_MAJOR); + + nbd_dbg_init(); + + for (i = 0; i < nbds_max; i++) { + struct gendisk *disk = nbd_dev[i].disk; + nbd_dev[i].magic = NBD_MAGIC; + INIT_LIST_HEAD(&nbd_dev[i].waiting_queue); + spin_lock_init(&nbd_dev[i].queue_lock); + spin_lock_init(&nbd_dev[i].tasks_lock); + INIT_LIST_HEAD(&nbd_dev[i].queue_head); + mutex_init(&nbd_dev[i].tx_lock); + init_timer(&nbd_dev[i].timeout_timer); + nbd_dev[i].timeout_timer.function = nbd_xmit_timeout; + nbd_dev[i].timeout_timer.data = (unsigned long)&nbd_dev[i]; + init_waitqueue_head(&nbd_dev[i].active_wq); + init_waitqueue_head(&nbd_dev[i].waiting_wq); + nbd_dev[i].blksize = 1024; + nbd_dev[i].bytesize = 0; + disk->major = NBD_MAJOR; + disk->first_minor = i << part_shift; + disk->fops = &nbd_fops; + disk->private_data = &nbd_dev[i]; + sprintf(disk->disk_name, "nbd%d", i); + set_capacity(disk, 0); + add_disk(disk); + } + + return 0; +out: + while (i--) { + blk_cleanup_queue(nbd_dev[i].disk->queue); + put_disk(nbd_dev[i].disk); + } + kfree(nbd_dev); + return err; +} + +static void __exit nbd_cleanup(void) +{ + int i; + + nbd_dbg_close(); + + for (i = 0; i < nbds_max; i++) { + struct gendisk *disk = nbd_dev[i].disk; + nbd_dev[i].magic = 0; + if (disk) { + del_gendisk(disk); + blk_cleanup_queue(disk->queue); + put_disk(disk); + } + } + unregister_blkdev(NBD_MAJOR, "nbd"); + kfree(nbd_dev); + printk(KERN_INFO "nbd: unregistered device at major %d\n", NBD_MAJOR); +} + +module_init(nbd_init); +module_exit(nbd_cleanup); + +MODULE_DESCRIPTION("Network Block Device"); +MODULE_LICENSE("GPL"); + +module_param(nbds_max, int, 0444); +MODULE_PARM_DESC(nbds_max, "number of network block devices to initialize (default: 16)"); +module_param(max_part, int, 0444); +MODULE_PARM_DESC(max_part, "number of partitions per device (default: 0)"); diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.ko b/builder/dnbd3-rootfs/binaries/nbd/nbd.ko new file mode 100644 index 00000000..4829b5b6 Binary files /dev/null and b/builder/dnbd3-rootfs/binaries/nbd/nbd.ko differ diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c new file mode 100644 index 00000000..8e9bffe6 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c @@ -0,0 +1,105 @@ +#include +#include +#include + +MODULE_INFO(vermagic, VERMAGIC_STRING); + +__visible struct module __this_module +__attribute__((section(".gnu.linkonce.this_module"))) = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +static const struct modversion_info ____versions[] +__used +__attribute__((section("__versions"))) = { + { 0x6455f54, __VMLINUX_SYMBOL_STR(module_layout) }, + { 0x50c7d0f8, __VMLINUX_SYMBOL_STR(single_release) }, + { 0x950ca83f, __VMLINUX_SYMBOL_STR(seq_read) }, + { 0xef9b791f, __VMLINUX_SYMBOL_STR(seq_lseek) }, + { 0x5538af9, __VMLINUX_SYMBOL_STR(param_ops_int) }, + { 0xb5a459dc, __VMLINUX_SYMBOL_STR(unregister_blkdev) }, + { 0x1b9e8318, __VMLINUX_SYMBOL_STR(del_gendisk) }, + { 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) }, + { 0x981936b7, __VMLINUX_SYMBOL_STR(blk_cleanup_queue) }, + { 0x73107d7d, __VMLINUX_SYMBOL_STR(add_disk) }, + { 0x9e88526, __VMLINUX_SYMBOL_STR(__init_waitqueue_head) }, + { 0x9580deb, __VMLINUX_SYMBOL_STR(init_timer_key) }, + { 0x69436492, __VMLINUX_SYMBOL_STR(__mutex_init) }, + { 0x71a50dbc, __VMLINUX_SYMBOL_STR(register_blkdev) }, + { 0x1ecdaab, __VMLINUX_SYMBOL_STR(blk_queue_max_hw_sectors) }, + { 0x1a67801d, __VMLINUX_SYMBOL_STR(blk_queue_max_discard_sectors) }, + { 0x86a65424, __VMLINUX_SYMBOL_STR(put_disk) }, + { 0x89897b2, __VMLINUX_SYMBOL_STR(blk_init_queue) }, + { 0xb1f77288, __VMLINUX_SYMBOL_STR(alloc_disk) }, + { 0xd2b09ce5, __VMLINUX_SYMBOL_STR(__kmalloc) }, + { 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) }, + { 0xc6cbbc89, __VMLINUX_SYMBOL_STR(capable) }, + { 0x98402f5a, __VMLINUX_SYMBOL_STR(blkdev_reread_part) }, + { 0xee59790e, __VMLINUX_SYMBOL_STR(set_device_ro) }, + { 0xae71b343, __VMLINUX_SYMBOL_STR(kthread_stop) }, + { 0xfd67e92, __VMLINUX_SYMBOL_STR(debugfs_remove_recursive) }, + { 0xae5350d, __VMLINUX_SYMBOL_STR(device_remove_file) }, + { 0xb43b11d2, __VMLINUX_SYMBOL_STR(device_create_file) }, + { 0xbe49dab0, __VMLINUX_SYMBOL_STR(sk_set_memalloc) }, + { 0x88c48e5a, __VMLINUX_SYMBOL_STR(debugfs_create_u32) }, + { 0xab6db40b, __VMLINUX_SYMBOL_STR(debugfs_create_u64) }, + { 0x2fff7016, __VMLINUX_SYMBOL_STR(debugfs_create_file) }, + { 0xe09664fa, __VMLINUX_SYMBOL_STR(debugfs_create_dir) }, + { 0x6c4cedbe, __VMLINUX_SYMBOL_STR(wake_up_process) }, + { 0x98f4d672, __VMLINUX_SYMBOL_STR(kthread_create_on_node) }, + { 0x2141fd89, __VMLINUX_SYMBOL_STR(blk_queue_flush) }, + { 0x2f43d7d4, __VMLINUX_SYMBOL_STR(blk_rq_init) }, + { 0xdcd71098, __VMLINUX_SYMBOL_STR(fsync_bdev) }, + { 0x3ab93be1, __VMLINUX_SYMBOL_STR(set_blocksize) }, + { 0xd52ba2c0, __VMLINUX_SYMBOL_STR(_dev_info) }, + { 0x58744728, __VMLINUX_SYMBOL_STR(fput) }, + { 0x94cc0370, __VMLINUX_SYMBOL_STR(kill_bdev) }, + { 0x4ee1e3f, __VMLINUX_SYMBOL_STR(sockfd_lookup) }, + { 0xc6a83d75, __VMLINUX_SYMBOL_STR(blk_fetch_request) }, + { 0xc58a93cf, __VMLINUX_SYMBOL_STR(dequeue_signal) }, + { 0xa6bbd805, __VMLINUX_SYMBOL_STR(__wake_up) }, + { 0xb4f0243e, __VMLINUX_SYMBOL_STR(mutex_unlock) }, + { 0xc23bebb2, __VMLINUX_SYMBOL_STR(mutex_lock) }, + { 0xbfe6f427, __VMLINUX_SYMBOL_STR(_raw_spin_unlock_irq) }, + { 0xe5815f8a, __VMLINUX_SYMBOL_STR(_raw_spin_lock_irq) }, + { 0xb3f7646e, __VMLINUX_SYMBOL_STR(kthread_should_stop) }, + { 0xb2fd3ea5, __VMLINUX_SYMBOL_STR(set_user_nice) }, + { 0xef370d73, __VMLINUX_SYMBOL_STR(__blk_end_request_all) }, + { 0x1916e38c, __VMLINUX_SYMBOL_STR(_raw_spin_unlock_irqrestore) }, + { 0x4aafc56b, __VMLINUX_SYMBOL_STR(force_sig) }, + { 0x680ec266, __VMLINUX_SYMBOL_STR(_raw_spin_lock_irqsave) }, + { 0x706d051c, __VMLINUX_SYMBOL_STR(del_timer_sync) }, + { 0xa9064ecb, __VMLINUX_SYMBOL_STR(kernel_sock_shutdown) }, + { 0xe3fbaa2e, __VMLINUX_SYMBOL_STR(dev_warn) }, + { 0x2f7f274e, __VMLINUX_SYMBOL_STR(seq_puts) }, + { 0xd1f58462, __VMLINUX_SYMBOL_STR(seq_printf) }, + { 0xe1e12065, __VMLINUX_SYMBOL_STR(single_open) }, + { 0x1e047854, __VMLINUX_SYMBOL_STR(warn_slowpath_fmt) }, + { 0x2ea92197, __VMLINUX_SYMBOL_STR(__dynamic_dev_dbg) }, + { 0x30ff9767, __VMLINUX_SYMBOL_STR(dev_err) }, + { 0x16e5c2a, __VMLINUX_SYMBOL_STR(mod_timer) }, + { 0x7d11c268, __VMLINUX_SYMBOL_STR(jiffies) }, + { 0x722e2a29, __VMLINUX_SYMBOL_STR(kernel_recvmsg) }, + { 0x551b9a0e, __VMLINUX_SYMBOL_STR(kernel_sendmsg) }, + { 0x6a5fa363, __VMLINUX_SYMBOL_STR(sigprocmask) }, + { 0x97bb6e16, __VMLINUX_SYMBOL_STR(current_task) }, + { 0xdb7305a1, __VMLINUX_SYMBOL_STR(__stack_chk_fail) }, + { 0xf08242c2, __VMLINUX_SYMBOL_STR(finish_wait) }, + { 0x2207a57f, __VMLINUX_SYMBOL_STR(prepare_to_wait_event) }, + { 0x1000e51, __VMLINUX_SYMBOL_STR(schedule) }, + { 0xdae80100, __VMLINUX_SYMBOL_STR(_raw_spin_unlock) }, + { 0xe259ae9e, __VMLINUX_SYMBOL_STR(_raw_spin_lock) }, + { 0x91715312, __VMLINUX_SYMBOL_STR(sprintf) }, + { 0xbdfb6dbb, __VMLINUX_SYMBOL_STR(__fentry__) }, +}; + +static const char __module_depends[] +__used +__attribute__((section(".modinfo"))) = +"depends="; + diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o new file mode 100644 index 00000000..988957a2 Binary files /dev/null and b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o differ diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.o b/builder/dnbd3-rootfs/binaries/nbd/nbd.o new file mode 100644 index 00000000..9da8e4d6 Binary files /dev/null and b/builder/dnbd3-rootfs/binaries/nbd/nbd.o differ diff --git a/builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c b/builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c new file mode 100644 index 00000000..8f0fc108 --- /dev/null +++ b/builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c @@ -0,0 +1,33 @@ +#include +#include +#include +#include + +void print_array(int argc, char *argv[]) { + // Helper function to print given array with given length. + int i = 0; + int j = 0; + for (i = 0; i < argc; i ++) { + j = 0; + while(argv[i][j] != '\0') + printf("%c", argv[i][j++]); + printf(" "); + } + printf("\n"); +} +int main(int argc, char *argv[]) { + int count; + // Last item acts as null pointer. + char **copy = calloc(sizeof(char *), argc); + // Slice first given command line argument. + for (count = 0; count < argc - 1; count++) + copy[count] = strdup(argv[count + 1]); + // Adding systemd indicator to preserve wrapped process during changing + // root filesystem. We mark wrapper and child process. + argv[0][0] = '@'; + copy[0][0] = '@'; + if (-1 == execvp(argv[1], copy)) { + perror("Executing child process failed."); + return -1; + } +} diff --git a/builder/dnbd3-rootfs/debugging-tools/endless b/builder/dnbd3-rootfs/debugging-tools/endless new file mode 100755 index 00000000..de7a8c0a Binary files /dev/null and b/builder/dnbd3-rootfs/debugging-tools/endless differ diff --git a/builder/dnbd3-rootfs/debugging-tools/endless.c b/builder/dnbd3-rootfs/debugging-tools/endless.c new file mode 100644 index 00000000..22c9bc50 --- /dev/null +++ b/builder/dnbd3-rootfs/debugging-tools/endless.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + // Provides a dummy worker. + while (1) + sleep(999999999); +} diff --git a/builder/dnbd3-rootfs/debugging-tools/network.functions b/builder/dnbd3-rootfs/debugging-tools/network.functions new file mode 100644 index 00000000..89ca5a20 --- /dev/null +++ b/builder/dnbd3-rootfs/debugging-tools/network.functions @@ -0,0 +1,23 @@ +wait_for_iface() { + local DEVICE=$1 + local TIMEOUT=10 + echo -n "Waiting for interface $DEVICE: " + # Some systems don't have operstate. Seems to be hardware dependent + [ ! -e "/sys/class/net/${DEVICE}/operstate" ] && usleep 10000 + if [ -e "/sys/class/net/${DEVICE}/operstate" ]; then + while true; do + # check linkstate + [ "x$(cat "/sys/class/net/${DEVICE}/operstate")" == "xup" ] && break + TIMEOUT=$(( $TIMEOUT - 1 )) # don't wait forever, the pcnet iface of vmware will never be "up" although it's working + [ "$TIMEOUT" -le 0 ] && break + # else + echo -n "." + usleep 500000 + done + else + # we really don't have a operstate .. then just wait a sec and hope for the best. + sleep 1 + fi + echo ".$(cat "/sys/class/net/${DEVICE}/operstate" 2>/dev/null)" +} +true diff --git a/builder/dnbd3-rootfs/debugging-tools/setup-network.sh b/builder/dnbd3-rootfs/debugging-tools/setup-network.sh new file mode 100644 index 00000000..3b32a68c --- /dev/null +++ b/builder/dnbd3-rootfs/debugging-tools/setup-network.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +echo "Setting up network..." + +echo "Main MAC address is '$MAC'" + +# setup network +source /inc/network.functions + +# set up loopback networking +echo "Setting up loopback" +ip link set dev lo up 2>/dev/null +ip addr add 127.0.0.1/8 dev lo 2>/dev/null + +echo "Setting up bridge" +BRIDGE="br0" + +# Following was supposed to prevent scripts from getting confused by multiple interfaces with same MAC - does not work though +## Flip mac address of original interface - this var is not local so init sees the changes too +#MAC="$(echo "$MAC" | awk -F ':' '{printf $1 ":" $2 ":" $5 ":" $3 ":" $6 ":" $4}')" +#ip link set addr "$MAC" "$SLAVE" + +mkdir -p "${FUTURE_ROOT}/etc/udev/rules.d" + +#IP_OUT=$(ip a | sed -r ':a;N;$!ba;s/: ([a-z0-9]+): /####\1####/g;s/ether ([a-f0-9:]+) /####\1####/g'| grep -E -o '####[^ ]+####' | sed 's/#//g' | grep -B 1 ':') +IP_OUT=$(ip a | grep -B 1 "/ether" | sed -r '/^--$/d;$!N;s#^[0-9]+: ([a-z0-9\.:]+): .*?/ether ([0-9a-fA-Z:]+) .*$#\1==\2#') + +if ! echo "$IP_OUT" | grep -q -- "$MAC"; then + drop_shell "Boot interface not found in interface list. NIC driver missing?" +fi + +for LINE in $IP_OUT; do + IFACE=$(echo "$LINE" | awk -F '==' '{printf $1}') + IFMAC=$(echo "$LINE" | awk -F '==' '{printf $2}' | tr '[A-Z]' '[a-z]') # udev requires mac addesses to be lowercase (a-f), see http://www.debianhelp.co.uk/udev.htm + echo "${IFACE} = ${IFMAC}" + + if [ "x$IFMAC" == "x$MAC" ]; then + brctl addbr "$BRIDGE" || drop_shell "Could not create bridge $BRIDGE" + brctl stp "$BRIDGE" 0 + brctl setfd "$BRIDGE" 0.000000000001 + ip link set addr "$IFMAC" "$BRIDGE" || drop_shell "Could not set mac of $BRIDGE" + ip link set dev "$IFACE" up + wait_for_iface "$IFACE" + brctl addif "$BRIDGE" "$IFACE" || drop_shell "Could not add $IFACE to $BRIDGE" + + # save our variables for retry on fail + echo "IFACE=$IFACE" > /run/network.conf + + # analyze ip information from the kernel command line and put parts + # of it into several variables + if [ -n "$CLIENTIP" ] ; then + # set static ip address + ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE" + ip link set dev "$BRIDGE" up + [ -n "$GATEWAY" ] && ip route add default via "$GATEWAY" dev "$BRIDGE" + else + NOIPYET="yes" + fi + # Ignore this device later on when systemd handles network interfaces (see hacked 99-systemd.rules in systemd data dir) + echo "SUBSYSTEM==\"net\", ACTION==\"add\", KERNEL==\"eth*\", ATTR{address}==\"$IFMAC\", TAG+=\"openslxignore\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/01-ignore-boot-interface.rules" + fi + # youdev + echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$IFMAC\", ATTR{dev_id}==\"0x0\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"$IFACE\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/70-net-boot-nic-name.rules" + # continue... + IFACE="" +done + +wait_for_iface "$BRIDGE" + +# udhcpc +PARAM= +if [ -n "$CLIENTIP" ]; then + PARAM="-r $CLIENTIP" +fi +echo -n "$CLIENTIP" > "/run/firstip" +echo -n "$GATEWAY" > "/run/firstgw" + +# save our variables for retry on fail ff. +echo "CLIENTIP=$CLIENTIP" >> /run/network.conf +echo "GATEWAY=$GATEWAY" >> /run/network.conf +echo "BRIDGE=$BRIDGE" >> /run/network.conf + +udhcpc $PARAM -O domain -O nissrv -O nisdomain -O wpad -O search -t 5 -T 2 -s "/inc/udhcpc-trigger" -f -n -q -i "$BRIDGE" +# udhcpc return value will be return value of this script diff --git a/builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh b/builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh new file mode 100755 index 00000000..f779aa7a --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh @@ -0,0 +1,2 @@ +# enables magic sysrq keys +echo 1 > /proc/sys/kernel/sysrq diff --git a/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh b/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh new file mode 100755 index 00000000..9f617b09 --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh @@ -0,0 +1,36 @@ +command -v warn >/dev/null || . /lib/dracut-lib.sh + +# fakes the cmdline to fix the ip parsing in darcut's net-lib.sh +[ -d /fake ] || mkdir /fake + +# need to be a tmpfs for the hack to work +mount -t tmpfs tmpfs /fake + +for parameter in $(getargs ip=); do + local temp="$parameter:" + set -- + while [ -n "$temp" ]; do + set -- "$@" "${temp%%:*}" + temp=${temp#*:} + done + + [ -n "$1" ] && ip=$1 + [ -n "$2" ] && server_ip=$2 + [ -n "$3" ] && gateway_ip=$3 + [ -n "$4" ] && net_mask=$4 + + warn "PXE given net configuration: ip: $ip server_ip: $server_ip gateway_ip: $gateway_ip net_mask: $net_mask" + local final_dracut_ip_config="$ip::$gateway_ip:$net_mask:hiwi-test-28:eno1:none" + warn "Final dracut ip config: $final_dracut_ip_config" + sed --regexp-extended "s/ip=[^ ]*/ip=$final_dracut_ip_config/g" /proc/cmdline > /fake/cmdline +done + + +# bind mount it. Can we trust mount return codes here? +# # if so, we should check what we get in $? +mount -o bind /fake/cmdline /proc/cmdline + +# check if it worked +if ! grep 'hiwi-test-28:eno1:none' /proc/cmdline; then + warn 'Haxing cmdline did not work :( sad pandaz...' +fi diff --git a/builder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh b/builder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh new file mode 100755 index 00000000..6deeb78f --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh @@ -0,0 +1,5 @@ +# set rootok and root as dracut expects them to be set by +# the module preparing the root filesystem. + +rootok=1 +root=block:/dev/devicemapper/root diff --git a/builder/dnbd3-rootfs/hooks/mount/mount-root-device.sh b/builder/dnbd3-rootfs/hooks/mount/mount-root-device.sh new file mode 100755 index 00000000..f0d48174 --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/mount/mount-root-device.sh @@ -0,0 +1 @@ +mount /dev/mapper/root "$NEWROOT" diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh b/builder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh new file mode 100755 index 00000000..a90481c8 --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh @@ -0,0 +1,39 @@ +# load dracut functions +command -v getarg >/dev/null || . /lib/dracut-lib.sh + +# read SLX_SERVER and SLX_BASE from the kernel command line +SLX_SERVER=$(getarg slxsrv) +SLX_BASE=$(getarg slxbase) +SLX_CONFIG_DIR="/opt/openslx" +SLX_CONFIG_FILE="/opt/openslx/config" + +if [ -z "$SLX_SERVER" ]; then + warn "No 'slxsrv' parameter found in the kernel command line!" + warn "Skipping OpenSLX configuration..." + return 1 +fi +if [ -z "$SLX_BASE" ]; then + warn "No 'slxbase' parameter found in the kernel command line!" + warn "Skipping OpenSLX configuration..." + return 1 +fi + +info "Getting configuration from OPENSLX-Server..." +WGET="$(busybox which wget)" +if [ -z $WGET ]; then + # do nothing + warn "'wget' not found. Skipping openslx configuration..." + return 1 +fi + +# ok then we are ready to download the config +mkdir -p "${SLX_CONFIG_DIR}" +$WGET -T 5 -q "http://${SLX_SERVER}/${SLX_BASE}/config" -O "${SLX_CONFIG_FILE}" +RET="$?" +if [ $RET -ne 0 ]; then + warn "Downloading OpenSLX configuration from ${SLX_SERVER}/${SLX_BASE} failed: $RET" + emergency_shell -n "$0" + return 1 +else + return 0 +fi diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh b/builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh new file mode 100755 index 00000000..d70492bf --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh @@ -0,0 +1,49 @@ +############################################################################### +# CHECKS +# + +SETUP_ROOTFS_SCRIPT="/sbin/setup-qcow2" + +if [ ! -e "${SETUP_ROOTFS_SCRIPT}" ]; then + warn "No such file of directory: ${SETUP_ROOTFS_SCRIPT}" + emergency_shell -n "Error in $0" + return 1 +fi + +if [ ! -x "${SETUP_ROOTFS_SCRIPT}" ]; then + warn "Cannot execute: ${SETUP_ROOTFS_SCRIPT}" + emergency_shell -n "Error in $0" + return 1 +fi + +# +# END CHECKS +############################################################################### + +############################################################################### +# MAIN CODE +# + +# ok, let's source the setup script +if ! . ${SETUP_ROOTFS_SCRIPT} ; then + warn "Could not source: ${SETUP_ROOTFS_SCRIPT}" + emergency_shell -n "Error in $0" + return 1 +fi + +# just go over the functions in the right order ;-) +for fun in connect_dnbd3 create_qcow export_qcow connect_qcow; do + if ! $fun; then + # something failed, drop a shell for debugging + warn "'$fun' failed with: $?" + emergency_shell -n "Error in $fun" + return 1 + fi +done + +# all good, we are done +return 0 + +# +# END MAIN CODE +############################################################################### diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh new file mode 100755 index 00000000..8b5ea48e --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh @@ -0,0 +1,42 @@ +function create_partition_via_offset() { + local device="$1" + local nameOrUUID="$2" + local loopDevice=$(losetup -f) + + local sectorSize=$(blockdev --getbsz $device) + local partitionInfo=$(partx --raw --noheadings --output START,NAME,UUID /dev/nbd0 2>/dev/null| grep $nameOrUUID) + local offsetSectors=$(echo $partitionInfo | cut -d' ' -f1) + if [ -z "$offsetSectors" ]; then + warn "could not find partition with label/uuid '$nameOrUUID' on device $device" + return 1 + fi + #warn $(($offsetSectors*512)) # could overflow on 32bit systems + local offsetBytes=$(echo $| awk -v x=$offsetSectors -v y=$sectorSize '{print x * y}') + + # test if mount works directly (problem with btrfs device id) + #mount -v -o loop,offset=$offsetBytes $device $mountPoint + losetup -v -o $offsetBytes $loopDevice $device + echo $loopDevice +} + +# Close previous connections to be able to run this script many times. +dnbd3-client --device /dev/dnbd0 --close && \ +dnbd3-client --host gateway --image archLinux.qcow2 --device /dev/dnbd0 && \ +qemu-nbd --connect=/dev/nbd0 /dev/dnbd0 --read-only && \ +local read_only_partition="$(create_partition_via_offset /dev/nbd0 system)" && \ +# Make read-only partition writable. +# TODO implement persistent available indicator. +if true; then + local writable_device="/dev/ram0" && \ + mknod --mode 660 "$writable_device" b 1 1 && \ + chown root.disk "$writable_device" +else + # Use next free loop device. + local writable_device="$(losetup -f)" && \ + dd if=/dev/zero of=persistent_storage.img bs=1k count=1000 && \ + losetup "$writable_device" persistent_storage.img +fi +local size="$(blockdev --getsz "$read_only_partition")" && \ +local writable_partition_name="root" && \ +dmsetup create "$writable_partition_name" --table \ + "0 $partion_size snapshot $read_only_partition $writable_device N 1" diff --git a/builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh b/builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh new file mode 100755 index 00000000..3e702064 --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh @@ -0,0 +1,40 @@ +# This script only checks if we found a usable partition for the +# future /tmp. The discovery of that partition is done by udev during +# the initqueue. If a valid partition is found (either GPT with the label +# OPENSLX_TMP or MBR with the type 0x44) its path will be written to +# /tmp/openslx.tmpdisk +OPENSLX_TMP_DISK_FLAG="/tmp/openslx.disk.tmp" + +if [ ! -e "$OPENSLX_TMP_DISK_FLAG" ]; then + warn "'$OPENSLX_TMP_DISK_FLAG' not found!" + warn "Systemd will manage $NEWROOT/tmp on its own." + # no partition for the future /tmp found, just + # let systemd manage it then (probably a tmpfs) + return 1 +fi + +# in /tmp/openslx.disk.tmp is the name of the device +# to mount as /tmp in the real system +# meaning we need to mount it to /sysroot/tmp here. + +OPENSLX_TMP_DISK_DEV="$(cat $OPENSLX_TMP_DISK_FLAG)" + +# sanity check: is the content a block device? +if [ ! -b "$OPENSLX_TMP_DISK_DEV" ]; then + warn "'$OPENSLX_TMP_DISK_DEV' appears not to be a block device!" + warn "Systemd will manage $NEWROOT/tmp on its own." + return 1 +fi + +# all good, keep on +if ! mount -t auto "$OPENSLX_TMP_DISK_DEV" $NEWROOT/tmp; then + # something else went wrong :( + warn "Mounting '$OPENSLX_TMP_DISK_DEV' to '$NEWROOT/tmp' failed with: $!" + warn "Systemd will manage $NEWROOT/tmp on its own." + return 1 +fi + +# still here? mount worked wohoo +# set permissions +chmod a+rwxt $NEWROOT/tmp +return 0 diff --git a/builder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh b/builder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh new file mode 100755 index 00000000..29f9f210 --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh @@ -0,0 +1,32 @@ +# include dracut-lib.sh to use 'warn' +command -v warn >/dev/null || . /lib/dracut-lib.sh + +NBD_MOD_PATH="/usr/lib/modules/current/extra/nbd.ko" +DNBD3_MOD_PATH="/usr/lib/modules/current/extra/dnbd3.ko" + +# do we actually have our modules? +if [ ! -e "${NBD_MOD_PATH}" ]; then + warn "No such file of directory: ${NBD_MOD_PATH}" + emergency_shell -n "Error in $0" + return 1 +fi +if [ ! -e "${DNBD3_MOD_PATH}" ]; then + warn "No such file of directory: ${DNBD3_MOD_PATH}" + emergency_shell -n "Error in $0" + return 1 +fi + +# load the kernel modules for dnbd3 and nbd +if ! insmod "${DNBD3_MOD_PATH}"; then + warn "Failed to load DNBD3 kernel module..." + emergency_shell -n "Error in $0" + return 1 +fi + +if ! insmod "${NBD_MOD_PATH}"; then + warn "Failed to load NBD kernel module..." + emergency_shell -n "Error in $0" + return 1 +fi + +return 0 diff --git a/builder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh b/builder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh new file mode 100755 index 00000000..9103afd9 --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh @@ -0,0 +1 @@ +/sbin/initqueue --name ifup-lo --unique --onetime /sbin/ifup lo -m diff --git a/builder/dnbd3-rootfs/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh new file mode 100755 index 00000000..b9134871 --- /dev/null +++ b/builder/dnbd3-rootfs/module-setup.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +source "$moddir/scripts/utils.sh" + +check() { + compile_nbd && \ + compile_dnbd3 && \ + compile_systemd_preserve_process_marker + return $? +} + +depends() { + echo base network bash kernel-modules +} + +installkernel() { + inst "$moddir/binaries/dnbd3/build/dnbd3.ko" \ + /usr/lib/modules/current/extra/dnbd3.ko + inst "$moddir/binaries/nbd/nbd.ko" \ + /usr/lib/modules/current/extra/nbd.ko + + instmods ext4 btrfs +} + +install() { + + # region binaries + + inst "$moddir/binaries/dnbd3/build/dnbd3-client" /usr/bin/dnbd3-client + inst "$moddir/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker" \ + /usr/bin/systemd-preserve-process-marker + + # endregion + + # region hooks + + inst_hook cmdline 00 "$moddir/hooks/cmdline/enable-sysrq.sh" + inst_hook cmdline 10 "$moddir/hooks/cmdline/prepare-network-kcl-parameter.sh" + inst_hook cmdline 90 "$moddir/hooks/cmdline/set-dracut-environment-variables.sh" + + inst_hook pre-udev 00 "$moddir/hooks/pre-udev/load-custom-kernel-modules.sh" + inst_hook pre-udev 00 "$moddir/hooks/pre-udev/setup-loopback-device.sh" + + # this is the configuration hook where the config stuff is wget'ed + # TODO + #inst_hook pre-mount 00 "$moddir/hooks/pre-mount/fetch-config.sh" + # this is the main hook where all the magic is triggered + #inst_hook pre-mount 10 "$moddir/hooks/pre-mount/mount-qcow.sh" + + inst_hook pre-mount 10 "$moddir/hooks/pre-mount/prepare-root-partition.sh" + + inst_hook mount 10 "$moddir/hooks/mount/mount-root-device.sh" + + inst_hook pre-pivot 00 "$moddir/hooks/pre-pivot/mount-tmp.sh" + + # endregion + + ## TODO deprecated + ### SCRIPTS + # the main magic script containing all the functions needed + # to prepare the qcow2-based root filesystem + #inst "$moddir/scripts/setup-qcow2" /sbin/setup-qcow2 + # + # the script triggered by udev upon finding the right partitions + #inst "$moddir/scripts/prepare-disks" /sbin/prepare-disks + ## + # udev rules detecting 44, 45, 46 partitions and running + # 'prepare-disks' to do then format/mount/use them + #inst "$moddir/udev/70-openslx-disk.rules" /etc/udev/rules.d/70-openslx-disk.rules + ## + + # Debugging Uncomment this version if you need some useful debugging tools + # in your iniramfs. + inst_multiple lsblk ping ip ifconfig sshd htop tail head cat vim \ + touch sed lsmod insmod qemu-img sleep route wget find lsof strace \ + chroot switch_root pivot_root qemu-nbd mount nbd-client fdisk mkfs.xfs + # Production: + # inst_multiple insmod qemu-img qemu-nbd +} diff --git a/builder/dnbd3-rootfs/readme.md b/builder/dnbd3-rootfs/readme.md new file mode 100644 index 00000000..9ad0f968 --- /dev/null +++ b/builder/dnbd3-rootfs/readme.md @@ -0,0 +1,472 @@ +# TODO --ommit npd +# TODO Testmenue PW: t + +h1. Evaluation, dissection and modification of Linux remote boot + +h2. Inhalt + +{{toc}} + +#h2. Begriffe + +#* qcow - qemu copy-on-write +#* stage3.1 initramfs +#* stage4 finales System + +h2. Aufgabe + +Es wird ein Skript bzw. Dracut-Modul benötigt, dass ein initramfs basierend auf +systemd baut. Das resultierende initramfs muss Netzwerk-Support bereitstellen, +ein dnbd3 Blockdevice mounten können und einen "switch_root" auf das zuvor +gemountete Dateisystem umsetzen. Das Framework sollte möglichst +Distributionsunabhängig konstruiert sein. Es soll bereits vor dem +"switch_root", also bevor das eigentliche Zielsystem im Root-Verzeichnis +eingebunden werden systemd als init-System zum Einsatz kommen. Die Kernaufgabe +eine initramfs ist es alle nötigen Anwendungen bereitzustellen, die benötigt +werden, um dass finale Zielsystem einzubinden. In dieser konkreten +Aufgabenstellung muss, dass initramfs ein nicht schreibbares Blockgerät +eingebunden werden und eine schreibbare Zwischenshicht (Overlayfilesystem) +zusätzlich eingebunden werden. + +h2. Möglicher Technologien für das Overlaykonzept + +* Dateibasierte Overlay-FS (Union-FS, Alternat-Union-FS, Overlay-FS) + - Funktioniert derzeit nicht auf jedem Zielsystem (Kernel) + - Nicht für den Linux-Kernel zertifiziert oder lässt sich nicht über das + Root-System legen. + - Bei wenigen Änderungen in einer großen Datei muss komplette Datei in + der schreibbaren Schicht gespeichert werden. +* Blockorientierte Overlay-FS (Network-Block-Device, DNBD3, Qemu-Copy-On-Write-Image) + - NBD ist für den Linux-Kernel zertifiziert + - Weniger Netzwerkverkehr nötig, da nur geänderte Blöcke übertragen werden + müssen, statt ganze Dateien zu kopieren. + - DNBD3 hat Failover-Strategien, verzichtet auf komplexe Strategien zum + Schreiben in geänderte Blöcke über das Netzwerk + - Das verfügbare qcow2-Format bietet eine Technologie, um blockorientiert + Änderungen in einer zusätzlichen Dateisystemschicht zu speichern. + +h2. Zielablauf + +Der generelle Ablauf vor bzw. während des Ladens des initramfs und deren +Minilinux-System: + +# Boot PXE +> # Laden des initramfs images +> # Laden des Kernels +# Ausführen des iniramfs +> # Ausführen von Systemd +> > # Bereitstellen aller benötigten Dienste und Hardware (Netzwerk hochbringen) +> > # Mounten des finalen Dateisystems als Wurzel +> > # Wechsel (switch_root) in die finale Distribution +> > # Starten / Weiterausführen von Systemd als Init-System + +h2. Benötigte Pakete zum bauen des initramfs + +> * dracut +# TODO + +h2. Benötigte Pakete innerhalb des resultierenden initramfs + +> * systemd +> * quemu-img +> * quemu-nbd +> * nbd-client +> * dnbd3-client + +h2. Aufsetzen einer Test-Arbeitsumgebung für CentOS + +h3. CentOS7/ArchLinux/RedHat/Ubuntu + VirtualBox + VirtualBoxGuestAdditions + +Aufsetzen des *Dynamic Kernel Module Support*, um einfach neue VBox-Kernel-Module zu aktualisieren: + +> # Aktualisiere Paketdatenbank: @yum update@ +> # Intalliere C-Compiler: @yum install gcc@ +> # Lade erweitertes rpmforfe Repository: @wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm@ +> # Installiere Repository: @rpm -Uvh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm@ +> # Lade das DKMS-Paket: @wget ftp://rpmfind.net/linux/epel/5/x86_64/dkms-2.2.0.3-29.el5.noarch.rpm@ +> # Installiere DKMS-Paket: @yum localinstall dkms-2.2.0.3-25.el7.noarch.rpm --nogpgcheck@ +> # Aktiviere rpmforge Repository: @yum --enablerepo rpmforge install dkms@ +> # Installiere Entwicklertools zum bauen von Paketen: @yum groupinstall "Development Tools"@ +> # Installiere Metainformation zum Kernel: @yum install kernel-devel@ + +Installieren der VirtualBox-GuestAddtion: + +> # Lege die VirtualBox-GuestAddition-CD ein. +> # Mounte CD: @mount /dev/sr0 /mnt/ && cd /mnt/ && ./VBoxLinuxAdditions.run && reboot@ + +Erstellen eines Testboot Eintrags für Grub2: + +> - Füge in ??/etc/grub.d/40_custom?? den folgenden Inhalt hinzu: + +
+menuentry 'test' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-6c06919a-389a-4a50-8c6b-b086e65db9b0' {
+    load_video
+    set gfxpayload=keep
+    insmod gzio
+    insmod part_msdos
+    insmod xfs
+    set root='hd0,msdos1'
+    if [ x$feature_platform_search_hint = xy ]; then
+        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  4236333a-a808-4f6b-b4a6-d963f4a69a25
+    else
+        search --no-floppy --fs-uuid --set=root 4236333a-a808-4f6b-b4a6-d963f4a69a25
+    fi
+    linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=6c06919a-389a-4a50-8c6b-b086e65db9b0 ro rd.lvm.lv=centos/swap crashkernel=auto  rd.lvm.lv=centos/root vconsole.font=latarcyrheb-sun16 vconsole.keymap=de rhgb quiet 
+    initrd16 /initramfs-test.img
+}
+
+ +> - Füge neuen Menüeintrag in die automatisch generierte Grub2 Konfigurations2-Datei hinzu: @grub2-mkconfig -o /boot/grub2/grub.cfg@ + +h2. Bauen eines Test-Initramfs + +Mache ein Backup vom aktuellen initamfs: +@cp -p /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.BACKUP@ + +Der folgende Befehl ersetzt das aktuelle Standart Initramfs mit dem neu +gebauten und berücksichtigt dabei alle bisher editierten Dracut-Module in +??/usr/lib/dracut/modules.d??. Die durchschnittliche Größe des resultierenden +initramfs beträgt komprimiert: zwischen 11 und 16 MB. + +

+dracut --verbose --force /boot/initramfs-3.10.0-123.el7.x86_64.test.img \
+    3.10.0-123.el7.x86_64
+
+ +h3. Konfiguration + +TODO + +# Configure "cmdline" from "Chapter 8. DRACUT.CMDLINE(7)" in virtualbox in "/boot/startup.sh" for uefi or in "/boot/grub2/grub.cfg" for grub2 + +h2. Bauen eines minimalen individuellen Test-Initramfs + +

+dracut --verbose --hostonly --force 
+    /boot/initramfs-3.10.0-123.el7.x86_64.test.img \
+    3.10.0-123.el7.x86_64
+
+ +Die Option "hostonly" veranlasst Dracut dazu nur alle nötigen Abhängigkeiten +für das aktuelle System in das resultierende Initramfs zu installieren. +Andernfalls fügt dracut viele zusätzliche Treiber hinzu, die die Größe der +resultierenden Datei erheblich vergrößern und damit größer wird als nötig. +Die durchschnittliche Größe des resultierenden initramfs beträgt +komprimiert: zwischen 11 und 16 MB. + +h2. Erstellen eines eigenen Dracut-Moduls + +Alle vorhanden Module befinden sich in ??/usr/lib/dracut/modules.d??. + +> # Erstelle ein neues Modul: @mkdir /usr/lib/dracut/modules.d/91test@ +> # Baue neues initramfs und achte darauf, dass ??\*\*Including module: test\*\*?? mit der Command-Line-Option ??--verbose?? ausgegeben wird. +> # Alle Modul-Installations-Informationen sind in der Datei ??module-setup.sh??: @touch /usr/lib/dracut/modules.d/91test/module-setup.sh@ +> # Konfiguriere Modul: +> > # Als erstes erstellt man eine ??check??-Funktion, die lediglich ??0?? + zurückgibt. Diese Funktion wird aufgerufen, wenn entschieden wird, welche + Dracutmodule geladen werden sollen. Durch zurückgeben der ??0?? wird das + Modul beim nächsten bauen eines Initramfs automatisch hinzugefügt ohne + das man es etwas in der ??/etc/dracut.conf?? oder per Command-Line-Option + "--add" angeben muss. Wenn die @$hostonly@ Variable gesetzt ist, dann + wird das Modul auch im "hostonly" Modus geladen. In diesem Fall sollte + die Funktion nur dann ??0?? zurückgeben, wenn das Modul auch wircklich + für den aktuellen Host benötigt wird. Wenn 255 zurückgegeben wird, wird + das Modul nur dann geladen, wenn es von einem andren Modul als + Abhängigkeit deklariert wurde. + +

+check() {
+    return 0
+}
+
+ +Als nächstes wird eine ??install??-Funktion erstellt. Die ??install??-Funktion +wird aufgerufen, wenn alle nicht Kernel spezifischen Ressourcen installiert +werden sollen. Es können Binärdateien, Skripte und andere statischen Dateien +installiert werden. Um einen Datei im aktuellen Modul-Ordner zu addressieren +sollte die Variable "$moddir" als Prefix eingesetzt werden. +Eine solche Funktion kann beispielsweise einen ??Command-Line-Hook?? triggern, +der modulespezifische ??Kernel-Command-Line-Optionen?? verarbeitet während das +initiale Minilinux bootet. Im folgenden Beispiel werden ??Command-Line-Optionen +mit Priorität 20 vom Shell-Skript ??parse-insmodpost.sh?? gelesen und +ausgewertet. Dadurch muss natürlich auch das entsprechende Skript in das +initramfs kopiert werden. Dies wird durch den Aufruf der Funktion +??inst_simple?? erreicht. + +

+install() {
+    inst_hook cmdline 20 "$moddir/parse-cmdline.sh"
+    inst_simple "$moddir/parse-cmdline.sh" /sbin/insmodpost.sh
+}
+
+ +Die ??parse-cmdline.sh?? parst die Kernel-Command-Line für die Argumente +??rd.driver.post??, verhindert, dass die Module automatisch geladen werden und +installiert den Hook ??hook.sh?? in der ??initqueue/settled??. Der Inhalt von +??parse-cmdline.sh?? könnte wie folgt aussehen: + +

+for p in $(getargs rd.driver.post=); do
+    echo "blacklist $p" >> /etc/modprobe.d/initramfsblacklist.conf
+done
+
+ +In einer ??depends??-Funktion können andere Dracut-Module als Abhängigkeit +deklariert werden. Diese müssen einfach per "echo" als String Leerzeichen +getrennt ausgegeben werden. + +

+depends() {
+    echo 'debug virtfs'
+}
+
+ +Mit dieser Funktion können zusätzliche benötigte Kernel-Command-Line-Argumente +ausgegeben werden, die benötigt werden um die aktuelle Maschine zu booten. +Die Ausgabe sollte mit einem Leerzeichen beginnen und keine neuen Zeilen +ausgeben. + +

+cmdline() {
+    echo 'TODO'
+}
+
+ +Mit der Funktion ??installkernel?? sollen alle kernelspezifischen Dateien +installiert werden. Siehe hierzu auch den Abschnitt +??Hilfsfunktionen zur Installation?? + +

+installkernel() {
+    TODO
+}
+
+ +h2. Hilfsfunktionen zur Installation + +??inst_multiple?? installiert mehrere Binärdateien. Sollten ausführbare Dateien +ohne entsprechendem Pfad ausgewählt werden, wird dracut folgende die Pfade +??/usr/sbin??, ??/sbin??, ??/usr/bin??, ??/bin?? durchsuchen, um den Pfad der +zugehörigen ausführbaren Datei zu ermitteln. Bei dem Kommando-Zeilen-Argument +??-o?? als erster Parameter werden Fehler bei nicht auffindbaren Dateien +unterdrückt. + +??inst_multiple [-o] [ …]?? + +??inst?? installiert eine referenzierte Datei an den korrespondierenden Ort im +??initramfs??. Die Datei wird innerhalb des ??initramfs?? am gleichen Ort zu +finden sein wie auf der Referenzmaschine. Optional kann als zweites Argument +ein anderer Ort für das temporäre Dateisystem angegeben werden. + +??inst []?? + +??inst_hook?? installiert eine ausführbare Datei im Pfad ???? im +Dracut-hook-Ordner ????. Der Einstiegspunkt wird mit Priorität +???? zur Laufzeit des initialen Mini-Linux-Systems ausgeführt. + +??inst_hook ?? + +??inst_rules?? installiert einen oder mehrere udev-Regeln. Nicht-existente +udev-Regeln werden beim bauen des initramfs gemeldet, führen aber nicht zum +Abbruch. + +??inst_rules [ …]?? + +??instmods?? installiert einen oder mehrere Kernel-Module in das initramfs. +???? kann auch ein komplettes Subsystem darstellen, wenn es mit +dem Prefiy "=" beginnt (z.B. "=drivers/net/team"). ??instmods?? sollte nur +innerhalb der ??installkernel()??-Funktion verwendet werden. Ist ??$hostonly?? +gesetzt und das aktuelle Modul nicht im Referenzsystem geladen und wird +demnach nicht in ??/sys/…/uevent MODALIAS?? verwendet, wird dieses nicht in +das initramfs integriert. Soll das Modul in jedem Fall geladen werden, kann +folgende Syntax verwendet werden: + +

+installkernel() {
+    hostonly='' instmods 
+}
+
+ +??instmods [ … ]?? + +h3. Konfiguration + +TODO + +h3. Debugging + +TODO + +h2. Build kernel specific dnbd3 kernel module + +> # Installiere Metainformation zum Kernel: @yum install kernel-devel@ +> # Installiere cmake zum Bauen von dnbd3: @yum install cmake@ +> # Installiere zlib-devel zum Bauen von dnbd3: @yum install zlib-devel@ + +Die kernel header Dateien liegen in: + +/usr/lib/modules/3.10.0-229.1.2.el7.x86_64 + +TOOD + +dnbd3-client -h 132.230.4.1 -i stage4/torben/test -r 1 + +> # Installiere qemu-img: @yum install qemu-img@ +> # Installiere nbd: @wget http://dl.fedoraproject.org/pub/epel/6/x86_64/nbd-2.9.20-7.el6.x86_64.rpm && rpm -Uvh nbd-2.9.20-7.el6.x86_64.rpm@ + +NOTE: Disable NetworkManager to avoid reloading network on boot: systemctl disable NetworkManager + +h2. CentOS7 @rpmbuild@ + +First "Set up RPM build env":http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment +Now in that user's home, e.g. @/home/builder@: +
+# install yumdownloader
+yum install yum-utils
+
+# download source in /home/builder/
+yumdownloader --source systemd
+
+# should have now have a file ~/systemd-208-20.el7_1.2.src.rpm
+# "install" it in ~/rpmbuild
+rpm -ivh systemd-208-20.el7_1.2.src.rpm
+
+# install building deps
+yum-builddep ~/rpmbuild/SPECS/systemd.spec
+
+# now check if everything is working, by running the simple %prep% phase
+# (unpacks source & applies patches)
+rpmbuild -bp ~/rpmbuild/SPECS/systemd.spec
+
+# if it worked, we can probably compile
+# this runs %prep% and %build%
+rpmbuild -bp ~/rpmbuild/SPECS/systemd.spec
+
+ +dmesg + 998 ping 8.8.8.8 + 999 shutdown .h now + 1000 shutdown -h now + 1001 y search yumdownloader + 1002 y install yum-utils + 1003 yumdownloader --help + 1004 yumdownloader --source glib2 qemu + 1005 yumdownloader --source qemu-img + 1006 ls + 1007 mkdir glib2_source + 1008 cd glib2 + 1009 cd glib2_source/ + 1010 rpm2cpio ../glib2-2.40.0-4.el7.src.rpm | cpio -idmv + 1011 ls + 1012 tar xf glib-2.40.0.tar.xz + 1013 ls + 1014 cd glib-2.40.0 + 1015 ls + 1016 ./configure --enable-static + 1017 make + 1018 ls + 1019 make + 1020 y search zlib + 1021 y search zlib-static + 1022 y install zlib-static + 1023 ./configure --enable-static + 1024 y search libffi + 1025 y install libffi + 1026 y install libffi-devel + 1027 ./configure --enable-static + 1028 make + 1029 ls + 1030 cd build/ + 1031 ls + 1032 .. + 1033 l + 1034 ls + 1035 make install + 1036 .. + 1037 l + 1038 .. + 1039 l + 1040 mkdir qemu-kvm + 1041 cd qemu-kvm + 1042 ls + 1043 rpm2cpio ../qemu-kvm-1.5.3-86.el7_1.1.src.rpm | cpio -idmv + 1044 l + 1045 pwd + 1046 ls + 1047 l + 1048 ls + 1049 .. + 1050 l + 1051 git clone git://git.qemu.org/qemu.git qemu + 1052 ls + 1053 rm qemu-kvm -rf + 1054 rm qemu-kvm-1.5.3-86.el7_1.1.src.rpm + 1055 l + 1056 cd qemu/ + 1057 l + 1058 ./configure --static --target-list=x86_64-linux-user + 1059 y install zlib + 1060 y install zlib-devel + 1061 y install zlib2 + 1062 y search zlib + 1063 y install zlib-static + 1064 y install zlib + 1065 ll /lib64/libz.a + 1066 ./configure --static --target-list=x86_64-linux-user + 1067 make clean + 1068 ./configure --static + 1069 y search zlib + 1070 y search zlib-static..x86_64 + 1071 y search zlib-static.x86_64 + 1072 y install zlib-static.x86_64 + 1073 ldconfig + 1074 ./configure --static + 1075 ./configure --help + 1076 ./configure --help | grep zlib + 1077 y search zlib + 1078 y install zlib-devel zlib-static zlib + 1079 y deinstall zlib + 1080 y remove zlib + 1081 y search libz + 1082 ls + 1083 git submodule update --init dtc + 1084 ./configure --static --target-list=x86_64-linux-user + 1085 find / -name zlib + 1086 find / -name libz + 1087 find / -name *libz* + 1088 find / -name *zlib* + 1089 ls + 1090 ./configure --disable-zlib-test --static --target-list=x86_64-linux-user + 1091 y search base-devel + 1092 y search devel + 1093 yum groupinstall "Development Tools" + 1094 yum groups mark install + 1095 yum group mark install + 1096 yum groupinstall "Development Tools" + 1097 yum groups mark install + 1098 yum grouplist + 1099 y search zlibrary + 1100 y search glibc + 1101 y install glibc-static + 1102 ls + 1103 ./configure --static --target-list=x86_64-linux-user + 1104 y search glib + 1105 y search glib-2 + 1106 y search glib2-devel + 1107 y install glib2-devel + 1108 ./configure --static --target-list=x86_64-linux-user + 1109 git submodule update --init pixman + 1110 ./configure --static --target-list=x86_64-linux-user + 1111 ls + 1112 ll + 1113 make -j3 + 1114 l + 1115 ldd qemu-nbd + 1116 history + +h2. Quellen + +* "Main Page Dracut on kerne.org":https://dracut.wiki.kernel.org/index.php/Main_Page +* "Documentation on kernel.org":https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html +* "Enable addional repository":http://www.tecmint.com/enable-rpmforge-repository +* "Getting Dynamic Kernel Module Support":http://rpmfind.net/linux/rpm2html/search.php?query=dkms diff --git a/builder/dnbd3-rootfs/scripts/prepare-disks b/builder/dnbd3-rootfs/scripts/prepare-disks new file mode 100755 index 00000000..2e68dd9e --- /dev/null +++ b/builder/dnbd3-rootfs/scripts/prepare-disks @@ -0,0 +1,211 @@ +#!/bin/bash +############################################################################### +# GLOBALS +# + +# flag file containing pids of running instances for concurrency checks +declare -rg OPENSLX_DISK_FLAG="/tmp/openslx.disk" +# file that will contain the name of the device used for the /tmp partition +# - label 'OPENSLX_TMP' in GPT / type '0x44' in MBR +declare -rg OPENSLX_TMP_MARKER="/tmp/openslx.disk.tmp" +# file that will contain the name of the device used for storing qcow2 +# - label 'OPENSLX_SYS' in GPT / type '0x46' in MBR +declare -rg OPENSLX_SYS_MARKER="/tmp/openslx.disk.sys" +# mount point for system partition +declare -rg OPENSLX_SYS_MOUNT="/opt/openslx/system" + +# +# END GLOBALS +############################################################################### + +############################################################################### +# FUNCTION DEFINITIONS +# +# helper to mount the OPENSLX_SYS partition to /opt/openslx/system +# Usage: mount_sys_part +mount_sys_part() { + if [ ! -b "$1" ]; then + warn "($$) Refusing to mount '$1' as its not a block device!" + return 1 + fi + + local OPENSLX_SYS_DEVICE="$1" + mkdir -p ${OPENSLX_SYS_MOUNT} + if ! mount -t auto "${OPENSLX_SYS_DEVICE}" "${OPENSLX_SYS_MOUNT}"; then + warn "($$) Mounting '${OPENSLX_SYS_DEVICE}' to '${OPENSLX_SYS_MOUNT}' failed." + return 1 + fi + return 0 + +} +# +# generic helper to format the given partition with the given filesystem or +# from the prefdefined list of xfs, ext4, ... +# Usage: format_disk +# e.g. format_disk /dev/sda1 xfs +format_disk () { + local TARGET_DEVICE="$1" + local fslist="xfs ext4" + # if we have a second arguments, its the filesystem of choice + local fs + [ $# -ge 2 ] && fslist="$2" + for fs in $fslist ; do + unset found + local MKFS="$(busybox which mkfs.$fs)" + if [ -n $MKFS ]; then + found=yes + case "mkfs.$fs" in + mkfs.xfs) fopt="-fq" ;; + mkfs.ext4) fopt="-Fq" ;; + esac + info "($$) Formatting $TARGET_DEVICE as $fs" + return $(${MKFS} ${fopt} "${TARGET_DEVICE}") + fi + [ -n "$found" ] && break + done + # still here? then we didn't find a proper formatter... + warn "($$) Could not format $PART_DEV as $fs." + return 1 +} + +# +# END FUNCTION DEFINITIONS +############################################################################### + +############################################################################### +# MAIN CODE +# + +command -v warn >/dev/null || . /lib/dracut-lib.sh + +# let check the arguments +if [ "$#" -ne 2 ]; then + warn "($$) '$0' need 2 arguments: '$0 [OPENSLX_SYS|OPENSLX_TMP] '" + exit 1 +fi +# $1 sane? +if [ "x$1" != "xOPENSLX_SYS" ] && [ "x$1" != "xOPENSLX_TMP" ]; then + warn "($$) First arg needs to be either 'OPENSLX_SYS' or 'OPENSLX_TMP', given: $1" + exit 1 +fi +# $2 sane? +if [ ! -b "/dev/$2" ]; then + warn "($$) Second arg appears not to be a block device!" + exit 1 +fi + +# ok all seems well, set the arguments +PART_TYPE="$1" +PART_DEV="/dev/$2" + +unset OPENSLX_TMP_DEVICE +unset OPENSLX_SYS_DEVICE + +# lets check if we are already running +INSTANCES="$(grep "$PART_TYPE" "$OPENSLX_DISK_FLAG" | busybox wc -l)" +if [ "$INSTANCES" -ge 1 ]; then + # uhoh we are not alone! Need to check + # if the other instance actually did its job + warn "($$) '$0' already running for $PART_TYPE on $PART_DEV... checking state." + # here two/three cases depending on which PART_TYPE we are + # currently processing. + for timeout in 1 1 2; do + # always give the other instance time to finish + # but only check 3 times overall + sleep $timeout + case "$PART_TYPE" in + OPENSLX_TMP) + # was the tmp partition marker created with a device? + if [ ! -f "${OPENSLX_TMP_MARKER}" ]; then + info "($$) Invalid state: no marker for $PART_TYPE" + continue + fi + # it was, is it a valid block device? + OPENSLX_TMP_DEVICE="$(cat ${OPENSLX_TMP_MARKER})" + if [ -z $OPENSLX_TMP_DEVICE -o ! -b $OPENSLX_TMP_DEVICE ]; then + info "($$) Invalid state: no for device $OPENSLX_TMP_DEVICE" + continue + fi + # its detected, its a block device and as mounting is + # done later, we can not check for more at this point + info "($$) Valid state for $OPENSLX_TMP_DEVICE as $PART_TYPE" + exit 0 + ;; + OPENSLX_SYS) + # was the system partition marker created with a device? + if [ ! -f "${OPENSLX_SYS_MARKER}" ]; then + info "($$) Invalid state: no marker for $PART_TYPE" + continue + fi + # it was, is it a valid block device? + OPENSLX_SYS_DEVICE="$(cat ${OPENSLX_SYS_MARKER})" + if [ -z $OPENSLX_SYS_DEVICE -o ! -b $OPENSLX_SYS_DEVICE ]; then + info "($$) Invalid state: no for device $OPENSLX_SYS_DEVICE" + continue + fi + # its detected, its a block device, is it mounted? + if mount | grep -qE "^$OPENSLX_SYS_DEVICE\ on $OPENSLX_SYS_MOUNT"; then + info "($$) Valid state for $OPENSLX_SYS_DEVICE as $PART_TYPE" + exit 0 + fi + # if its not mounted, we want to keep on, so no exit! + ;; + *) + # weird case which should never happen + warn "($$) If you see this, then $0 was called with a bad PART_TYPE: $@" + continue + ;; + esac + done + warn "($$) Timeout reached!" + warn "($$) '$PART_TYPE' was found but not device was associated to it!" +fi + +# We write our pid to $OPENSLX_DISK_FLAG in order to make sure +# we are the only instance of this script running. +info "($$) Processing: $PART_TYPE -> $PART_DEV ($$)" +echo "$PART_TYPE.$$" >> "$OPENSLX_DISK_FLAG" + +# if we are still here, then we can go on and process the partition +if [ "$PART_TYPE" = "OPENSLX_TMP" ]; then + # always format /tmp partition + if ! format_disk "${PART_DEV}" xfs; then + # error while formatting, cleanup + warn "($$) Error formatting $PART_DEV ... removing $$" + sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" + exit 1 + fi + info "($$) Using '$PART_DEV' as '$PART_TYPE'" + # mark it for later: in pre-pivot we will check this file + # and mount it as $NEWROOT/tmp + echo "$PART_DEV" > "$OPENSLX_TMP_MARKER" + # remove our pid from OPENSLX_DISK_FLAG + sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" + exit 0 +fi +if [ "$PART_TYPE" = "OPENSLX_SYS" ]; then + # TODO make the formatting of the system partition configurable + if ! format_disk "${PART_DEV}" xfs; then + # error while formatting, cleanup + warn "($$) Error formatting $PART_DEV ... removing $$" + sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" + exit 1 + fi + # mark it + # mount it now, since qemu-nbd needs it asap! + if mount_sys_part "$PART_DEV"; then + # mount worked, mark it as done + info "($$) Using '$PART_DEV' as '$PART_TYPE'" + echo "$PART_DEV" > "$OPENSLX_SYS_MARKER" + sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" + exit 0 + else + warn "($$) 'mount_sys_part' failed in $0" + sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}" + exit 1 + fi +fi + +# +# END MAIN CODE +############################################################################### diff --git a/builder/dnbd3-rootfs/scripts/setup-qcow2 b/builder/dnbd3-rootfs/scripts/setup-qcow2 new file mode 100755 index 00000000..70babc17 --- /dev/null +++ b/builder/dnbd3-rootfs/scripts/setup-qcow2 @@ -0,0 +1,137 @@ +#!/usr/bin/bash + +# dracut-lib to use debugging functions +command -v warn >/dev/null || . /lib/dracut-lib.sh +command -v emergency_shell >/dev/null || . /lib/dracut-lib.sh + +############################################################################### +# GLOBALS +# +# TODO make this configurable +[ -f /opt/openslx/config ] && . /opt/openslx/config +[ -z $SLX_DNBD3_SERVER ] && SLX_DNBD3_SERVER="132.230.4.1" +[ -z $SLX_STAGE4 ] && SLX_STAGE4="stage4/joe/centos7" +[ -z $SLX_STAGE4_RID ] && SLX_STAGE4_RID="4" +declare -rg DNBD3_SERVER="$SLX_DNBD3_SERVER" +declare -rg DNBD3_IMAGE="$SLX_STAGE4" +declare -rg DNBD3_RID="$SLX_STAGE4_RID" +declare -rg DNBD3_DEVICE="/dev/dnbd0" +declare -rg QCOW_CONTAINER="/opt/openslx/system/system.qcow2" +# +# END GLOBALS +############################################################################### + +############################################################################### +# FUNCTION DEFINITIONS +# +# helper to do some sanity checks +check_dnbd3() { + if [ ! command -v "dnbd3-client" >/dev/null ]; then + warn "No 'dnbd3-client' found. Was the initramfs built correctly?" + emergency_shell -n "Error in $0" + return 1 + fi + return 0 +} + +# helper to connect to the dnbd3-server +connect_dnbd3() { + # check if it already connected + local current_image_name="$(cat /sys/block/${DNBD3_DEVICE#/dev/}/net/image_name)" + [ "x${current_image_name}" != "x(null)" ] && return 0 + + # not connected yet, do it + if ! dnbd3-client -h "${DNBD3_SERVER}" \ + -i "${DNBD3_IMAGE}" \ + -r "${DNBD3_RID}" \ + -d "${DNBD3_DEVICE}" ; then + warn "Failed to mount $DNBD3_IMAGE from $DNBD3_SERVER to $DNBD3_DEVICE" + emergency_shell -n "Error in $0" + return 1 + fi + return 0 +} + +# helper to create the qcow2 container file using +# DNBD3_DEVICE as the base of the filesystem +# QCOW_CONTAINER as the writable file +# (our future rootfs) +create_qcow() { + # check if we already created the qcow2-container + [ -e "$QCOW_CONTAINER" ] && return 0 + + # check if we have our target directory, if not create it + [ ! -d "$(busybox dirname $QCOW_CONTAINER)" ] && \ + mkdir -p "$(busybox dirname $QCOW_CONTAINER)" + + # we did not, let's create it + if ! qemu-img create -f qcow2 -o \ + backing_file="$DNBD3_DEVICE",backing_fmt=qcow2 "$QCOW_CONTAINER"; then + warn "Failed to create qcow2-Container from $DNBD3_DEVICE" + emergency_shell -n "Error in $0" + rm -f -- "$QCOW_CONTAINER" + return 1 + fi + return 0 +} +# helper to start qemu-nbd on localhost:2000 +# use our wrapper to set argv[0][0] to '@' +# this keeps qemu-nbd running after switching root +export_qcow() { + # check if we already have a qemu-nbd + if [ -e /tmp/qemu-nbd.pid ]; then + kill -0 $(cat /tmp/qemu-nbd.pid) && return 0 + fi + # since we use the wrapper, we need a little more logic to see if it runs + /usr/bin/systemd-preserve-process-marker \ + /usr/bin/qemu-nbd -t -p 2000 "$QCOW_CONTAINER" & + # the wrapper returns 255 if the qemu-nbd binary is missing + local qemu_nbd_pid="$!" + for i in 0.5 1 2; do + sleep $i + if ! kill -0 $qemu_nbd_pid; then + # not running + wait $qemu_nbd_pid + local ret_wrapper="$?" + if [ "${ret_wrapper}" -eq 127 ]; then + # wrapper was not found by bash + warn "No such file or directory: /usr/bin/systemd-preserve-process-marker" + elif [ "${ret_wrapper}" -eq 255 ]; then + # qemu-nbd was not found + warn "No such file or directory: /usr/bin/qemu-nbd" + fi + emergency_shell -n "Error in $0" + return 1 + else + # all good, qemu-nbd is running, remember its pid + echo $qemu_nbd_pid > /tmp/qemu-nbd.pid + return 0 + fi + done + # fallback + return 1 +} +# helper to mount the qcow2-container per nbd +connect_qcow() { + # try to mount the locally exported qcow2-container using nbd-client + if /usr/bin/systemd-preserve-process-marker \ + nbd-client --persist 127.0.0.1 2000 /dev/nbd0; then + # it worked, lets set the symlink to /dev/root as dracut needs it + # later on to mount that device to the future root (/sysroot) + ln -sf /dev/nbd0 /dev/root + return 0 + else + # this is pretty bad, dracut would spawn an emergency later on + # since there is no /dev/root to mount. + # For debugging purposes, we drop an emergency shell ourselves + # if the mount fails. + warn "Could not mount /dev/nbd0 from 127.0.0.1:2000." + emergency_shell -n "Error in $0" + return 1 + fi +} +# +# END FUNCTION DEFINITIONS +############################################################################### + +# No main, use functions! diff --git a/builder/dnbd3-rootfs/scripts/utils.sh b/builder/dnbd3-rootfs/scripts/utils.sh new file mode 100644 index 00000000..3c72dbca --- /dev/null +++ b/builder/dnbd3-rootfs/scripts/utils.sh @@ -0,0 +1,99 @@ +UTILS_KERNEL_MODULE_DIRECTORY="builder/dnbd3-qcow2-rootfs/kernel_modules/" +UTILS_STANDARD_OUTPUT=/dev/null +UTILS_ERROR_OUTPUT=/dev/null + +function utils_log() { + # Handles logging messages. Returns non zero and exit on log level + # error to support chaining the message into toolchain. + # + # Examples: + # + # >>> build_initramfs_log + # info: test + # >>> build_initramfs_log debug message + # debug: message + # >>> build_initramfs_log info message '\n' + # + # info: message + local loggingType='info' && \ + local message="$1" && \ + if [ "$2" ]; then + loggingType="$1" + message="$2" + fi + if [ "$_VERBOSE" == 'yes' ] || [ "$loggingType" == 'error' ] || \ + [ "$loggingType" == 'critical' ]; then + if [ "$3" ]; then + echo -e -n "$3" + fi + echo -e "${loggingType}: $message" + fi + if [ "$loggingType" == 'error' ]; then + exit 1 + fi + return 0 +} +function compile_nbd() { + # Downloads and compiles nbd. + # + # Examples: + # + # >>> build_initramfs_compile_nbd + # ... + # Provides the following file: + # ${_KERNEL_MODULE_DIRECTORY}/nbd/nbd.ko + pushd "${_KERNEL_MODULE_DIRECTORY}/nbd" \ + 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ + build_initramfs_log 'Compile the nbd kernel module.' && \ + make 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ + popd 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" + return $? + # TODO make clean +} +function compile_dnbd3() { + # Downloads and compiles dnbd3. + # + # Examples: + # + # >>> build_initramfs_compile_dnbd3 + # ... + # Provides the following file: + # ${_KERNEL_MODULE_DIRECTORY}/dnbd3/build/dnbd3.ko + rm --recursive --force ${_KERNEL_MODULE_DIRECTORY}/dnbd3 \ + 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ + pushd $_KERNEL_MODULE_DIRECTORY \ + 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ + git clone git://git.openslx.org/dnbd3.git \ + 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ + cd dnbd3 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ + ./build.sh 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \ + popd 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" + return $? + # TODO rm -rf build +} +function compile_systemd_preserve_process_marker() { + # Compiles simple c program. + pushd && \ + make && \ + popd + return $? +} +function utils_dependency_check() { + # This function check if all given dependencies are present. + # + # Examples: + # + # >>> build_initramfs_perform_dependency_check "mkdir pacstrap mktemp" + # ... + local dependenciesToCheck="$1" && \ + local result=0 && \ + local dependency && \ + for dependency in ${dependenciesToCheck[*]}; do + if ! hash "$dependency" 1>"$_STANDARD_OUTPUT" 2>/dev/null; then + build_initramfs_log 'critical' \ + "Needed dependency \"$dependency\" isn't available." && \ + result=1 + fi + done + return $result +} diff --git a/builder/dnbd3-rootfs/udev/70-openslx-disk.rules b/builder/dnbd3-rootfs/udev/70-openslx-disk.rules new file mode 100644 index 00000000..5cb3fa52 --- /dev/null +++ b/builder/dnbd3-rootfs/udev/70-openslx-disk.rules @@ -0,0 +1,7 @@ +# GPT rules +KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="gpt" ENV{ID_PART_ENTRY_NAME}=="OPENSLX_TMP" RUN+="/sbin/prepare-disks %E{ID_PART_ENTRY_NAME} %k" +KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="gpt" ENV{ID_PART_ENTRY_NAME}=="OPENSLX_SYS" RUN+="/sbin/prepare-disks %E{ID_PART_ENTRY_NAME} %k" + +# MBR rules +KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="dos" ENV{ID_PART_ENTRY_TYPE}=="0x44" RUN+="/sbin/prepare-disks OPENSLX_TMP %k" +KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="dos" ENV{ID_PART_ENTRY_TYPE}=="0x46" RUN+="/sbin/prepare-disks OPENSLX_SYS %k" -- cgit v1.2.3-55-g7522