Skip to content
This repository has been archived by the owner on Feb 26, 2020. It is now read-only.

Debian with 2.6.26 : Compilation fails #14

Closed
davromaniak opened this issue Jun 9, 2010 · 5 comments
Closed

Debian with 2.6.26 : Compilation fails #14

davromaniak opened this issue Jun 9, 2010 · 5 comments

Comments

@davromaniak
Copy link

I tried to compile spl under the regular debian stable kernel (on a 64 bit server).

Here are the results :

./configure --with-linux=/usr/src/linux-headers-2.6.26-2-common/ --with-linux-obj=/usr/src/linux-headers-2.6.26-2-amd64/ : Ok, no problems.
make : it fails

splzfs:~/spl-0.4.9# make
make  all-recursive
make[1]: Entering directory `/root/spl-0.4.9'
Making all in lib
make[2]: Entering directory `/root/spl-0.4.9/lib'
/bin/sh ../libtool  --tag=CC --silent  --mode=compile gcc -DHAVE_CONFIG_H -include ../spl_config.h    -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 -MT list.lo -MD -MP -MF .deps/list.Tpo -c -o list.lo list.c
mv -f .deps/list.Tpo .deps/list.Plo
/bin/sh ../libtool  --tag=CC --silent  --mode=link gcc -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2   -o libcommon.la  list.lo  
make[2]: Leaving directory `/root/spl-0.4.9/lib'
Making all in cmd
make[2]: Entering directory `/root/spl-0.4.9/cmd'
gcc -DHAVE_CONFIG_H -include ../spl_config.h -I../lib    -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 -MT spl.o -MD -MP -MF .deps/spl.Tpo -c -o spl.o spl.c
mv -f .deps/spl.Tpo .deps/spl.Po
/bin/sh ../libtool  --tag=CC --silent  --mode=link gcc -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2   -o spl spl.o  
gcc -DHAVE_CONFIG_H -include ../spl_config.h -I../lib    -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 -MT splat.o -MD -MP -MF .deps/splat.Tpo -c -o splat.o splat.c
mv -f .deps/splat.Tpo .deps/splat.Po
/bin/sh ../libtool  --tag=CC --silent  --mode=link gcc -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 ../lib/libcommon.la  -o splat splat.o  
make[2]: Leaving directory `/root/spl-0.4.9/cmd'
Making all in scripts
make[2]: Entering directory `/root/spl-0.4.9/scripts'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/root/spl-0.4.9/scripts'
Making all in module
make[2]: Entering directory `/root/spl-0.4.9/module'
make -C /usr/src/linux-headers-2.6.26-2-amd64/ SUBDIRS=`pwd`  O=/usr/src/linux-headers-2.6.26-2-amd64/ modules
make[3]: Entering directory `/usr/src/linux-headers-2.6.26-2-amd64'
  CC [M]  /root/spl-0.4.9/module/spl/spl-debug.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-proc.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-kmem.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-thread.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-taskq.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-rwlock.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-vnode.o
/root/spl-0.4.9/module/spl/spl-vnode.c: In function ‘vn_set_pwd’:
/root/spl-0.4.9/module/spl/spl-vnode.c:669: error: implicit declaration of function ‘user_path_dir’
/root/spl-0.4.9/module/spl/spl-vnode.c:673: error: implicit declaration of function ‘inode_permission’
/root/spl-0.4.9/module/spl/spl-vnode.c:673: error: ‘MAY_ACCESS’ undeclared (first use in this function)
/root/spl-0.4.9/module/spl/spl-vnode.c:673: error: (Each undeclared identifier is reported only once
/root/spl-0.4.9/module/spl/spl-vnode.c:673: error: for each function it appears in.)
make[6]: *** [/root/spl-0.4.9/module/spl/spl-vnode.o] Error 1
make[5]: *** [/root/spl-0.4.9/module/spl] Error 2
make[4]: *** [_module_/root/spl-0.4.9/module] Error 2
make[3]: *** [sub-make] Error 2
make[3]: Leaving directory `/usr/src/linux-headers-2.6.26-2-amd64'
make[2]: *** [modules] Error 2
make[2]: Leaving directory `/root/spl-0.4.9/module'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/spl-0.4.9'
make: *** [all] Error 2

Apparently, the 2.6.26 kernel doesn't have functions which are required to compile and use the SPL.

