Otherwise they will have a high latency from the OSD.
&ci->i_layout, snapc,
page_off, len,
ci->i_truncate_seq, ci->i_truncate_size,
- &page, 1, 0);
+ &page, 1, 0, 0);
if (err < 0) {
dout(20, "writepage setting page error %p\n", page);
SetPageError(page);
long long unsigned pos;
int written = 0;
int flags;
+ int do_sync = 0;
int ret;
if (ceph_snap(file->f_dentry->d_inode) != CEPH_NOSNAP)
flags = CEPH_OSD_OP_ORDERSNAP;
if ((file->f_flags & (O_SYNC|O_DIRECT)) == 0)
flags |= CEPH_OSD_OP_ACK;
+ else
+ do_sync = 1;
/*
* we may need to do multiple writes here if we span an object
pos, left, ci->i_truncate_seq,
ci->i_truncate_size,
page_pos, pages_left,
- flags);
+ flags, do_sync);
if (ret > 0) {
int didpages =
((pos & ~PAGE_CACHE_MASK) + ret) >> PAGE_CACHE_SHIFT;
u64 off, u64 len,
u32 truncate_seq, u64 truncate_size,
struct page **pages, int num_pages,
- int flags)
+ int flags, int do_sync)
{
struct ceph_msg *reqm;
struct ceph_osd_request *req;
CEPH_OSD_OP_WRITE,
flags | CEPH_OSD_OP_ONDISK |
CEPH_OSD_OP_MODIFY,
- snapc, 0,
+ snapc, do_sync,
truncate_seq, truncate_size);
if (IS_ERR(req))
return PTR_ERR(req);
u64 off, u64 len,
u32 truncate_seq, u64 truncate_size,
struct page **pages, int nr_pages,
- int flags);
+ int flags, int do_sync);
extern int ceph_osdc_writepages_start(struct ceph_osd_client *osdc,
struct ceph_osd_request *req,
u64 len,