CEPH_OSD_OP_READ, CEPH_OSD_FLAG_READ,
NULL, 0,
ci->i_truncate_seq, ci->i_truncate_size,
- NULL, false, 0);
+ NULL, false);
if (IS_ERR(req))
return PTR_ERR(req);
}
req->r_pages = pages;
req->r_num_pages = nr_pages;
+ req->r_page_alignment = 0;
req->r_callback = finish_read;
req->r_inode = inode;
snapc, do_sync,
ci->i_truncate_seq,
ci->i_truncate_size,
- &inode->i_mtime, true, 0);
+ &inode->i_mtime, true);
if (IS_ERR(req)) {
rc = PTR_ERR(req);
break;
}
+ req->r_num_pages = calc_pages_for(0, len);
+ req->r_page_alignment = 0;
max_pages = req->r_num_pages;
alloc_page_vec(fsc, req);
buf_align = (unsigned long)data & ~PAGE_MASK;
len = left;
- /* write from beginning of first page, regardless of io alignment */
- page_align = file->f_flags & O_DIRECT ? buf_align : io_align;
- num_pages = calc_pages_for(page_align, len);
req = ceph_osdc_new_request(&fsc->client->osdc, &ci->i_layout,
ceph_vino(inode), pos, &len,
CEPH_OSD_OP_WRITE, flags,
ci->i_snap_realm->cached_context,
do_sync,
ci->i_truncate_seq, ci->i_truncate_size,
- &mtime, false, page_align);
+ &mtime, false);
if (IS_ERR(req))
return PTR_ERR(req);
+ /* write from beginning of first page, regardless of io alignment */
+ page_align = file->f_flags & O_DIRECT ? buf_align : io_align;
+ num_pages = calc_pages_for(page_align, len);
if (file->f_flags & O_DIRECT) {
pages = ceph_get_direct_page_vector(data, num_pages, false);
if (IS_ERR(pages)) {
}
req->r_pages = pages;
req->r_num_pages = num_pages;
+ req->r_page_alignment = page_align;
req->r_inode = inode;
ret = ceph_osdc_start_request(&fsc->client->osdc, req, false);
int do_sync, u32 truncate_seq,
u64 truncate_size,
struct timespec *mtime,
- bool use_mempool, int page_align);
+ bool use_mempool);
extern void ceph_osdc_set_request_linger(struct ceph_osd_client *osdc,
struct ceph_osd_request *req);
u32 truncate_seq,
u64 truncate_size,
struct timespec *mtime,
- bool use_mempool,
- int page_align)
+ bool use_mempool)
{
struct ceph_osd_req_op ops[2];
struct ceph_osd_request *req;
snprintf(req->r_oid, sizeof(req->r_oid), "%llx.%08llx", vino.ino, bno);
req->r_oid_len = strlen(req->r_oid);
- /* The alignment may differ from the natural (file) alignment */
-
- req->r_num_pages = calc_pages_for(page_align, *plen);
- req->r_page_alignment = page_align;
-
ceph_osdc_build_request(req, off, *plen, num_op, ops,
snapc, vino.snap, mtime);
req = ceph_osdc_new_request(osdc, layout, vino, off, plen,
CEPH_OSD_OP_READ, CEPH_OSD_FLAG_READ,
NULL, 0, truncate_seq, truncate_size, NULL,
- false, page_align);
+ false);
if (IS_ERR(req))
return PTR_ERR(req);
/* it may be a short read due to an object boundary */
req->r_pages = pages;
+ req->r_num_pages = calc_pages_for(page_align, *plen);
+ req->r_page_alignment = page_align;
dout("readpages final extent is %llu~%llu (%d pages align %d)\n",
off, *plen, req->r_num_pages, page_align);
CEPH_OSD_FLAG_ONDISK | CEPH_OSD_FLAG_WRITE,
snapc, 0,
truncate_seq, truncate_size, mtime,
- true, page_align);
+ true);
if (IS_ERR(req))
return PTR_ERR(req);
/* it may be a short write due to an object boundary */
req->r_pages = pages;
- dout("writepages %llu~%llu (%d pages)\n", off, len,
- req->r_num_pages);
+ req->r_num_pages = calc_pages_for(page_align, len);
+ req->r_page_alignment = page_align;
+ dout("writepages %llu~%llu (%d pages)\n", off, len, req->r_num_pages);
rc = ceph_osdc_start_request(osdc, req, true);
if (!rc)