Whamcloud - gitweb
While we are breaking BA OST compatibility, swap the osc_punch packing of
authoradilger <adilger>
Tue, 29 Oct 2002 07:51:51 +0000 (07:51 +0000)
committeradilger <adilger>
Tue, 29 Oct 2002 07:51:51 +0000 (07:51 +0000)
"start" and "end" so that "start" is in o_size, which is more consistent
with setting i_size on truncate.

Also add some more FIXMEs for bug 288.

lustre/osc/osc_request.c
lustre/ost/ost_handler.c

index 3e26333..6cd994e 100644 (file)
@@ -244,11 +244,10 @@ static int osc_punch(struct lustre_handle *conn, struct obdo *oa,
 #warning FIXME: pack only valid fields instead of memcpy, endianness, valid
         memcpy(&body->oa, oa, sizeof(*oa));
 
-        /* overload the blocks and size fields in the oa with start/end */
-#warning FIXME: endianness, size=start, blocks=end?
-        body->oa.o_blocks = start;
-        body->oa.o_size = end;
-        body->oa.o_valid |= OBD_MD_FLBLOCKS | OBD_MD_FLSIZE;
+        /* overload the size and blocks fields in the oa with start/end */
+        body->oa.o_size = HTON__u64(start);
+        body->oa.o_blocks = HTON__u64(end);
+        body->oa.o_valid |= HTON__u32(OBD_MD_FLSIZE | OBD_MD_FLBLOCKS);
 
         request->rq_replen = lustre_msg_size(1, &size);
 
index 4ea6dea..2be26cc 100644 (file)
@@ -70,6 +70,7 @@ static int ost_getattr(struct ptlrpc_request *req)
                 RETURN(rc);
 
         repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        /* FIXME: unpack only valid fields instead of memcpy, endianness */
         memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
         req->rq_status = obd_getattr(conn, &repbody->oa, NULL);
         RETURN(0);
@@ -114,6 +115,7 @@ static int ost_open(struct ptlrpc_request *req)
                 RETURN(rc);
 
         repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        /* FIXME: unpack only valid fields instead of memcpy, endianness */
         memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
         req->rq_status = obd_open(conn, &repbody->oa, NULL);
         RETURN(0);
@@ -133,6 +135,7 @@ static int ost_close(struct ptlrpc_request *req)
                 RETURN(rc);
 
         repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        /* FIXME: unpack only valid fields instead of memcpy, endianness */
         memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
         req->rq_status = obd_close(conn, &repbody->oa, NULL);
         RETURN(0);
@@ -152,6 +155,7 @@ static int ost_create(struct ptlrpc_request *req)
                 RETURN(rc);
 
         repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        /* FIXME: unpack only valid fields instead of memcpy, endianness */
         memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
         req->rq_status = obd_create(conn, &repbody->oa, NULL);
         RETURN(0);
@@ -166,8 +170,8 @@ static int ost_punch(struct ptlrpc_request *req)
 
         body = lustre_msg_buf(req->rq_reqmsg, 0);
 
-        if (!(body->oa.o_valid & OBD_MD_FLSIZE) ||
-            !(body->oa.o_valid & OBD_MD_FLBLOCKS))
+        if (NTOH__u32(body->oa.o_valid) & (OBD_MD_FLSIZE | OBD_MD_FLBLOCKS) !=
+            (OBD_MD_FLSIZE | OBD_MD_FLBLOCKS))
                 RETURN(-EINVAL);
 
         rc = lustre_pack_msg(1, &size, NULL, &req->rq_replen, &req->rq_repmsg);
@@ -175,9 +179,10 @@ static int ost_punch(struct ptlrpc_request *req)
                 RETURN(rc);
 
         repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        /* FIXME: unpack only valid fields instead of memcpy, endianness */
         memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
         req->rq_status = obd_punch(conn, &repbody->oa, NULL,
-                                   repbody->oa.o_blocks, repbody->oa.o_size);
+                                   repbody->oa.o_size, repbody->oa.o_blocks);
         RETURN(0);
 }
 
@@ -195,6 +200,7 @@ static int ost_setattr(struct ptlrpc_request *req)
                 RETURN(rc);
 
         repbody = lustre_msg_buf(req->rq_repmsg, 0);
+        /* FIXME: unpack only valid fields instead of memcpy, endianness */
         memcpy(&repbody->oa, &body->oa, sizeof(body->oa));
         req->rq_status = obd_setattr(conn, &repbody->oa, NULL);
         RETURN(0);