I think this problem cannot be resolved by patching the spl, I think the "only" solution is to use the backport kernel, which is reported in the issue #10

What are your thoughts about it ?

@behlendorf
Copy link
Contributor

Actually, it looks to me like an flaw in the autoconf tests. Can you #undef HAVE_2ARGS_SET_FS_PWD in spl_config.h and try the build again.

@davromaniak
Copy link
Author

I launched the ./configure, I edited the spl_config.h file and relaunched the make.

And now I have a new error :

sql:~/spl-0.4.9# make
make  all-recursive
make[1]: Entering directory `/root/spl-0.4.9'
Making all in lib
make[2]: Entering directory `/root/spl-0.4.9/lib'
/bin/sh ../libtool  --tag=CC --silent  --mode=compile gcc -DHAVE_CONFIG_H -include ../spl_config.h    -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 -MT list.lo -MD -MP -MF .deps/list.Tpo -c -o list.lo list.c
mv -f .deps/list.Tpo .deps/list.Plo
/bin/sh ../libtool  --tag=CC --silent  --mode=link gcc -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2   -o libcommon.la  list.lo  
make[2]: Leaving directory `/root/spl-0.4.9/lib'
Making all in cmd
make[2]: Entering directory `/root/spl-0.4.9/cmd'
gcc -DHAVE_CONFIG_H -include ../spl_config.h -I../lib    -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 -MT spl.o -MD -MP -MF .deps/spl.Tpo -c -o spl.o spl.c
mv -f .deps/spl.Tpo .deps/spl.Po
/bin/sh ../libtool  --tag=CC --silent  --mode=link gcc -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2   -o spl spl.o  
gcc -DHAVE_CONFIG_H -include ../spl_config.h -I../lib    -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 -MT splat.o -MD -MP -MF .deps/splat.Tpo -c -o splat.o splat.c
mv -f .deps/splat.Tpo .deps/splat.Po
/bin/sh ../libtool  --tag=CC --silent  --mode=link gcc -Wall -Wstrict-prototypes -Werror -Wshadow -D__USE_LARGEFILE64 -g -O2 ../lib/libcommon.la  -o splat splat.o  
make[2]: Leaving directory `/root/spl-0.4.9/cmd'
Making all in scripts
make[2]: Entering directory `/root/spl-0.4.9/scripts'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/root/spl-0.4.9/scripts'
Making all in module
make[2]: Entering directory `/root/spl-0.4.9/module'
make -C /usr/src/linux-headers-2.6.26-2-amd64/ SUBDIRS=`pwd`  O=/usr/src/linux-headers-2.6.26-2-amd64/ modules
make[3]: Entering directory `/usr/src/linux-headers-2.6.26-2-amd64'
  CC [M]  /root/spl-0.4.9/module/spl/spl-debug.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-proc.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-kmem.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-thread.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-taskq.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-rwlock.o
  CC [M]  /root/spl-0.4.9/module/spl/spl-vnode.o
/root/spl-0.4.9/module/spl/spl-vnode.c:629: error: conflicting types for ‘set_fs_pwd’
include/linux/fs_struct.h:24: error: previous declaration of ‘set_fs_pwd’ was here
/root/spl-0.4.9/module/spl/spl-vnode.c: In function ‘set_fs_pwd’:
/root/spl-0.4.9/module/spl/spl-vnode.c:634: error: incompatible types in assignment
/root/spl-0.4.9/module/spl/spl-vnode.c:635: error: ‘struct fs_struct’ has no member named ‘pwdmnt’
/root/spl-0.4.9/module/spl/spl-vnode.c:636: error: ‘struct fs_struct’ has no member named ‘pwdmnt’
/root/spl-0.4.9/module/spl/spl-vnode.c:637: error: incompatible types in assignment
make[6]: *** [/root/spl-0.4.9/module/spl/spl-vnode.o] Error 1
make[5]: *** [/root/spl-0.4.9/module/spl] Error 2
make[4]: *** [_module_/root/spl-0.4.9/module] Error 2
make[3]: *** [sub-make] Error 2
make[3]: Leaving directory `/usr/src/linux-headers-2.6.26-2-amd64'
make[2]: *** [modules] Error 2
make[2]: Leaving directory `/root/spl-0.4.9/module'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/spl-0.4.9'
make: *** [all] Error 2

