Commit 18d44c5d authored by Ilya Dryomov's avatar Ilya Dryomov
Browse files

ceph: allocate sparse_ext map only for sparse reads



If mounted with sparseread option, ceph_direct_read_write() ends up
making an unnecessarily allocation for O_DIRECT writes.

Fixes: 03bc06c7 ("ceph: add new mount option to enable sparse reads")
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
Reviewed-by: default avatarAlex Markuze <amarkuze@redhat.com>
parent 66e0c4f9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1552,7 +1552,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
		}

		op = &req->r_ops[0];
		if (sparse) {
		if (!write && sparse) {
			extent_cnt = __ceph_sparse_read_ext_count(inode, size);
			ret = ceph_alloc_sparse_ext_map(op, extent_cnt);
			if (ret) {
+2 −0
Original line number Diff line number Diff line
@@ -1173,6 +1173,8 @@ EXPORT_SYMBOL(ceph_osdc_new_request);

int __ceph_alloc_sparse_ext_map(struct ceph_osd_req_op *op, int cnt)
{
	WARN_ON(op->op != CEPH_OSD_OP_SPARSE_READ);

	op->extent.sparse_ext_cnt = cnt;
	op->extent.sparse_ext = kmalloc_array(cnt,
					      sizeof(*op->extent.sparse_ext),