mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 21:23:23 +00:00
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: 03bc06c7b0bd ("ceph: add new mount option to enable sparse reads") Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Alex Markuze <amarkuze@redhat.com>
This commit is contained in:
parent
66e0c4f914
commit
18d44c5d06
@ -1552,7 +1552,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
|
|||||||
}
|
}
|
||||||
|
|
||||||
op = &req->r_ops[0];
|
op = &req->r_ops[0];
|
||||||
if (sparse) {
|
if (!write && sparse) {
|
||||||
extent_cnt = __ceph_sparse_read_ext_count(inode, size);
|
extent_cnt = __ceph_sparse_read_ext_count(inode, size);
|
||||||
ret = ceph_alloc_sparse_ext_map(op, extent_cnt);
|
ret = ceph_alloc_sparse_ext_map(op, extent_cnt);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -1173,6 +1173,8 @@ EXPORT_SYMBOL(ceph_osdc_new_request);
|
|||||||
|
|
||||||
int __ceph_alloc_sparse_ext_map(struct ceph_osd_req_op *op, int cnt)
|
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_cnt = cnt;
|
||||||
op->extent.sparse_ext = kmalloc_array(cnt,
|
op->extent.sparse_ext = kmalloc_array(cnt,
|
||||||
sizeof(*op->extent.sparse_ext),
|
sizeof(*op->extent.sparse_ext),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user