diff options
Diffstat (limited to 'net/ceph/osd_client.c')
-rw-r--r-- | net/ceph/osd_client.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index f8f235930d88..3534e12683d3 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c | |||
@@ -1770,6 +1770,7 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg) | |||
1770 | u32 osdmap_epoch; | 1770 | u32 osdmap_epoch; |
1771 | int already_completed; | 1771 | int already_completed; |
1772 | u32 bytes; | 1772 | u32 bytes; |
1773 | u8 decode_redir; | ||
1773 | unsigned int i; | 1774 | unsigned int i; |
1774 | 1775 | ||
1775 | tid = le64_to_cpu(msg->hdr.tid); | 1776 | tid = le64_to_cpu(msg->hdr.tid); |
@@ -1841,6 +1842,15 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg) | |||
1841 | p += 8 + 4; /* skip replay_version */ | 1842 | p += 8 + 4; /* skip replay_version */ |
1842 | p += 8; /* skip user_version */ | 1843 | p += 8; /* skip user_version */ |
1843 | 1844 | ||
1845 | if (le16_to_cpu(msg->hdr.version) >= 7) | ||
1846 | ceph_decode_8_safe(&p, end, decode_redir, bad_put); | ||
1847 | else | ||
1848 | decode_redir = 1; | ||
1849 | } else { | ||
1850 | decode_redir = 0; | ||
1851 | } | ||
1852 | |||
1853 | if (decode_redir) { | ||
1844 | err = ceph_redirect_decode(&p, end, &redir); | 1854 | err = ceph_redirect_decode(&p, end, &redir); |
1845 | if (err) | 1855 | if (err) |
1846 | goto bad_put; | 1856 | goto bad_put; |