From 77ee60e343f0c7360436686496b90225783ce5d7 Mon Sep 17 00:00:00 2001 From: huanghua Date: Tue, 17 Oct 2006 10:12:15 +0000 Subject: [PATCH] (1) support very long symlink name; (2) add test case for very long symlink name; --- lustre/mdt/mdt_handler.c | 34 +++++++++++++++++++++++++--------- lustre/mgs/mgs_llog.c | 4 ++-- lustre/tests/replay-single.sh | 3 --- lustre/tests/sanity.sh | 14 +++++++++++++- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index dd54958..4d693b5 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -456,15 +456,34 @@ static int mdt_renew_capa(struct mdt_thread_info *info) static int mdt_getattr(struct mdt_thread_info *info) { - struct mdt_object *obj = info->mti_object; - struct mdt_body *reqbody; - struct mdt_body *repbody; + struct mdt_object *obj = info->mti_object; + struct req_capsule *pill = &info->mti_pill; + struct mdt_body *reqbody; + struct mdt_body *repbody; + mode_t mode; int rc; ENTRY; - reqbody = req_capsule_client_get(&info->mti_pill, &RMF_MDT_BODY); + LASSERT(obj != NULL); + LASSERT(lu_object_assert_exists(&obj->mot_obj.mo_lu)); + + reqbody = req_capsule_client_get(pill, &RMF_MDT_BODY); LASSERT(reqbody); - repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY); + + mode = lu_object_attr(&obj->mot_obj.mo_lu); + if (S_ISLNK(mode) && (reqbody->valid & OBD_MD_LINKNAME) && + (reqbody->eadatasize > info->mti_mdt->mdt_max_mdsize)) { + req_capsule_set_size(pill, &RMF_MDT_MD, RCL_SERVER, + reqbody->eadatasize); + } else { + req_capsule_set_size(pill, &RMF_MDT_MD, RCL_SERVER, + info->mti_mdt->mdt_max_mdsize); + } + rc = req_capsule_pack(pill); + if (rc != 0) + RETURN(err_serious(rc)); + + repbody = req_capsule_server_get(pill, &RMF_MDT_BODY); LASSERT(repbody); repbody->eadatasize = 0; repbody->aclsize = 0; @@ -475,9 +494,6 @@ static int mdt_getattr(struct mdt_thread_info *info) RETURN(rc); } - LASSERT(obj != NULL); - LASSERT(lu_object_assert_exists(&obj->mot_obj.mo_lu)); - if (reqbody->valid & OBD_MD_FLRMTPERM) { rc = mdt_init_ucred(info, reqbody); if (rc) @@ -4141,7 +4157,7 @@ static struct mdt_handler mdt_mds_ops[] = { DEF_MDT_HNDL_F(0, CONNECT, mdt_connect), DEF_MDT_HNDL_F(0, DISCONNECT, mdt_disconnect), DEF_MDT_HNDL_F(0 |HABEO_REFERO, GETSTATUS, mdt_getstatus), -DEF_MDT_HNDL_F(HABEO_CORPUS|HABEO_REFERO, GETATTR, mdt_getattr), +DEF_MDT_HNDL_F(HABEO_CORPUS , GETATTR, mdt_getattr), DEF_MDT_HNDL_F(HABEO_CORPUS|HABEO_REFERO, GETATTR_NAME, mdt_getattr_name), DEF_MDT_HNDL_F(HABEO_CORPUS|MUTABOR, SETXATTR, mdt_setxattr), DEF_MDT_HNDL_F(HABEO_CORPUS, GETXATTR, mdt_getxattr), diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c index 656e7e9..dd18316 100644 --- a/lustre/mgs/mgs_llog.c +++ b/lustre/mgs/mgs_llog.c @@ -1504,8 +1504,8 @@ static int mgs_write_log_osc_to_lov(struct obd_device *obd, struct fs_db *fsdb, int i, rc; ENTRY; - CWARN("adding osc for %s to log %s\n", - mti->mti_svname, logname); + CDEBUG(D_INFO, "adding osc for %s to log %s\n", + mti->mti_svname, logname); if (mgs_log_is_empty(obd, logname)) { /* The first item in the log must be the lov, so we have diff --git a/lustre/tests/replay-single.sh b/lustre/tests/replay-single.sh index a558ffe..2fd59cf 100755 --- a/lustre/tests/replay-single.sh +++ b/lustre/tests/replay-single.sh @@ -17,9 +17,6 @@ init_test_env $@ # bug number: 2766 4176 ALWAYS_EXCEPT="0b 39 $REPLAY_SINGLE_EXCEPT" -# failed in our b_new_cmd due to orphan handling. -#ALWAYS_EXCEPT=" 20b 25 30 31 $ALWAYS_EXCEPT" - # failed in our b_new_cmd due to MGS ALWAYS_EXCEPT=" 52 $ALWAYS_EXCEPT" diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 66af681..49d640d 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -11,7 +11,7 @@ ONLY=${ONLY:-"$*"} ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"42a 42b 42c 42d 45 68"} # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT! -[ "$SLOW" = "no" ] && EXCEPT="$EXCEPT 24o 27m 51b 51c 63 64b 71 77 101" +[ "$SLOW" = "no" ] && EXCEPT="$EXCEPT 24o 27m 51b 51c 63 64b 71 76 77 101" # Tests that fail on uml CPU=`awk '/model/ {print $4}' /proc/cpuinfo` [ "$CPU" = "UML" ] && EXCEPT="$EXCEPT 31d" @@ -548,6 +548,18 @@ test_17d() { } run_test 17d "symlinks: create dangling ========================" +test_17f() { + mkdir -p $DIR/d17f + ln -s 1234567890/2234567890/3234567890/4234567890 $DIR/d17f/111 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890 $DIR/d17f/222 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890 $DIR/d17f/333 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890 $DIR/d17f/444 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890 $DIR/d17f/555 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890/aaaaaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee/ffffffffff/ $DIR/d17f/666 + ls -l $DIR/d17f +} +run_test 17f "symlinks: long and very long symlink name ========================" + test_18() { touch $DIR/f ls $DIR || error -- 1.8.3.1