Whamcloud - gitweb
Branch HEAD
authorbobijam <bobijam>
Mon, 1 Sep 2008 02:04:34 +0000 (02:04 +0000)
committerbobijam <bobijam>
Mon, 1 Sep 2008 02:04:34 +0000 (02:04 +0000)
b=16570
i=h.huang, robert.read

Make MDS_SETXATTR request replayable.

lustre/mdt/mdt_recovery.c
lustre/tests/replay-single.sh

index 225e573..907d7ae 100644 (file)
@@ -229,7 +229,7 @@ static inline int mdt_last_rcvd_header_write(const struct lu_env *env,
         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,
@@ -241,7 +241,7 @@ static inline int mdt_last_rcvd_header_write(const struct lu_env *env,
         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);
 }
 
@@ -382,18 +382,18 @@ static int mdt_clients_data_init(const struct lu_env *env,
                 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;
@@ -559,7 +559,7 @@ static int mdt_server_data_update(const struct lu_env *env,
 }
 
 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;
 
@@ -822,10 +822,10 @@ static int mdt_last_rcvd_update(struct mdt_thread_info *mti,
         /*
          * 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);
 
@@ -998,7 +998,6 @@ put_last_rcvd:
         return rc;
 }
 
-
 void mdt_fs_cleanup(const struct lu_env *env, struct mdt_device *mdt)
 {
         ENTRY;
@@ -1184,13 +1183,6 @@ static void mdt_reconstruct_setattr(struct mdt_thread_info *mti,
         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);
 
@@ -1201,7 +1193,7 @@ static mdt_reconstructor reconstructors[REINT_MAX] = {
         [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,
index 0ee4936..9664d1a 100755 (executable)
@@ -1345,7 +1345,7 @@ test_57() {
 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"
@@ -1358,20 +1358,40 @@ test_58() {
     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