Whamcloud - gitweb
Branch b1_6
authorbobijam <bobijam>
Thu, 25 Oct 2007 02:14:38 +0000 (02:14 +0000)
committerbobijam <bobijam>
Thu, 25 Oct 2007 02:14:38 +0000 (02:14 +0000)
b=13497
i=deen
i=johann

Description: LASSERT_{REQ,REP}SWAB macros are buggy
Details    : If SWAB_PARANOIA is disabled, the LASSERT_REQSWAB and
             LASSERT_REPSWAB macros become no-ops, which is incorrect. Drop
             these macros and replace them with their difinitions instead.

18 files changed:
lustre/ChangeLog
lustre/include/lustre_net.h
lustre/ldlm/ldlm_lib.c
lustre/liblustre/dir.c
lustre/liblustre/file.c
lustre/liblustre/super.c
lustre/llite/dir.c
lustre/llite/file.c
lustre/llite/symlink.c
lustre/llite/xattr.c
lustre/mdc/mdc_locks.c
lustre/mdc/mdc_request.c
lustre/mds/handler.c
lustre/mds/mds_lib.c
lustre/osc/osc_request.c
lustre/ost/ost_handler.c
lustre/ptlrpc/pack_generic.c
lustre/ptlrpc/service.c

index ccac542..46bc23b 100644 (file)
@@ -15,6 +15,13 @@ tbd         Cluster File Systems, Inc. <info@clusterfs.com>
        * Note that reiserfs quotas are disabled on SLES 10 in this kernel.
 
 Severity   : normal
+Bugzilla   : 13497
+Description: LASSERT_{REQ,REP}SWAB macros are buggy
+Details    : If SWAB_PARANOIA is disabled, the LASSERT_REQSWAB and
+             LASSERT_REPSWAB macros become no-ops, which is incorrect. Drop
+            these macros and replace them with their difinitions instead.
+
+Severity   : normal
 Bugzilla   : 13556
 Description: conf-sanity.sh test_33 failed with 1
 Details    : change mgsnode 
index 04d6a21..e2ec068 100644 (file)
@@ -386,24 +386,6 @@ static inline int lustre_rep_swabbed(struct ptlrpc_request *req, int index)
         return req->rq_rep_swab_mask & (1 << index);
 }
 
-#define SWAB_PARANOIA 1
-
-#if SWAB_PARANOIA
-/* unpacking: assert idx not unpacked already */
-#define LASSERT_REQSWAB(rq, idx) lustre_set_req_swabbed(rq, idx)
-#define LASSERT_REPSWAB(rq, idx) lustre_set_rep_swabbed(rq, idx)
-
-/* just looking: assert idx already unpacked */
-#define LASSERT_REQSWABBED(rq, idx) LASSERT(lustre_req_swabbed(rq, idx))
-#define LASSERT_REPSWABBED(rq, idx) LASSERT(lustre_rep_swabbed(rq, idx))
-
-#else
-#define LASSERT_REQSWAB(rq, idx)
-#define LASSERT_REPSWAB(rq, idx)
-#define LASSERT_REQSWABBED(rq, idx)
-#define LASSERT_REPSWABBED(rq, idx)
-#endif
-
 static inline const char *
 ptlrpc_rqphase2str(struct ptlrpc_request *req)
 {
index 2a14fb7..4bd360d 100644 (file)
@@ -569,7 +569,7 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler)
 
         OBD_RACE(OBD_FAIL_TGT_CONN_RACE);
 
-        LASSERT_REQSWAB(req, REQ_REC_OFF);
+        lustre_set_req_swabbed(req, REQ_REC_OFF);
         str = lustre_msg_string(req->rq_reqmsg, REQ_REC_OFF, sizeof(tgtuuid)-1);
         if (str == NULL) {
                 DEBUG_REQ(D_ERROR, req, "bad target UUID for connect");
@@ -610,7 +610,7 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler)
            Really, class_uuid2obd should take the ref. */
         targref = class_incref(target);
 
-        LASSERT_REQSWAB(req, REQ_REC_OFF + 1);
+        lustre_set_req_swabbed(req, REQ_REC_OFF + 1);
         str = lustre_msg_string(req->rq_reqmsg, REQ_REC_OFF + 1,
                                 sizeof(cluuid) - 1);
         if (str == NULL) {
index e241dfc..f571556 100644 (file)
@@ -112,7 +112,7 @@ static int llu_dir_do_readpage(struct inode *inode, struct page *page)
                                       sizeof(*body));
                 LASSERT(body != NULL);         /* checked by mdc_readpage() */
                 /* swabbed by mdc_readpage() */
