diff --git a/lustre/mds/mds_fs.c b/lustre/mds/mds_fs.c
index e32ba3fcc8e49c83c35a80e52c457dc01e0ebd9d..38654a5d1bd4b0a3c94efe60ff55fc322456d63a 100644
--- a/lustre/mds/mds_fs.c
+++ b/lustre/mds/mds_fs.c
@@ -167,6 +167,12 @@ int mds_client_free(struct obd_export *exp, int clear_client)
                 LBUG();
         }
 
+
+        /* Make sure the server's last_transno is up to date. Do this
+         * after the client is freed so we know all the client's
+         * transactions have been committed. */
+        mds_update_server_data(exp->exp_obd, 1);
+
  free_and_out:
         OBD_FREE(med->med_mcd, sizeof(*med->med_mcd));
 
diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c
index 8fe771e65b39d02eaeba049f1760f91404f69f56..b464c7b106e0bada1c5449911112bbe58b2ef999 100644
--- a/lustre/obdfilter/filter.c
+++ b/lustre/obdfilter/filter.c
@@ -263,6 +263,10 @@ static int filter_client_free(struct obd_export *exp, int flags)
         push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
         rc = fsfilt_write_record(obd, filter->fo_rcvd_filp, &zero_fcd,
                                  sizeof(zero_fcd), &off, 1);
+        if (rc == 0)
+                /* update server's transno */
+                filter_update_server_data(obd, filter->fo_rcvd_filp,
+                                          filter->fo_fsd, 1);
         pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
 
         CDEBUG(rc == 0 ? D_INFO : D_ERROR,
diff --git a/lustre/tests/replay-single.sh b/lustre/tests/replay-single.sh
index 2a6cddb3036e775a16d70a8b34f2fa404960e068..271b242293ef9b3fe123372ca9f82cff7ac6bcc4 100755
--- a/lustre/tests/replay-single.sh
+++ b/lustre/tests/replay-single.sh
@@ -956,6 +956,27 @@ test_47() {
 }
 run_test 47 "MDS->OSC failure during precreate cleanup (2824)"
 
+
+test_48() {
+    createmany -o $DIR/${tfile}- 100
+    $CHECKSTAT $DIR/${tfile}-99 || return 1
+    mds_evict_client
+    df $MOUNT || df $MOUNT || return 2
+    sleep 1
+    $CHECKSTAT $DIR/${tfile}-99 || return 3
+
+    dmesg -c >/dev/null
+    replay_barrier mds1
+    fail mds1
+    unlinkmany $DIR/${tfile}- 100 || return 4
+    if dmesg | grep "back in time"; then 
+	echo "server went back in time!"
+	return 5
+    fi
+    return 0
+}
+run_test 48 "Don't lose transno when client is evicted (2525)"
+
 equals_msg test complete, cleaning up
 $CLEANUP