diff options
-rw-r--r-- | fs/ceph/addr.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index e723482c5f37..cab1cf5a330b 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c | |||
@@ -1539,19 +1539,27 @@ int ceph_uninline_data(struct file *filp, struct page *locked_page) | |||
1539 | 1539 | ||
1540 | osd_req_op_extent_osd_data_pages(req, 1, &page, len, 0, false, false); | 1540 | osd_req_op_extent_osd_data_pages(req, 1, &page, len, 0, false, false); |
1541 | 1541 | ||
1542 | err = osd_req_op_xattr_init(req, 0, CEPH_OSD_OP_CMPXATTR, | 1542 | { |
1543 | "inline_version", &inline_version, | 1543 | __le64 xattr_buf = cpu_to_le64(inline_version); |
1544 | sizeof(inline_version), | 1544 | err = osd_req_op_xattr_init(req, 0, CEPH_OSD_OP_CMPXATTR, |
1545 | CEPH_OSD_CMPXATTR_OP_GT, | 1545 | "inline_version", &xattr_buf, |
1546 | CEPH_OSD_CMPXATTR_MODE_U64); | 1546 | sizeof(xattr_buf), |
1547 | if (err) | 1547 | CEPH_OSD_CMPXATTR_OP_GT, |
1548 | goto out_put; | 1548 | CEPH_OSD_CMPXATTR_MODE_U64); |
1549 | 1549 | if (err) | |
1550 | err = osd_req_op_xattr_init(req, 2, CEPH_OSD_OP_SETXATTR, | 1550 | goto out_put; |
1551 | "inline_version", &inline_version, | 1551 | } |
1552 | sizeof(inline_version), 0, 0); | 1552 | |
1553 | if (err) | 1553 | { |
1554 | goto out_put; | 1554 | char xattr_buf[32]; |
1555 | int xattr_len = snprintf(xattr_buf, sizeof(xattr_buf), | ||
1556 | "%llu", inline_version); | ||
1557 | err = osd_req_op_xattr_init(req, 2, CEPH_OSD_OP_SETXATTR, | ||
1558 | "inline_version", | ||
1559 | xattr_buf, xattr_len, 0, 0); | ||
1560 | if (err) | ||
1561 | goto out_put; | ||
1562 | } | ||
1555 | 1563 | ||
1556 | ceph_osdc_build_request(req, 0, NULL, CEPH_NOSNAP, &inode->i_mtime); | 1564 | ceph_osdc_build_request(req, 0, NULL, CEPH_NOSNAP, &inode->i_mtime); |
1557 | err = ceph_osdc_start_request(&fsc->client->osdc, req, false); | 1565 | err = ceph_osdc_start_request(&fsc->client->osdc, req, false); |