-                LASSERT_REPSWABBED(request, REPLY_REC_OFF);
+                LASSERT(lustre_rep_swabbed(request, REPLY_REC_OFF));
 
                 st->st_size = body->size;
         } else {
index dc20c61..680c0e2 100644 (file)
@@ -144,7 +144,8 @@ int llu_local_open(struct llu_inode_info *lli, struct lookup_intent *it)
 
         body = lustre_msg_buf(req->rq_repmsg, DLM_REPLY_REC_OFF, sizeof(*body));
         LASSERT(body != NULL);                 /* reply already checked out */
-        LASSERT_REPSWABBED(req, DLM_REPLY_REC_OFF);       /* and swabbed down */
+        /* and swabbed down */
+        LASSERT(lustre_rep_swabbed(req, DLM_REPLY_REC_OFF));
 
         /* already opened? */
         if (lli->lli_open_count++)
index 2cee7da..5425d6b 100644 (file)
@@ -907,7 +907,7 @@ static int llu_readlink_internal(struct inode *inode,
         body = lustre_msg_buf((*request)->rq_repmsg, REPLY_REC_OFF,
                               sizeof(*body));
         LASSERT(body != NULL);
-        LASSERT_REPSWABBED(*request, REPLY_REC_OFF);
+        LASSERT(lustre_rep_swabbed(*request, REPLY_REC_OFF));
 
         if ((body->valid & OBD_MD_LINKNAME) == 0) {
                 CERROR ("OBD_MD_LINKNAME not set on reply\n");
index 49caf89..b78bbb5 100644 (file)
@@ -103,7 +103,7 @@ static int ll_dir_readpage(struct file *file, struct page *page)
                                       sizeof(*body));
                 LASSERT(body != NULL); /* checked by mdc_readpage() */
                 /* swabbed by mdc_readpage() */
-                LASSERT_REPSWABBED(request, REPLY_REC_OFF);
+                LASSERT(lustre_rep_swabbed(request, REPLY_REC_OFF));
 
                 i_size_write(inode, body->size);
                 SetPageUptodate(page);
@@ -589,7 +589,7 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
                         sizeof(*body));
         LASSERT(body != NULL); /* checked by mdc_getattr_name */
         /* swabbed by mdc_getattr_name */
-        LASSERT_REPSWABBED(req, REPLY_REC_OFF);
+        LASSERT(lustre_rep_swabbed(req, REPLY_REC_OFF));
 
         lmmsize = body->eadatasize;
 
@@ -600,7 +600,7 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
 
         lmm = lustre_msg_buf(req->rq_repmsg, REPLY_REC_OFF + 1, lmmsize);
         LASSERT(lmm != NULL);
-        LASSERT_REPSWABBED(req, REPLY_REC_OFF + 1);
+        LASSERT(lustre_rep_swabbed(req, REPLY_REC_OFF + 1));
 
         /*
          * This is coming from the MDS, so is probably in
@@ -730,7 +730,7 @@ static int ll_dir_ioctl(struct inode *inode, struct file *file,
                                               sizeof(*body));
                         LASSERT(body != NULL); /* checked by mdc_getattr_name */
                         /* swabbed by mdc_getattr_name */
-                        LASSERT_REPSWABBED(request, REPLY_REC_OFF);
+                        LASSERT(lustre_rep_swabbed(request, REPLY_REC_OFF));
                 } else {
                         GOTO(out_req, rc);
                 }
index aa6d6cb..a0ea289 100644 (file)
@@ -331,7 +331,8 @@ static void ll_och_fill(struct ll_inode_info *lli, struct lookup_intent *it,
 
         body = lustre_msg_buf(req->rq_repmsg, DLM_REPLY_REC_OFF, sizeof(*body));
         LASSERT(body != NULL);                  /* reply already checked out */
-        LASSERT_REPSWABBED(req, DLM_REPLY_REC_OFF); /* and swabbed in mdc_enqueue */
+        /* and swabbed in mdc_enqueue */
+        LASSERT(lustre_rep_swabbed(req, DLM_REPLY_REC_OFF));
 
         memcpy(&och->och_fh, &body->handle, sizeof(body->handle));
         och->och_magic = OBD_CLIENT_HANDLE_MAGIC;
@@ -1745,7 +1746,7 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
                         sizeof(*body));
         LASSERT(body != NULL); /* checked by mdc_getattr_name */
         /* swabbed by mdc_getattr_name */
