Whamcloud - gitweb
LU-1252 recovery: don't always swap nidtbl entries
authorJinshan Xiong <jinshan.xiong@whamcloud.com>
Fri, 30 Mar 2012 00:31:40 +0000 (17:31 -0700)
committerOleg Drokin <green@whamcloud.com>
Fri, 1 Jun 2012 13:16:14 +0000 (09:16 -0400)
Swap nidtbl entries only when server and client are using different
byte order.

Signed-off-by: Jinshan Xiong <jinshan.xiong@whamcloud.com>
Change-Id: I58ebe98e81040ec187f4ecd75020b7b84c7d8904
Reviewed-on: http://review.whamcloud.com/2410
Tested-by: Hudson
Reviewed-by: Johann Lombardi <johann@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/mgc/mgc_request.c
lustre/mgs/mgs_nids.c

index 86df5ee..9beed29 100644 (file)
@@ -1231,7 +1231,7 @@ enum {
 static int mgc_apply_recover_logs(struct obd_device *mgc,
                                   struct config_llog_data *cld,
                                   __u64 max_version,
-                                  void *data, int datalen)
+                                  void *data, int datalen, int need_swab)
 {
         struct config_llog_instance *cfg = &cld->cld_cfg;
         struct lustre_sb_info       *lsi = s2lsi(cfg->cfg_sb);
@@ -1292,7 +1292,8 @@ static int mgc_apply_recover_logs(struct obd_device *mgc,
                 if (datalen < entry_len) /* must have entry_len at least */
                         break;
 
-                lustre_swab_mgs_nidtbl_entry(entry);
+                if (need_swab)
+                        lustre_swab_mgs_nidtbl_entry(entry);
                 LASSERT(entry->mne_length <= CFS_PAGE_SIZE);
                 if (entry->mne_length < entry_len)
                         break;
@@ -1509,7 +1510,8 @@ again:
 
                 ptr = cfs_kmap(pages[i]);
                 rc2 = mgc_apply_recover_logs(obd, cld, res->mcr_offset, ptr,
-                                             min_t(int, ealen, CFS_PAGE_SIZE));
+                                             min_t(int, ealen, CFS_PAGE_SIZE),
+                                             ptlrpc_rep_need_swab(req));
                 cfs_kunmap(pages[i]);
                 if (rc2 < 0) {
                         CWARN("Process recover log %s error %d\n",
index 794ee9e..5399e47 100644 (file)
@@ -146,10 +146,7 @@ static int mgs_nidtbl_read(struct obd_device *unused, struct mgs_nidtbl *tbl,
 
                         /* check if we need to consume remaining bytes. */
                         if (last_in_unit != NULL && bytes_in_unit) {
-                                /* entry has been swapped. */
-                                __swab32s(&last_in_unit->mne_length);
                                 last_in_unit->mne_length += bytes_in_unit;
-                                __swab32s(&last_in_unit->mne_length);
                                 rc  += bytes_in_unit;
                                 buf += bytes_in_unit;
                                 last_in_unit = NULL;
@@ -195,7 +192,6 @@ static int mgs_nidtbl_read(struct obd_device *unused, struct mgs_nidtbl *tbl,
                 entry->mne_nid_count = mti->mti_nid_count;
                 memcpy(entry->u.nids, mti->mti_nids,
                        mti->mti_nid_count * sizeof(lnet_nid_t));
-                lustre_swab_mgs_nidtbl_entry(entry);
 
                 version = tgt->mnt_version;
                 rc     += entry_len;