ceph: fix snaptrace decoding on cap migration between mds
authorSage Weil <sage@newdream.net>
Mon, 1 Mar 2010 21:20:50 +0000 (13:20 -0800)
committerSage Weil <sage@newdream.net>
Mon, 1 Mar 2010 23:20:05 +0000 (15:20 -0800)
This was simply broken.  Apparently at some point we thought about putting
the snaptrace in the middle section, but didn't.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/caps.c

index bb84616..9afa8d3 100644 (file)
@@ -2608,6 +2608,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
        u64 size, max_size;
        u64 tid;
        int check_caps = 0;
+       void *snaptrace;
        int r;
 
        dout("handle_caps from mds%d\n", mds);
@@ -2617,6 +2618,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
        if (msg->front.iov_len < sizeof(*h))
                goto bad;
        h = msg->front.iov_base;
+       snaptrace = h + 1;
        op = le32_to_cpu(h->op);
        vino.ino = le64_to_cpu(h->ino);
        vino.snap = CEPH_NOSNAP;
@@ -2651,8 +2653,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
 
        case CEPH_CAP_OP_IMPORT:
                handle_cap_import(mdsc, inode, h, session,
-                                 msg->middle,
-                                 le32_to_cpu(h->snap_trace_len));
+                                 snaptrace, le32_to_cpu(h->snap_trace_len));
                check_caps = 1; /* we may have sent a RELEASE to the old auth */
                goto done;
        }