-        LASSERT_REPSWABBED(req, REPLY_REC_OFF);
+        LASSERT(lustre_rep_swabbed(req, REPLY_REC_OFF));
 
         lmmsize = body->eadatasize;
 
@@ -1757,7 +1758,7 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
         lmm = lustre_msg_buf(req->rq_repmsg, REPLY_REC_OFF + 1,
                         lmmsize);
         LASSERT(lmm != NULL);
-        LASSERT_REPSWABBED(req, REPLY_REC_OFF + 1);
+        LASSERT(lustre_rep_swabbed(req, REPLY_REC_OFF + 1));
 
         /*
          * This is coming from the MDS, so is probably in
index 625e84f..21de06b 100644 (file)
@@ -59,7 +59,7 @@ static int ll_readlink_internal(struct inode *inode,
         body = lustre_msg_buf((*request)->rq_repmsg, REPLY_REC_OFF,
                               sizeof(*body));
         LASSERT(body != NULL);
-        LASSERT_REPSWABBED(*request, REPLY_REC_OFF);
+        LASSERT(lustre_rep_swabbed(*request, REPLY_REC_OFF));
 
         if ((body->valid & OBD_MD_LINKNAME) == 0) {
                 CERROR("OBD_MD_LINKNAME not set on reply\n");
index 235a9ed..2565fed 100644 (file)
@@ -269,7 +269,7 @@ do_getxattr:
 
         body = lustre_msg_buf(req->rq_repmsg, REPLY_REC_OFF, sizeof(*body));
         LASSERT(body);
-        LASSERT_REPSWABBED(req, REPLY_REC_OFF);
+        LASSERT(lustre_rep_swabbed(req, REPLY_REC_OFF));
 
         /* only detect the xattr size */
         if (size == 0)
@@ -288,7 +288,7 @@ do_getxattr:
         }
 
         /* do not need swab xattr data */
