diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000000..51a1d0e3e66f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,77 @@ +dist: bionic + +language: c + +notifications: + - email: true + +before_script: + # Download the kernel + - sudo apt-get install libelf-dev wget tar gzip python + - wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.1.36.tar.gz + - tar xf linux-4.1.36.tar.gz + - mv linux-4.1.36 linux-stable + - ./.travis_get_mainline_kernel + - cp ./.travis_cmd_wrapper.pl ~/travis_cmd_wrapper.pl + # Prerequisite for xfstests testing + - sudo apt-get install linux-headers-$(uname -r) + - sudo apt-get install autoconf libtool pkg-config libnl-3-dev libnl-genl-3-dev + - sudo apt-get install xfslibs-dev uuid-dev libtool-bin xfsprogs libgdbm-dev gawk fio attr libattr1-dev libacl1-dev libaio-dev + - git clone --branch=exfat-next https://github.com/exfat-utils/exfat-utils + - export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH + - export PATH=/usr/local/lib:$PATH + - sudo useradd fsgqa + - sudo useradd 123456-fsgqa + +script: + # Copy ksmbd source to kernel + - mv linux-stable ../ + - mv linux ../ + - mkdir ../linux-stable/fs/exfat + - cp -ar * ../linux-stable/fs/exfat/ + - mkdir ../linux/fs/exfat + - cp -ar * ../linux/fs/exfat/ + + # Compile with 4.1 kernel + - cd ../linux-stable + - yes "" | make oldconfig > /dev/null + - echo 'obj-$(CONFIG_EXFAT_FS) += exfat/' >> fs/Makefile + - echo 'source "fs/exfat/Kconfig"' >> fs/Kconfig + - echo 'CONFIG_EXFAT_FS=m' >> .config + - make -j$((`nproc`+1)) fs/exfat/exfat.ko + + # Compile with latest Torvalds' kernel + - cd ../linux + - yes "" | make oldconfig > /dev/null + - echo 'obj-$(CONFIG_EXFAT) += exfat/' >> fs/Makefile + - echo 'source "fs/exfat/Kconfig"' >> fs/Kconfig + - echo 'CONFIG_EXFAT_FS=m' >> .config + - make -j$((`nproc`+1)) fs/exfat/exfat.ko + + # Run xfstests testsuite + - cd ../exfat + - make > /dev/null + - sudo make install > /dev/null + - sudo modprobe exfat + - cd exfat-utils + - ./autogen.sh > /dev/null + - ./configure > /dev/null + - make -j$((`nproc`+1)) > /dev/null + - sudo make install > /dev/null + - cd .. + - sudo mkdir -p /mnt/scratch + - sudo mkdir -p /mnt/test + - dd if=/dev/zero bs=1024 count=1024000 of=test.img + - dd if=/dev/zero bs=1024 count=1024000 of=scratch.img + - mkfs.exfat test.img + - mkfs.exfat scratch.img + - cd exfat-testsuites/ + - tar xzvf xfstests-exfat.tgz > /dev/null + - cd xfstests-exfat + - ./configure > /dev/null + - make -j$((`nproc`+1)) > /dev/null + - sudo ./check generic/001 + - sudo ./check generic/002 + - sudo ./check generic/005 + - sudo ./check generic/006 + - sudo ./check generic/007 diff --git a/.travis_cmd_wrapper.pl b/.travis_cmd_wrapper.pl new file mode 100755 index 000000000000..0cbaea440eb9 --- /dev/null +++ b/.travis_cmd_wrapper.pl @@ -0,0 +1,65 @@ +#!/usr/bin/perl + +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright (C) 2019 Samsung Electronics Co., Ltd. +# + +use strict; + +sub tweak_sysctl() +{ + `sudo sysctl kernel.hardlockup_panic=0`; + `sudo sysctl kernel.hung_task_panic=0`; + `sudo sysctl kernel.panic=128`; + `sudo sysctl kernel.panic_on_io_nmi=0`; + `sudo sysctl kernel.panic_on_oops=0`; + `sudo sysctl kernel.panic_on_rcu_stall=0`; + `sudo sysctl kernel.panic_on_unrecovered_nmi=0`; + `sudo sysctl kernel.panic_on_warn=0`; + `sudo sysctl kernel.softlockup_panic=0`; + `sudo sysctl kernel.unknown_nmi_panic=0`; +} + +sub execute($$) +{ + my $cmd = shift; + my $timeout = shift; + my $output = "Timeout"; + my $status = 1; + + $timeout = 8 * 60 if (!defined $timeout); + + tweak_sysctl(); + + eval { + local $SIG{ALRM} = sub { + print "TIMEOUT:\n"; + system("top -n 1"), print "top\n"; + system("free"), print "free\n"; + system("dmesg"), print "dmesg\n"; + die "Timeout\n"; + }; + + print "Executing $cmd with timeout $timeout\n"; + + alarm $timeout; + $output = `$cmd`; + $status = $?; + alarm 0; + print $output."\n"; + print "Finished: status $status\n"; + }; + + if ($@) { + die unless $@ eq "Timeout\n"; + } +} + +if (! defined $ARGV[0]) { + print "Usage:\n\t./.travis_cmd_wrapper.pl command [timeout seconds]\n"; + exit 1; +} + +execute($ARGV[0], $ARGV[1]); diff --git a/.travis_get_mainline_kernel b/.travis_get_mainline_kernel new file mode 100755 index 000000000000..3356d15da772 --- /dev/null +++ b/.travis_get_mainline_kernel @@ -0,0 +1,37 @@ +#!/bin/sh + +# +# A simple script we are using to get the latest mainline kernel +# tar ball +# + +wget https://www.kernel.org/releases.json +if [ $? -ne 0 ]; then + echo "Could not download kernel.org/releases.json" + exit 1 +fi + +VER=$(cat releases.json | python2.7 -c "import sys, json; print json.load(sys.stdin)['latest_stable']['version']") +if [ $? -ne 0 ]; then + echo "Could not parse release.json" + exit 1 +fi + +if [ "z$VER" = "z" ]; then + echo "Could not determine latest release version" + exit 1 +fi + +wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-"$VER".tar.gz +if [ $? -ne 0 ]; then + echo "Could not download $VER kernel version" + exit 1 +fi + +tar xf linux-"$VER".tar.gz +if [ $? -ne 0 ]; then + echo "Could not untar kernel tar ball" + exit 1 +fi + +mv linux-"$VER" linux