diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 3c6e6f88521576c81a5283d200f22142f2d2610d..850a66b63d3c80ae5b4609b8a12b102ce08dc4e4 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -31,6 +31,12 @@ Details    : ptlrpcd_check call obd_zombie_impexp_cull and wait request which sh
              handled by ptlrpcd. This produce long age waiting and -ETIMEOUT
              ptlrpc_invalidate_import and as result LASSERT.
 
+Severity   : normal
+Frequency  : only with broken builds/installations
+Bugzilla   : 15779
+Description: do not LBUG if lquota.ko and fsfilt_ldiskfs.ko are of different versions
+Details    : just return an error to a user, put a console error message
+
 Severity   : enhancement
 Bugzilla   : 15741
 Description: Update to RHEL5 kernel-2.6.18-53.1.19.el5.
@@ -121,7 +127,7 @@ Description: fix build on ppc32
 Details    : compile code with -m64 flag produce wrong object file for ppc32.
 
 Severity   : normal
-Bugzilla   : 15774
+Bugzilla   : 15574
 Description: MDS LBUG: ASSERTION(!IS_ERR(dchild))
 Details    : In reconstruct_* functions, LASSERTs on both the data supplied by
              a client, and the data on disk are dangerous and incorrect. Change
@@ -141,6 +147,13 @@ Details    : as planned, when lustre is beyond b1_8, lquota won't support for 32
 	     qunit. That means servers of b1_4 and servers of b1_8 can't be used
 	     together if users want to use quota.
 
+Severity   : normal
+Frequency  : blocks per group is less than blocksize*8 and uninit_groups is enabled
+Bugzilla   : 15932
+Description: ldiskfs error: XXX blocks in bitmap, YYY in gd
+Details    : If blocks per group is less than blocksize*8, set rest of the
+	     bitmap to 1.
+
 -------------------------------------------------------------------------------
 
 
diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
index a96a250cc394339227129d687b4c9b929c0ca7d2..527b8001d453f692bf3119b81df5d82295b7642c 100644
--- a/lustre/autoconf/lustre-core.m4
+++ b/lustre/autoconf/lustre-core.m4
@@ -794,6 +794,19 @@ LB_LINUX_TRY_COMPILE([
 ])
 ])
 