Thanks.

@behlendorf
Copy link
Contributor

Trying this under Lenny which does things just a little bit differently than the distros I'd tried exposed quite a few rough edges. I've fixed the following issue and now everything builds clean for me at least under a stock Lenny install. Please try it.

Check sourcelink is set before passing (8fd4e3a)
Use $target_cpu instead of arch (e2d28a3)
Add configure check for user_path_dir() (7119bf7)

@davromaniak
Copy link
Author

Hi.

Sorry for the delay, I was very busy.

So the 3 patches are working.

I've tried on 32 and 64 bits machines.

And no problems, all is working well, the "splat -a" is not returning any problems.

I'm testing the ZFS now.

Thanks.

@davromaniak
Copy link
Author

During the make install I see a little issue :

splzfs32:~/spl-0.4.9# make install
Making install in lib
make[1]: Entering directory `/root/spl-0.4.9/lib'
make[2]: Entering directory `/root/spl-0.4.9/lib'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/spl-0.4.9/lib'
make[1]: Leaving directory `/root/spl-0.4.9/lib'
Making install in cmd
make[1]: Entering directory `/root/spl-0.4.9/cmd'
make[2]: Entering directory `/root/spl-0.4.9/cmd'
test -z "/usr/local/sbin" || /bin/mkdir -p "/usr/local/sbin"
  /bin/sh ../libtool --silent  --mode=install /usr/bin/install -c spl splat '/usr/local/sbin'
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/spl-0.4.9/cmd'
make[1]: Leaving directory `/root/spl-0.4.9/cmd'
Making install in scripts
make[1]: Entering directory `/root/spl-0.4.9/scripts'
make[2]: Entering directory `/root/spl-0.4.9/scripts'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/spl-0.4.9/scripts'
make[1]: Leaving directory `/root/spl-0.4.9/scripts'
Making install in module
make[1]: Entering directory `/root/spl-0.4.9/module'
make -C /usr/src/linux-headers-2.6.26-2-686/ SUBDIRS=`pwd` \
        INSTALL_MOD_PATH= \
        INSTALL_MOD_DIR=addon/spl modules_install
make[2]: Entering directory `/usr/src/linux-headers-2.6.26-2-686'
  INSTALL /root/spl-0.4.9/module/spl/spl.ko
  INSTALL /root/spl-0.4.9/module/splat/splat.ko
  DEPMOD  2.6.26-2-686
make[2]: Leaving directory `/usr/src/linux-headers-2.6.26-2-686'
find /lib/modules/ -name 'modules.*' | xargs rm -f
make[1]: Leaving directory `/root/spl-0.4.9/module'
Making install in include
make[1]: Entering directory `/root/spl-0.4.9/include'
make[2]: Entering directory `/root/spl-0.4.9/include'
make[2]: Nothing to be done for `install-exec-am'.
destname=spl-0.4.9/2.6.26-2-686; \
    instdest=//usr/local/src/$destname; \
    instfiles=`find . -name '*.h'`; \
        for instfile in $instfiles; do \
        /usr/bin/install -c -D $instfile $instdest/$instfile; \
        done
make[2]: Leaving directory `/root/spl-0.4.9/include'
make[1]: Leaving directory `/root/spl-0.4.9/include'
make[1]: Entering directory `/root/spl-0.4.9'
make[2]: Entering directory `/root/spl-0.4.9'
make[2]: Nothing to be done for `install-exec-am'.
destname=spl-0.4.9/2.6.26-2-686; \
    instdest=//usr/local/src/$destname; \
    echo "0.4.9" >$instdest/spl.release; \
    for instfile in spl_config.h module/NONE; do \
        /usr/bin/install -c -D $instfile $instdest/$instfile; \
    done
/usr/bin/install: cannot stat `module/NONE': No such file or directory
make[2]: *** [install-data-local] Error 1
make[2]: Leaving directory `/root/spl-0.4.9'
make[1]: *** [install-am] Error 2
make[1]: Leaving directory `/root/spl-0.4.9'
make: *** [install-recursive] Error 1
splzfs32:~/spl-0.4.9# 

It's also on 64 bits.

And when I try to compile ZFS, it fails because the module/NONE file is not present.

I'm creating it by hand to continue testing ZFS.

Thanks.

This issue was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants