mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 23:00:21 +00:00
ceph: fix uninline data function
For CEPH_OSD_CMPXATTR_MODE_U64, OSD expects the u64 to be encoded as string in object's xattr. Signed-off-by: Yan, Zheng <zyan@redhat.com>
This commit is contained in:
parent
0ea611a3bc
commit
ec137c10e7
@ -1539,19 +1539,27 @@ int ceph_uninline_data(struct file *filp, struct page *locked_page)
|
||||
|
||||
osd_req_op_extent_osd_data_pages(req, 1, &page, len, 0, false, false);
|
||||
|
||||
err = osd_req_op_xattr_init(req, 0, CEPH_OSD_OP_CMPXATTR,
|
||||
"inline_version", &inline_version,
|
||||
sizeof(inline_version),
|
||||
CEPH_OSD_CMPXATTR_OP_GT,
|
||||
CEPH_OSD_CMPXATTR_MODE_U64);
|
||||
if (err)
|
||||
goto out_put;
|
||||
{
|
||||
__le64 xattr_buf = cpu_to_le64(inline_version);
|
||||
err = osd_req_op_xattr_init(req, 0, CEPH_OSD_OP_CMPXATTR,
|
||||
"inline_version", &xattr_buf,
|
||||
sizeof(xattr_buf),
|
||||
CEPH_OSD_CMPXATTR_OP_GT,
|
||||
CEPH_OSD_CMPXATTR_MODE_U64);
|
||||
if (err)
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
err = osd_req_op_xattr_init(req, 2, CEPH_OSD_OP_SETXATTR,
|
||||
"inline_version", &inline_version,
|
||||
sizeof(inline_version), 0, 0);
|
||||
if (err)
|
||||
goto out_put;
|
||||
{
|
||||
char xattr_buf[32];
|
||||
int xattr_len = snprintf(xattr_buf, sizeof(xattr_buf),
|
||||
"%llu", inline_version);
|
||||
err = osd_req_op_xattr_init(req, 2, CEPH_OSD_OP_SETXATTR,
|
||||
"inline_version",
|
||||
xattr_buf, xattr_len, 0, 0);
|
||||
if (err)
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
ceph_osdc_build_request(req, 0, NULL, CEPH_NOSNAP, &inode->i_mtime);
|
||||
err = ceph_osdc_start_request(&fsc->client->osdc, req, false);
|
||||
|
Loading…
x
Reference in New Issue
Block a user