From: Serge E. H. <se...@us...> - 2007-06-26 02:13:17
|
Quoting Serge E. Hallyn (se...@us...): > Quoting Subrata Modak (su...@li...): > > Hi Rishikesh/Sergei, > > > > Any fix available for the same ?? ;-) > > Please try the following patch... I'm sorry, that should handle archictures without unshare (?) but not older kernels. The following patch adds a check for a 2.6.16 kernel, which it looks like is where unshare was added. BTW, I may be off, but I think the comments for lib/tst_kvercmp.c:tst_kvercmp() are wrong, aren't they? Doesn't it return a positive int if arg < current kernel version, and positive int if arg > current kernel version? thanks, -serge diff -Nrup ltp/testcases/kernel/containers/Makefile ltp-patched/testcases/kernel/containers/Makefile --- ltp/testcases/kernel/containers/Makefile 2007-04-26 13:02:50.000000000 +0200 +++ ltp-patched/testcases/kernel/containers/Makefile 2007-06-26 04:08:24.000000000 +0200 @@ -1,14 +1,23 @@ SUBDIRS = libclone utsname -all noltp noltp_check: - @set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i $@; done +CFLAGS += -I../../../include -install: - @set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i install ; done - chmod ugo+x container_test.sh - ln -f container_test.sh ../../bin/container_test.sh +check_for_unshare: check_for_unshare.c + $(CC) -o $@ $< ../../../lib/tst_kvercmp.c $(CFLAGS) -clean: - @set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i clean ; done +all noltp noltp_check: check_for_unshare + @set -e; if './check_for_unshare' > /dev/null 2>&1; then \ + for i in $(SUBDIRS); do $(MAKE) -C $$i $@; done \ + else echo "system does not support unshare"; true; fi +install: check_for_unshare + @set -e; ln -f check_for_unshare ../../bin/check_for_unshare; \ + if './check_for_unshare' > /dev/null 2>&1; then \ + for i in $(SUBDIRS); do $(MAKE) -C $$i install ; done; \ + chmod ugo+x container_test.sh; \ + ln -f container_test.sh ../../bin/container_test.sh; \ + else echo "system does not support unshare"; true; fi +clean: + @set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i clean ; done + rm -f check_for_unshare diff -Nrup ltp/testcases/kernel/containers/check_for_unshare.c ltp-patched/testcases/kernel/containers/check_for_unshare.c --- ltp/testcases/kernel/containers/check_for_unshare.c 1970-01-01 01:00:00.000000000 +0100 +++ ltp-patched/testcases/kernel/containers/check_for_unshare.c 2007-06-26 04:08:52.000000000 +0200 @@ -0,0 +1,34 @@ +#include <stdio.h> +#include <test.h> + +int kernel_is_too_old(void) { + if (tst_kvercmp(2,6,16) < 0) + return 1; + return 0; +} + +/* + * yeah, to make the makefile coding easier, do_check returns + * 1 if unshare is not supported, 0 if it is + */ +#ifndef SYS_unshare +#ifdef __NR_unshare +int do_check(void) { return kernel_is_too_old(); } +#elif __i386__ +int do_check(void) { return kernel_is_too_old(); } +#elif __ia64__ +int do_check(void) { return kernel_is_too_old(); } +#elif __x86_64__ +int do_check(void) { return kernel_is_too_old(); } +#elif __s390x__ || __s390__ +int do_check(void) { return kernel_is_too_old(); } +#elif __powerpc__ +int do_check(void) { return kernel_is_too_old(); } +#else +int do_check(void) { return 1; } +#endif +#endif + +int main() { + return do_check(); +} diff -Nrup ltp/testcases/kernel/containers/container_test.sh ltp-patched/testcases/kernel/containers/container_test.sh --- ltp/testcases/kernel/containers/container_test.sh 2007-04-26 13:02:50.000000000 +0200 +++ ltp-patched/testcases/kernel/containers/container_test.sh 2007-06-25 20:27:17.000000000 +0200 @@ -10,6 +10,12 @@ # any later version. #check_utsns_enabled +check_for_unshare +if [ $? -eq 1 ]; then + echo "Unshare not supported. Not running container tests" + exit 0 +fi + #if [ $? -eq 0 ]; then echo "Running utsns tests." runutstest.sh |