diff --git a/lustre/obdclass/llog_obd.c b/lustre/obdclass/llog_obd.c index 85086708aea7711b9c0851266301abaa9f9c9d82..f8c875b005644af4d5b387377c32da750842600f 100644 --- a/lustre/obdclass/llog_obd.c +++ b/lustre/obdclass/llog_obd.c @@ -330,14 +330,16 @@ int llog_cat_initialize(struct obd_device *obd, struct obd_llogs *llogs, int count, struct obd_uuid *uuid) { char name[32] = CATLIST; - struct llog_catid *idarray; + struct llog_catid *idarray = NULL; int size = sizeof(*idarray) * count; int rc; ENTRY; - OBD_ALLOC(idarray, size); - if (!idarray) - RETURN(-ENOMEM); + if (count) { + OBD_VMALLOC(idarray, size); + if (!idarray) + RETURN(-ENOMEM); + } rc = llog_get_cat_list(obd, obd, name, count, idarray); if (rc) { @@ -358,7 +360,8 @@ int llog_cat_initialize(struct obd_device *obd, struct obd_llogs *llogs, } out: - OBD_FREE(idarray, size); + if (idarray) + OBD_VFREE(idarray, size); RETURN(rc); } EXPORT_SYMBOL(llog_cat_initialize); diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index 2c628cfc15bc31361ff62687bbc71eb26051d71e..21548e5e83ad53fa07268a5e6647d18bc3c00673 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -1144,6 +1144,29 @@ test_32b() { } run_test 32b "Upgrade from 1.4 with writeconf" +test_33() { # bug 12333 + local FSNAME2=test1234 + local fs2mds_HOST=$mds_HOST + local fs2ost_HOST=$ost_HOST + local fs2mdsdev=${MDSDEV}_2 + local fs2ostdev=$(ostdevname 1)_2 + add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10 + add fs2ost $OST_MKFS_OPTS --fsname=${FSNAME2} --index=8191 --mgsnode=`hostname`@tcp --reformat $fs2ostdev || exit 10 + + start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS + start fs2ost $fs2ostdev $OST_MOUNT_OPTS + mkdir -p $MOUNT2 + mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || return 1 + echo "ok." + + umount -d $MOUNT2 + stop fs2ost -f + stop fs2mds -f + rm -rf $MOUNT2 $fs2mdsdev $fs2ostdev + cleanup_nocli || return 6 +} +run_test 33 "Mount ost with a large index number" + umount_client $MOUNT cleanup_nocli cleanup_krb5_env