lustre build system overhaul (LU-1199)

[LU-3408] client-only "make rpms" ldiskfs detection inconsistent Created: 28/May/13  Updated: 16/Sep/13  Resolved: 16/Sep/13

Status: Closed
Project: Lustre
Component/s: None
Affects Version/s: Lustre 2.4.0
Fix Version/s: None

Type: Technical task Priority: Minor
Reporter: Andreas Dilger Assignee: Minh Diep
Resolution: Duplicate Votes: 0
Labels: None
Environment:

patchless client: 2.6.32.26-175.fc12.x86_64


Issue Links:
Related
is related to LU-3954 client-only "make rpms" ldiskfs detec... Closed
Rank (Obsolete): 8425

 Description   

I tried to build a client-only RPM using in the Lustre source tree for patchless kernel 2.6.32.26-175.fc12.x86_64 using the standard:

sh autogen
./configure
make rpms

In previous releases, configure would correctly detect that ldiskfs was not available for the kernel and/or the kernel sources were not available and do a client-only build.

Unfortunately, the 2.4.0 client build died in mid-stream due to inconsistent detection of ldiskfs support. In the top-level configure.ac file it has:

# Overridden by --without-ldiskfs/--with-zfs configure options
AM_CONDITIONAL(LDISKFS_ENABLED, true)

Which sets LDISKFS_ENABLED, but later on in the build it failed in mount_utils.c with:

mount_lustre-mount_utils.o: In function `osd_is_lustre': 
/usr/src/lustre-head/lustre/utils/mount_utils.c:461: undefined reference to `ldiskfs_is_lustre'          
mount_lustre-mount_utils.o: In function `osd_fini':
/usr/src/lustre-head/lustre/utils/mount_utils.c:650: undefined reference to `ldiskfs_fini'          
mount_lustre-mount_utils.o: In function `osd_init':
/usr/src/lustre-head/lustre/utils/mount_utils.c:632: undefined reference to `ldiskfs_init'

This is in

/* Was this device formatted for Lustre */
int osd_is_lustre(char *dev, unsigned *mount_type)
{
        vprint("checking for existing Lustre data: ");

#ifdef HAVE_LDISKFS_OSD
        if (ldiskfs_is_lustre(dev, mount_type)) {
                vprint("found\n");
                return 1;
        }
#endif /* HAVE_LDISKFS_OSD */

Since HAVE_LDISKFS_OSD is set, but mount_utils_ldiskfs.c is not being built. The ldiskfs configure step correctly detects no ldiskfs support for this kernel, and tries to disable ldiskfs and set -disable-server, but this is "lost" in the sub-configure step? The ldiskfs configure shouldn't set -disable-server itself anyway, because it may be a ZFS-only server system.

It would seem better to run the ldiskfs and ZFS configure stages early on in the configure process, then if no backing filesystem support is found, it should automatically set --disable-server for the main Lustre build.



 Comments   
Comment by Christopher Morrone [ 28/May/13 ]

We need to get rid of those static AM_CONDITIONAL declarations all together. Honestly, I suspect that we just forgot that they were there.

We have a dynamic declaration for ldiskfs here:

config/lustre-build-ldiskfs.m4:AM_CONDITIONAL(LDISKFS_ENABLED, test x$with_ldiskfs = xyes)

and one for zfs here:

config/lustre-build-zfs.m4: AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)

Really, we are supposed to call AM_CONDITIONAL only one time for any given variable, so we're doing it wrong. So we should drop the static declaration, then fix up the defaults and ordering to get what you are looking for.

Comment by Jodi Levi (Inactive) [ 16/Sep/13 ]

Duplicate of LU-3954

Generated at Sat Feb 10 01:33:39 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.