if (IS_ERR(th))
RETURN(PTR_ERR(th));
- mti->mti_off = 0;
+ mti->mti_off = 0;
lsd_cpu_to_le(&mdt->mdt_lsd, &mti->mti_lsd);
rc = mdt_record_write(env, mdt->mdt_last_rcvd,
CDEBUG(D_INFO, "write last_rcvd header rc = %d:\n"
"uuid = %s\nlast_transno = "LPU64"\n",
rc, mdt->mdt_lsd.lsd_uuid, mdt->mdt_lsd.lsd_last_transno);
-
+
RETURN(rc);
}
if (IS_ERR(exp)) {
if (PTR_ERR(exp) == -EALREADY) {
/* export already exists, zero out this one */
- lcd->lcd_uuid[0] = '\0';
+ lcd->lcd_uuid[0] = '\0';
} else
GOTO(err_client, rc = PTR_ERR(exp));
} else {
- struct mdt_thread_info *mti;
+ struct mdt_thread_info *mti;
mti = lu_context_key_get(&env->le_ctx, &mdt_thread_key);
LASSERT(mti != NULL);
mti->mti_exp = exp;
exp->exp_mdt_data.med_lcd = lcd;
rc = mdt_client_add(env, mdt, cl_idx);
/* can't fail existing */
- LASSERTF(rc == 0, "rc = %d\n", rc);
+ LASSERTF(rc == 0, "rc = %d\n", rc);
lcd = NULL;
spin_lock(&exp->exp_lock);
exp->exp_connecting = 0;
}
void mdt_cb_new_client(const struct mdt_device *mdt, __u64 transno,
- void *data, int err)
+ void *data, int err)
{
struct obd_device *obd = mdt->mdt_md_dev.md_lu_dev.ld_obd;
/*
* When we store zero transno in lcd we can lost last transno value
* because lcd contains 0, but lsd is not yet written
- * The server data should be updated also if the latest
+ * The server data should be updated also if the latest
* transno is rewritten by zero. See the bug 11125 for details.
*/
- if (mti->mti_transno == 0 &&
+ if (mti->mti_transno == 0 &&
*transno_p == mdt->mdt_last_transno)
mdt_server_data_update(mti->mti_env, mdt);
return rc;
}
-
void mdt_fs_cleanup(const struct lu_env *env, struct mdt_device *mdt)
{
ENTRY;
mdt_object_put(mti->mti_env, obj);
}
-static void mdt_reconstruct_setxattr(struct mdt_thread_info *mti,
- struct mdt_lock_handle *lhc)
-{
- /* reply nothing */
- req_capsule_shrink(mti->mti_pill, &RMF_EADATA, 0, RCL_SERVER);
-}
-
typedef void (*mdt_reconstructor)(struct mdt_thread_info *mti,
struct mdt_lock_handle *lhc);
[REINT_UNLINK] = mdt_reconstruct_generic,
[REINT_RENAME] = mdt_reconstruct_generic,
[REINT_OPEN] = mdt_reconstruct_open,
- [REINT_SETXATTR] = mdt_reconstruct_setxattr
+ [REINT_SETXATTR] = mdt_reconstruct_generic
};
void mdt_reconstruct(struct mdt_thread_info *mti,
run_test 57 "test recovery from llog for setattr op"
#recovery many mds-ost setattr from llog
-test_58() {
+test_58a() {
mkdir -p $DIR/$tdir
#define OBD_FAIL_MDS_OST_SETATTR 0x12c
do_facet $SINGLEMDS "lctl set_param fail_loc=0x8000012c"
unlinkmany $DIR/$tdir/$tfile-%d 2500
rmdir $DIR/$tdir
}
-run_test 58 "test recovery from llog for setattr op (test llog_gen_rec)"
+run_test 58a "test recovery from llog for setattr op (test llog_gen_rec)"
-test_58a() {
+test_58b() {
+ mount_client $MOUNT2
mkdir -p $DIR/$tdir
touch $DIR/$tdir/$tfile
replay_barrier $SINGLEMDS
setfattr -n trusted.foo -v bar $DIR/$tdir/$tfile
fail $SINGLEMDS
- VAL=`getfattr --absolute-names --only-value -n trusted.foo $DIR/$tdir/$tfile`
+ VAL=`getfattr --absolute-names --only-value -n trusted.foo $MOUNT2/$tdir/$tfile`
[ x$VAL = x"bar" ] || return 1
rm -f $DIR/$tdir/$tfile
rmdir $DIR/$tdir
-}
-run_test 58a "test replay of setxattr op"
+ zconf_umount `hostname` $MOUNT2
+}
+run_test 58b "test replay of setxattr op"
+
+test_58c() { # bug 16570
+ mount_client $MOUNT2
+ mkdir -p $DIR/$tdir
+ touch $DIR/$tdir/$tfile
+ drop_request "setfattr -n trusted.foo -v bar $DIR/$tdir/$tfile" || \
+ return 1
+ VAL=`getfattr --absolute-names --only-value -n trusted.foo $MOUNT2/$tdir/$tfile`
+ [ x$VAL = x"bar" ] || return 2
+ drop_reint_reply "setfattr -n trusted.foo1 -v bar1 $DIR/$tdir/$tfile" || \
+ return 3
+ VAL=`getfattr --absolute-names --only-value -n trusted.foo1 $MOUNT2/$tdir/$tfile`
+ [ x$VAL = x"bar1" ] || return 4
+ rm -f $DIR/$tdir/$tfile
+ rmdir $DIR/$tdir
+ zconf_umount `hostname` $MOUNT2
+}
+run_test 58c "resend/reconstruct setxattr op"
# log_commit_thread vs filter_destroy race used to lead to import use after free
# bug 11658