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;
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)
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),
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"
}
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