+# LC_SYMVERFILE
+# SLES 9 uses a different name for this file - unsure about vanilla kernels
+# around this version, but it matters for servers only.
+AC_DEFUN([LC_SYMVERFILE],
+         [AC_MSG_CHECKING([name of symverfile])
+          if grep -q Modules.symvers $LINUX/scripts/Makefile.modpost ; then
+              SYMVERFILE=Modules.symvers
+          else
+              SYMVERFILE=Module.symvers
+          fi
+	  AC_MSG_RESULT($SYMVERFILE)
+          AC_SUBST(SYMVERFILE)])
+
 # LC_DQUOTOFF_MUTEX
 # after 2.6.17 dquote use mutex instead if semaphore
 AC_DEFUN([LC_DQUOTOFF_MUTEX],
@@ -1298,6 +1311,9 @@ AC_DEFUN([LC_PROG_LINUX],
           # 2.6.15
           LC_INODE_I_MUTEX
 
+          # SLES 10 (at least)
+          LC_SYMVERFILE
+
           # 2.6.17
           LC_DQUOTOFF_MUTEX
 
diff --git a/lustre/ldlm/ldlm_resource.c b/lustre/ldlm/ldlm_resource.c
index 92d41aac9861e10006d60729cfe449c1a0c9e97d..138743adbe15319b79864eda5587e607b89a6904 100644
--- a/lustre/ldlm/ldlm_resource.c
+++ b/lustre/ldlm/ldlm_resource.c
@@ -326,6 +326,7 @@ ldlm_namespace_new(struct obd_device *obd, char *name,
         strcpy(ns->ns_name, name);
 
         CFS_INIT_LIST_HEAD(&ns->ns_root_list);
+        CFS_INIT_LIST_HEAD(&ns->ns_list_chain);
         ns->ns_refcount = 0;
         ns->ns_client = client;
         spin_lock_init(&ns->ns_hash_lock);
@@ -360,8 +361,8 @@ ldlm_namespace_new(struct obd_device *obd, char *name,
         }
 
         at_init(&ns->ns_at_estimate, ldlm_enqueue_min, 0);
-        ldlm_namespace_register(ns, client);
 
+        ldlm_namespace_register(ns, client);
         RETURN(ns);
 out_proc:
         ldlm_namespace_cleanup(ns, 0);
@@ -554,7 +555,7 @@ void ldlm_namespace_free_prior(struct ldlm_namespace *ns,
                 return;
         }
 
-        /* Remove @ns from list. */
+        /* Make sure that nobody can find this ns in its list. */
         ldlm_namespace_unregister(ns, ns->ns_client);
 
         /* Can fail with -EINTR when force == 0 in which case try harder */
diff --git a/lustre/lvfs/fsfilt_ext3.c b/lustre/lvfs/fsfilt_ext3.c
index d134000e6f2f85a68a95174cc80ba0069fd3b3bc..d0e1f88e8fd7d278016734382be0c13c83109dca 100644
--- a/lustre/lvfs/fsfilt_ext3.c
+++ b/lustre/lvfs/fsfilt_ext3.c
@@ -2085,8 +2085,10 @@ static int fsfilt_ext3_quotainfo(struct lustre_quota_info *lqi, int type,
                 rc = lustre_quota_convert(lqi, type);
                 break;
         default:
-                CERROR("Unsupported admin quota file cmd %d\n", cmd);
-                LBUG();
+                rc = -ENOTSUPP;
+                CERROR("Unsupported admin quota file cmd %d\n"
+                       "Are lquota.ko and fsfilt_ldiskfs.ko modules in sync?\n",
+                       cmd);
                 break;
         }
         RETURN(rc);
diff --git a/lustre/mds/mds_lov.c b/lustre/mds/mds_lov.c
index f377629045709788118bfbe122a3500ed7ffe064..3495f3a5e15ca54f775ceee7d4d90120ea25297e 100644
--- a/lustre/mds/mds_lov.c
+++ b/lustre/mds/mds_lov.c
@@ -140,7 +140,7 @@ void mds_lov_destroy_objids(struct obd_device *obd)
         }
 
         if (mds->mds_lov_objid_filp) {
-                rc = filp_close((struct file *)mds->mds_lov_objid_filp, 0);
+                rc = filp_close((struct file *)mds->mds_lov_objid_filp, NULL);
                 mds->mds_lov_objid_filp = NULL;
                 if (rc)
                         CERROR("%s file won't close, rc=%d\n", LOV_OBJID, rc);
@@ -235,7 +235,7 @@ out:
 int mds_lov_write_objids(struct obd_device *obd)
 {
         struct mds_obd *mds = &obd->u.mds;
-        int i, rc = 0;
+        int i = 0, rc = 0;
         ENTRY;
 
         if (cfs_bitmap_check_empty(mds->mds_lov_page_dirty))
@@ -254,6 +254,7 @@ int mds_lov_write_objids(struct obd_device *obd)
                 if (i == mds->mds_lov_objid_lastpage)
                         size = (mds->mds_lov_objid_lastidx + 1) * sizeof(obd_id);
 
+		CDEBUG(D_INFO,"write %lld - %ld\n", off, size);
                 rc = fsfilt_write_record(obd, mds->mds_lov_objid_filp, data,
                                          size, &off, 0);
                 if (rc < 0)
diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
index 102f06d514e866dbccacc52872f860803a3f6899..83053aeefb010644f3e2ffc48d42d2a48c6d6738 100644
--- a/lustre/obdclass/genops.c
+++ b/lustre/obdclass/genops.c
@@ -622,8 +622,7 @@ void __class_export_put(struct obd_export *exp)
                 list_add(&exp->exp_obd_chain, &obd_zombie_exports);
                 spin_unlock(&obd_zombie_impexp_lock);
 
-                if (obd_zombie_impexp_notify != NULL)
-                        obd_zombie_impexp_notify();
+                obd_zombie_impexp_notify();
         }
 }
 EXPORT_SYMBOL(__class_export_put);
@@ -764,8 +763,7 @@ void class_import_put(struct obd_import *import)
                 list_add(&import->imp_zombie_chain, &obd_zombie_imports);
                 spin_unlock(&obd_zombie_impexp_lock);
 
-                if (obd_zombie_impexp_notify != NULL)
-                        obd_zombie_impexp_notify();
+                obd_zombie_impexp_notify();
         }
 
         EXIT;
diff --git a/lustre/tests/acceptance-small.sh b/lustre/tests/acceptance-small.sh
index 2cab7c9d519c2f45103869c75499799b4532c381..90d96302c54b9d57603cd6a7705a00f3d6f696a8 100755
--- a/lustre/tests/acceptance-small.sh
+++ b/lustre/tests/acceptance-small.sh
@@ -4,8 +4,6 @@
 #set -vx
 set -e
 
-PATH=`dirname $0`/../utils:$PATH
-
 [ -z "$CONFIG" -a "$NAME" ] && CONFIGS=$NAME
 [ "$CONFIGS" ] || CONFIGS="local"  #"local lov"
 [ "$MAX_THREADS" ] || MAX_THREADS=20
@@ -42,7 +40,7 @@ LIBLUSTRETESTS=${LIBLUSTRETESTS:-../liblustre/tests}
 STARTTIME=`date +%s`
 RANTEST=""
 
-LUSTRE=${LUSTRE:-`dirname $0`/..}
+LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
 . $LUSTRE/tests/test-framework.sh
 init_test_env $@
 
diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh
index 256678ce86a27ffa6f77779cb644b383e332750c..9f75d8c2168925a26da190a514557c18cda268ff 100644
--- a/lustre/tests/conf-sanity.sh
+++ b/lustre/tests/conf-sanity.sh
@@ -800,6 +800,7 @@ test_22() {
 	echo Client mount before any osts are in the logs
 	mount_client $MOUNT
 	check_mount && return 41
+	umount_client $MOUNT
 	pass
 
 	echo Client mount with ost in logs, but none running
diff --git a/lustre/tests/replay-dual.sh b/lustre/tests/replay-dual.sh
index ec4190de0e1d0de905fa2c7392d0fb9dda19e7c8..dd087a39717c05b73911770161a56a8a80f4c501 100755
--- a/lustre/tests/replay-dual.sh
+++ b/lustre/tests/replay-dual.sh
@@ -7,7 +7,7 @@ ALWAYS_EXCEPT="15c   $REPLAY_DUAL_EXCEPT"
 
 SAVE_PWD=$PWD
 PTLDEBUG=${PTLDEBUG:--1}
-LUSTRE=${LUSTRE:-`dirname $0`/..}
+LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
 SETUP=${SETUP:-""}
 CLEANUP=${CLEANUP:-""}
 MOUNT_2=${MOUNT_2:-"yes"}
diff --git a/lustre/tests/replay-ost-single.sh b/lustre/tests/replay-ost-single.sh
index 260ec07ef5aa659758d9288ea5b6d442a6b8c6c7..b652b0f216fb045b042e8b7189f3415cce5c4e31 100755
--- a/lustre/tests/replay-ost-single.sh
+++ b/lustre/tests/replay-ost-single.sh
@@ -3,7 +3,7 @@
 set -e
 
 PTLDEBUG=${PTLDEBUG:--1}
-LUSTRE=${LUSTRE:-`dirname $0`/..}
+LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
 SETUP=${SETUP:-""}
 CLEANUP=${CLEANUP:-""}
 . $LUSTRE/tests/test-framework.sh
@@ -97,10 +97,11 @@ run_test 4 "Fail OST during read, with verification"
 
 test_5() {
     [ -z "`which iozone 2> /dev/null`" ] && log "iozone missing" && return
-    FREE=`df -P -h $DIR | tail -n 1 | awk '{ print $3 }'`
-    case $FREE in
-    *T|*G) FREE=1G;;
-    esac
+    FREE=`df -P $DIR | tail -n 1 | awk '{ print $4/2 }'`
+    GB=1048576  # 1048576KB == 1GB
+    if (( FREE > GB )); then
+        FREE=$GB
+    fi
     IOZONE_OPTS="-i 0 -i 1 -i 2 -+d -r 4 -s $FREE"
     iozone $IOZONE_OPTS -f $DIR/$tfile &
     PID=$!
diff --git a/lustre/tests/replay-single.sh b/lustre/tests/replay-single.sh
index c79656cc1a1373a36bcd552d9a706b72016c67a9..2902b8c592d4921eb68f50fc0eb4c28d8545996b 100755
--- a/lustre/tests/replay-single.sh
+++ b/lustre/tests/replay-single.sh
@@ -7,7 +7,7 @@ set -e
 # This test needs to be run on the client
 #
 SAVE_PWD=$PWD
-LUSTRE=${LUSTRE:-`dirname $0`/..}
+LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
 SETUP=${SETUP:-}
 CLEANUP=${CLEANUP:-}
 . $LUSTRE/tests/test-framework.sh
diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh
index cfc8eba5105b5ef705e635fa3c7855b3e1e8fccd..cd09890d6f7035a379331fafbdba0f8d3a1b6f31 100644
--- a/lustre/tests/sanity.sh
+++ b/lustre/tests/sanity.sh
@@ -23,8 +23,8 @@ case `uname -r` in
 *) error "unsupported kernel" ;;
 esac
 
-SRCDIR=`dirname $0`
-export PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH:/sbin
+SRCDIR=$(cd $(dirname $0); echo $PWD)
+export PATH=$PATH:/sbin
 
 TMP=${TMP:-/tmp}
 
@@ -63,7 +63,7 @@ SAVE_PWD=$PWD
 CLEANUP=${CLEANUP:-:}
 SETUP=${SETUP:-:}
 TRACE=${TRACE:-""}
-LUSTRE=${LUSTRE:-`dirname $0`/..}
+LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
 . $LUSTRE/tests/test-framework.sh
 init_test_env $@
 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
@@ -5002,7 +5002,7 @@ test_129() {
 	echo 0 >$ldiskfs_prefix/$proc_file
 	rm -rf $DIR/$tdir
 }
-run_test 129 "test directory size limit ========================"
+# run_test 129 "test directory size limit ========================"
 
 TMPDIR=$OLDTMPDIR
 TMP=$OLDTMP
diff --git a/lustre/tests/sanityN.sh b/lustre/tests/sanityN.sh
index 10b570f47381ee0a349e6551bfd73157fabd7870..627ef82c0e22fb5b07f307cc1838906b78807af5 100644
--- a/lustre/tests/sanityN.sh
+++ b/lustre/tests/sanityN.sh
@@ -203,17 +203,19 @@ test_10a() {
 run_test 10a "write of file with sub-page size on multiple mounts "
 
 test_10b() {
-	yes "R" | dd of=$DIR1/f10b bs=3k count=1 || error "dd $DIR1"
+	# create a seed file
+	yes "R" | head -c 4000 >$TMP/f10b-seed
+	dd if=$TMP/f10b-seed of=$DIR1/f10b bs=3k count=1 || error "dd $DIR1"
 
 	truncate $DIR1/f10b 4096 || error "truncate 4096"
 
 	dd if=$DIR2/f10b of=$TMP/f10b-lustre bs=4k count=1 || error "dd $DIR2"
 
 	# create a test file locally to compare
-	yes "R" | dd of=$TMP/f10b bs=3k count=1 || error "dd random"
+	dd if=$TMP/f10b-seed of=$TMP/f10b bs=3k count=1 || error "dd random"
 	truncate $TMP/f10b 4096 || error "truncate 4096"
 	cmp $TMP/f10b $TMP/f10b-lustre || error "file miscompare"
-	rm $TMP/f10b $TMP/f10b-lustre
+	rm $TMP/f10b $TMP/f10b-lustre $TMP/f10b-seed
 }
 run_test 10b "write of file with sub-page size on multiple mounts "
 
diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh
index 1808f6fb797a5c1b8e5ccacb1148129480c4291b..4cab5544ec0839f27ef03a20606ea199b4acd08a 100644
--- a/lustre/tests/test-framework.sh
+++ b/lustre/tests/test-framework.sh
@@ -72,8 +72,12 @@ init_test_env() {
     export TMP=${TMP:-$ROOT/tmp}
     export TESTSUITELOG=${TMP}/${TESTSUITE}.log
     export HOSTNAME=${HOSTNAME:-`hostname`}
-
-    export PATH=:$PATH:$LUSTRE/utils:$LUSTRE/tests
+    if ! echo $PATH | grep -q $LUSTRE/utils; then
+	export PATH=$PATH:$LUSTRE/utils
+    fi
+    if ! echo $PATH | grep -q $LUSTRE/test; then
+	export PATH=$PATH:$LUSTRE/tests
+    fi
     export LCTL=${LCTL:-"$LUSTRE/utils/lctl"}
     export LFS=${LFS:-"$LUSTRE/utils/lfs"}
     [ ! -f "$LCTL" ] && export LCTL=$(which lctl) 
@@ -89,6 +93,7 @@ init_test_env() {
     export LPROC=/proc/fs/lustre
     export DIR2
     export AT_MAX_PATH
+    export SAVE_PWD=${SAVE_PWD:-$LUSTRE/tests}
 
     if [ "$ACCEPTOR_PORT" ]; then
         export PORT_OPT="--port $ACCEPTOR_PORT"
@@ -263,16 +268,16 @@ mount_facet() {
     local dev=${facet}_dev
     local opt=${facet}_opt
     echo "Starting ${facet}: ${!opt} $@ ${!dev} ${MOUNT%/*}/${facet}"
+        do_facet ${facet} "lctl set_param debug=$PTLDEBUG; \
+            lctl set_param subsystem_debug=${SUBSYSTEM# }; \
+            lctl set_param debug_mb=${DEBUG_SIZE}; \
+            sync"
+
     do_facet ${facet} mount -t lustre ${!opt} $@ ${!dev} ${MOUNT%/*}/${facet}     
     RC=${PIPESTATUS[0]}
     if [ $RC -ne 0 ]; then
         echo "mount -t lustre $@ ${!dev} ${MOUNT%/*}/${facet}"
         echo "Start of ${!dev} on ${facet} failed ${RC}"
-    else 
-        do_facet ${facet} "lctl set_param debug=$PTLDEBUG; \
-            lctl set_param subsystem_debug=${SUBSYSTEM# }; \
-            lctl set_param debug_mb=${DEBUG_SIZE}; \
-            sync"
     fi
     return $RC
 }
@@ -332,11 +337,12 @@ zconf_mount() {
 
     echo "Starting client: $client: $OPTIONS $device $mnt" 
     do_node $client mkdir -p $mnt
-    do_node $client mount -t lustre $OPTIONS $device $mnt || return 1
-
     do_node $client "lctl set_param debug=$PTLDEBUG;
         lctl set_param subsystem_debug=${SUBSYSTEM# };
         lctl set_param debug_mb=${DEBUG_SIZE}"
+
+    do_node $client mount -t lustre $OPTIONS $device $mnt || return 1
+
     [ -d /r ] && $LCTL modules > /r/tmp/ogdb-$HOSTNAME
     return 0
 }
@@ -759,7 +765,7 @@ stopall() {
 
     if [ -n "$CLIENTS" ]; then
             zconf_umount_clients $CLIENTS $MOUNT "$*" || true
-            zconf_umount_clients $CLIENTS $MOUNT2 "$*" || true
+            [ -n "$MOUNT2" ] && zconf_umount_clients $CLIENTS $MOUNT2 "$*" || true
     fi
 
     [ "$CLIENTONLY" ] && return
@@ -1284,6 +1290,7 @@ run_one() {
     export TESTNAME=test_$testnum
     test_${testnum} || error "test_$testnum failed with $?"
     #check_mds
+    cd $SAVE_PWD
     reset_fail_loc
     check_grant ${testnum} || error "check_grant $testnum failed with $?"
     [ -f $CATASTROPHE ] && [ `cat $CATASTROPHE` -ne 0 ] && \
@@ -1294,7 +1301,6 @@ run_one() {
     unset TESTNAME
     unset tdir
     umask $SAVE_UMASK
-    cd $SAVE_PWD
     $CLEANUP
 }
 
diff --git a/lustre/utils/mkfs_lustre.c b/lustre/utils/mkfs_lustre.c
index d872ecf6363503d83979676a6fa89ae1cb424532..24163f48da5a36190d264dfd1fbcf3def02db8bc 100644
--- a/lustre/utils/mkfs_lustre.c
+++ b/lustre/utils/mkfs_lustre.c
@@ -1204,12 +1204,6 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop,
                                 return 1;
                         rc = add_param(mop->mo_ldd.ldd_params, PARAM_FAILNODE,
                                        nids, 0);
-                        /* Combo needs to add MDT failnodes as MGS failnodes
-                           as well */
-                        if (!rc && IS_MGS(&mop->mo_ldd)) {
-                                rc = add_param(mop->mo_ldd.ldd_params,
-                                               PARAM_MGSNODE, nids, 0);
-                        }
                         free(nids);
                         if (rc)
                                 return rc;