-        LASSERT_REPSWAB(req, REPLY_REC_OFF + 1);
+        lustre_set_rep_swabbed(req, REPLY_REC_OFF + 1);
         xdata = lustre_msg_buf(req->rq_repmsg, REPLY_REC_OFF + 1,
                                body->eadatasize);
         if (!xdata) {
index 6e08a73..6f2da48 100644 (file)
@@ -442,7 +442,8 @@ static int mdc_finish_enqueue(struct obd_export *exp,
         lockrep = lustre_msg_buf(req->rq_repmsg, DLM_LOCKREPLY_OFF,
                                  sizeof(*lockrep));
         LASSERT(lockrep != NULL);                 /* checked by ldlm_cli_enqueue() */
-        LASSERT_REPSWABBED(req, DLM_LOCKREPLY_OFF); /* swabbed by ldlm_cli_enqueue() */
+        /* swabbed by ldlm_cli_enqueue() */
+        LASSERT(lustre_rep_swabbed(req, DLM_LOCKREPLY_OFF));
 
         it->d.lustre.it_disposition = (int)lockrep->lock_policy_res1;
         it->d.lustre.it_status = (int)lockrep->lock_policy_res2;
@@ -665,8 +666,10 @@ static int mdc_finish_intent_lock(struct obd_export *exp,
 
         mds_body = lustre_msg_buf(req->rq_repmsg, DLM_REPLY_REC_OFF,
                                   sizeof(*mds_body));
-        LASSERT(mds_body != NULL);           /* mdc_enqueue checked */
-        LASSERT_REPSWABBED(req, DLM_REPLY_REC_OFF); /* mdc_enqueue swabbed */
+        /* mdc_enqueue checked */
+        LASSERT(mds_body != NULL);
+        /* mdc_enqueue swabbed */
+        LASSERT(lustre_rep_swabbed(req, DLM_REPLY_REC_OFF));
 
         /* If we were revalidating a fid/name pair, mark the intent in
          * case we fail and get called again from lookup */
index 800051a..fc3358e 100644 (file)
@@ -144,7 +144,7 @@ int mdc_getattr_common(struct obd_export *exp, unsigned int ea_size,
 
         CDEBUG(D_NET, "mode: %o\n", body->mode);
 
-        LASSERT_REPSWAB(req, REPLY_REC_OFF + 1);
+        lustre_set_rep_swabbed(req, REPLY_REC_OFF + 1);
         if (body->eadatasize != 0) {
                 /* reply indicates presence of eadata; check it's there... */
                 eadata = lustre_msg_buf(req->rq_repmsg, REPLY_REC_OFF + 1,
@@ -419,7 +419,7 @@ int mdc_req2lustre_md(struct ptlrpc_request *req, int offset,
 
         md->body = lustre_msg_buf(req->rq_repmsg, offset, sizeof (*md->body));
         LASSERT (md->body != NULL);
-        LASSERT_REPSWABBED(req, offset);
+        LASSERT(lustre_rep_swabbed(req, offset));
         offset++;
 
         if (md->body->valid & OBD_MD_FLEASIZE) {
@@ -442,7 +442,7 @@ int mdc_req2lustre_md(struct ptlrpc_request *req, int offset,
                         CERROR ("incorrect message: lmm == 0\n");
                         GOTO(err_out, rc = -EPROTO);
                 }
-                LASSERT_REPSWABBED(req, offset);
+                LASSERT(lustre_rep_swabbed(req, offset));
 
                 rc = obd_unpackmd(exp, &md->lsm, lmm, lmmsize);
                 if (rc < 0)
@@ -575,7 +575,7 @@ void mdc_set_open_replay_data(struct obd_client_handle *och,
 
         /* incoming message in my byte order (it's been swabbed) */
         LASSERT(rec != NULL);
-        LASSERT_REPSWABBED(open_req, DLM_REPLY_REC_OFF);
+        LASSERT(lustre_rep_swabbed(open_req, DLM_REPLY_REC_OFF));
         /* outgoing messages always in my byte order */
         LASSERT(body != NULL);
 
index 0c3c428..7dea5ee 100644 (file)
@@ -790,8 +790,8 @@ static int mds_getattr_pack_msg(struct ptlrpc_request *req, struct inode *inode,
         LASSERT(offset == REQ_REC_OFF); /* non-intent */
 
         body = lustre_msg_buf(req->rq_reqmsg, offset, sizeof(*body));
-        LASSERT(body != NULL);                 /* checked by caller */
-        LASSERT_REQSWABBED(req, offset);       /* swabbed by caller */
+        LASSERT(body != NULL);                    /* checked by caller */
+        LASSERT(lustre_req_swabbed(req, offset)); /* swabbed by caller */
 
         if ((S_ISREG(inode->i_mode) && (body->valid & OBD_MD_FLEASIZE)) ||
             (S_ISDIR(inode->i_mode) && (body->valid & OBD_MD_FLDIREA))) {
@@ -893,7 +893,7 @@ static int mds_getattr_lock(struct ptlrpc_request *req, int offset,
                 RETURN(-EFAULT);
         }
 
-        LASSERT_REQSWAB(req, offset + 1);
+        lustre_set_req_swabbed(req, offset + 1);
         name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
         if (name == NULL) {
                 CERROR("Can't unpack name\n");
index 82bd53b..d777cd8 100644 (file)
@@ -139,7 +139,7 @@ static int mds_setattr_unpack(struct ptlrpc_request *req, int offset,
         LTIME_S(attr->ia_ctime) = rec->sa_ctime;
         r->ur_flags = rec->sa_attr_flags;
 
-        LASSERT_REQSWAB (req, offset + 1);
+        lustre_set_req_swabbed(req, offset + 1);
         r->ur_eadatalen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
         if (r->ur_eadatalen) {
                 r->ur_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 1, 0);
@@ -185,13 +185,13 @@ static int mds_create_unpack(struct ptlrpc_request *req, int offset,
         r->ur_time = rec->cr_time;
         r->ur_flags = rec->cr_flags;
 
-        LASSERT_REQSWAB(req, offset + 1);
+        lustre_set_req_swabbed(req, offset + 1);
         r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
         if (r->ur_name == NULL)
                 RETURN (-EFAULT);
         r->ur_namelen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
 
-        LASSERT_REQSWAB(req, offset + 2);
+        lustre_set_req_swabbed(req, offset + 2);
         r->ur_tgtlen = lustre_msg_buflen(req->rq_reqmsg, offset + 2);
         if (r->ur_tgtlen) {
                 /* NB for now, we only seem to pass NULL terminated symlink
@@ -235,7 +235,7 @@ static int mds_link_unpack(struct ptlrpc_request *req, int offset,
         r->ur_fid2 = &rec->lk_fid2;
         r->ur_time = rec->lk_time;
 
-        LASSERT_REQSWAB(req, offset + 1);
+        lustre_set_req_swabbed(req, offset + 1);
         r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
         if (r->ur_name == NULL)
                 RETURN (-EFAULT);
@@ -271,7 +271,7 @@ static int mds_unlink_unpack(struct ptlrpc_request *req, int offset,
         r->ur_fid2 = &rec->ul_fid2;
         r->ur_time = rec->ul_time;
 
-        LASSERT_REQSWAB(req, offset + 1);
+        lustre_set_req_swabbed(req, offset + 1);
         r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
         if (r->ur_name == NULL)
                 RETURN(-EFAULT);
@@ -307,13 +307,13 @@ static int mds_rename_unpack(struct ptlrpc_request *req, int offset,
         r->ur_fid2 = &rec->rn_fid2;
         r->ur_time = rec->rn_time;
 
-        LASSERT_REQSWAB (req, offset + 1);
+        lustre_set_req_swabbed(req, offset + 1);
         r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
         if (r->ur_name == NULL)
                 RETURN(-EFAULT);
         r->ur_namelen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
 
-        LASSERT_REQSWAB (req, offset + 2);
+        lustre_set_req_swabbed(req, offset + 2);
         r->ur_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
         if (r->ur_tgt == NULL)
                 RETURN(-EFAULT);
@@ -351,13 +351,13 @@ static int mds_open_unpack(struct ptlrpc_request *req, int offset,
         r->ur_time = rec->cr_time;
         r->ur_flags = rec->cr_flags;
 
-        LASSERT_REQSWAB(req, offset + 1);
+        lustre_set_req_swabbed(req, offset + 1);
         r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
         if (r->ur_name == NULL)
                 RETURN(-EFAULT);
         r->ur_namelen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
 
-        LASSERT_REQSWAB(req, offset + 2);
+        lustre_set_req_swabbed(req, offset + 2);
         r->ur_eadatalen = lustre_msg_buflen(req->rq_reqmsg, offset + 2);
         if (r->ur_eadatalen) {
                 r->ur_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0);
index 955caa1..f145d89 100644 (file)
@@ -2757,7 +2757,7 @@ static int osc_enqueue_fini(struct ptlrpc_request *req, struct obd_info *oinfo,
                         struct ldlm_reply *rep;
 
                         /* swabbed by ldlm_cli_enqueue() */
-                        LASSERT_REPSWABBED(req, DLM_LOCKREPLY_OFF);
+                        LASSERT(lustre_rep_swabbed(req, DLM_LOCKREPLY_OFF));
                         rep = lustre_msg_buf(req->rq_repmsg, DLM_LOCKREPLY_OFF,
                                              sizeof(*rep));
                         LASSERT(rep != NULL);
index 81e7091..ee9d24a 100644 (file)
@@ -939,7 +939,7 @@ static int ost_brw_write(struct ptlrpc_request *req, struct obd_trans_info *oti)
                 GOTO(out, rc = -EFAULT);
         }
 
-        LASSERT_REQSWAB(req, REQ_REC_OFF + 1);
+        lustre_set_req_swabbed(req, REQ_REC_OFF + 1);
         objcount = lustre_msg_buflen(req->rq_reqmsg, REQ_REC_OFF + 1) /
                    sizeof(*ioo);
         if (objcount == 0) {
index d6e0f8f..b7ce82b 100644 (file)
@@ -1041,14 +1041,14 @@ void *lustre_swab_buf(struct lustre_msg *msg, int index, int min_size,
 void *lustre_swab_reqbuf(struct ptlrpc_request *req, int index, int min_size,
                          void *swabber)
 {
-        LASSERT_REQSWAB(req, index);
+        lustre_set_req_swabbed(req, index);
         return lustre_swab_buf(req->rq_reqmsg, index, min_size, swabber);
 }
 
 void *lustre_swab_repbuf(struct ptlrpc_request *req, int index, int min_size,
                          void *swabber)
 {
-        LASSERT_REPSWAB(req, index);
+        lustre_set_rep_swabbed(req, index);
         return lustre_swab_buf(req->rq_repmsg, index, min_size, swabber);
 }
 
index 275ebe8..4506434 100644 (file)
@@ -848,10 +848,9 @@ ptlrpc_server_handle_req_in(struct ptlrpc_service *svc)
            concerned */
         spin_unlock(&svc->srv_lock);
         
-#if SWAB_PARANOIA
         /* Clear request swab mask; this is a new request */
         req->rq_req_swab_mask = 0;
-#endif
+
         rc = lustre_unpack_msg(req->rq_reqmsg, req->rq_reqlen);
         if (rc != 0) {
                 CERROR ("error unpacking request: ptl %d from %s"