Whamcloud - gitweb
(1) support very long symlink name;
authorhuanghua <huanghua>
Tue, 17 Oct 2006 10:12:15 +0000 (10:12 +0000)
committerhuanghua <huanghua>
Tue, 17 Oct 2006 10:12:15 +0000 (10:12 +0000)
(2) add test case for very long symlink name;

lustre/mdt/mdt_handler.c
lustre/mgs/mgs_llog.c
lustre/tests/replay-single.sh
lustre/tests/sanity.sh

index dd54958..4d693b5 100644 (file)
@@ -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),
index 656e7e9..dd18316 100644 (file)
@@ -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
index a558ffe..2fd59cf 100755 (executable)
@@ -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"
 
index 66af681..49d640d 100644 (file)
@@ -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