diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ceph/osd_client.c | 6 | ||||
-rw-r--r-- | net/ceph/osdmap.c | 9 |
2 files changed, 8 insertions, 7 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index e29a3ed92958..47e5f5b1f94c 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c | |||
@@ -53,13 +53,15 @@ int ceph_calc_raw_layout(struct ceph_osd_client *osdc, | |||
53 | reqhead->snapid = cpu_to_le64(snapid); | 53 | reqhead->snapid = cpu_to_le64(snapid); |
54 | 54 | ||
55 | /* object extent? */ | 55 | /* object extent? */ |
56 | r = ceph_calc_file_object_mapping(layout, off, plen, bno, | 56 | r = ceph_calc_file_object_mapping(layout, off, orig_len, bno, |
57 | &objoff, &objlen); | 57 | &objoff, &objlen); |
58 | if (r < 0) | 58 | if (r < 0) |
59 | return r; | 59 | return r; |
60 | if (*plen < orig_len) | 60 | if (objlen < orig_len) { |
61 | *plen = objlen; | ||
61 | dout(" skipping last %llu, final file extent %llu~%llu\n", | 62 | dout(" skipping last %llu, final file extent %llu~%llu\n", |
62 | orig_len - *plen, off, *plen); | 63 | orig_len - *plen, off, *plen); |
64 | } | ||
63 | 65 | ||
64 | if (op_has_extent(op->op)) { | 66 | if (op_has_extent(op->op)) { |
65 | u32 osize = le32_to_cpu(layout->fl_object_size); | 67 | u32 osize = le32_to_cpu(layout->fl_object_size); |
diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c index ca05871635bc..369f03ba9ee5 100644 --- a/net/ceph/osdmap.c +++ b/net/ceph/osdmap.c | |||
@@ -1016,7 +1016,7 @@ bad: | |||
1016 | * pass a stride back to the caller. | 1016 | * pass a stride back to the caller. |
1017 | */ | 1017 | */ |
1018 | int ceph_calc_file_object_mapping(struct ceph_file_layout *layout, | 1018 | int ceph_calc_file_object_mapping(struct ceph_file_layout *layout, |
1019 | u64 off, u64 *plen, | 1019 | u64 off, u64 len, |
1020 | u64 *ono, | 1020 | u64 *ono, |
1021 | u64 *oxoff, u64 *oxlen) | 1021 | u64 *oxoff, u64 *oxlen) |
1022 | { | 1022 | { |
@@ -1027,7 +1027,7 @@ int ceph_calc_file_object_mapping(struct ceph_file_layout *layout, | |||
1027 | u32 su_per_object; | 1027 | u32 su_per_object; |
1028 | u64 t, su_offset; | 1028 | u64 t, su_offset; |
1029 | 1029 | ||
1030 | dout("mapping %llu~%llu osize %u fl_su %u\n", off, *plen, | 1030 | dout("mapping %llu~%llu osize %u fl_su %u\n", off, len, |
1031 | osize, su); | 1031 | osize, su); |
1032 | if (su == 0 || sc == 0) | 1032 | if (su == 0 || sc == 0) |
1033 | goto invalid; | 1033 | goto invalid; |
@@ -1060,11 +1060,10 @@ int ceph_calc_file_object_mapping(struct ceph_file_layout *layout, | |||
1060 | 1060 | ||
1061 | /* | 1061 | /* |
1062 | * Calculate the length of the extent being written to the selected | 1062 | * Calculate the length of the extent being written to the selected |
1063 | * object. This is the minimum of the full length requested (plen) or | 1063 | * object. This is the minimum of the full length requested (len) or |
1064 | * the remainder of the current stripe being written to. | 1064 | * the remainder of the current stripe being written to. |
1065 | */ | 1065 | */ |
1066 | *oxlen = min_t(u64, *plen, su - su_offset); | 1066 | *oxlen = min_t(u64, len, su - su_offset); |
1067 | *plen = *oxlen; | ||
1068 | 1067 | ||
1069 | dout(" obj extent %llu~%llu\n", *oxoff, *oxlen); | 1068 | dout(" obj extent %llu~%llu\n", *oxoff, *oxlen); |
1070 | return 0; | 1069 | return 0; |