diff options
Diffstat (limited to 'kernel/drivers/staging/lustre/lustre/lov/lov_io.c')
-rw-r--r-- | kernel/drivers/staging/lustre/lustre/lov/lov_io.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/kernel/drivers/staging/lustre/lustre/lov/lov_io.c b/kernel/drivers/staging/lustre/lustre/lov/lov_io.c index cf96e0d01..5e6228b9c 100644 --- a/kernel/drivers/staging/lustre/lustre/lov/lov_io.c +++ b/kernel/drivers/staging/lustre/lustre/lov/lov_io.c @@ -51,6 +51,7 @@ static inline void lov_sub_enter(struct lov_io_sub *sub) { sub->sub_reenter++; } + static inline void lov_sub_exit(struct lov_io_sub *sub) { sub->sub_reenter--; @@ -70,7 +71,7 @@ static void lov_io_sub_fini(const struct lu_env *env, struct lov_io *lio, if (sub->sub_stripe == lio->lis_single_subio_index) lio->lis_single_subio_index = -1; else if (!sub->sub_borrowed) - OBD_FREE_PTR(sub->sub_io); + kfree(sub->sub_io); sub->sub_io = NULL; } if (sub->sub_env != NULL && !IS_ERR(sub->sub_env)) { @@ -90,7 +91,6 @@ static void lov_io_sub_inherit(struct cl_io *io, struct lov_io *lio, case CIT_SETATTR: { io->u.ci_setattr.sa_attr = parent->u.ci_setattr.sa_attr; io->u.ci_setattr.sa_valid = parent->u.ci_setattr.sa_valid; - io->u.ci_setattr.sa_capa = parent->u.ci_setattr.sa_capa; if (cl_io_is_trunc(io)) { loff_t new_size = parent->u.ci_setattr.sa_attr.lvb_size; @@ -111,7 +111,6 @@ static void lov_io_sub_inherit(struct cl_io *io, struct lov_io *lio, case CIT_FSYNC: { io->u.ci_fsync.fi_start = start; io->u.ci_fsync.fi_end = end; - io->u.ci_fsync.fi_capa = parent->u.ci_fsync.fi_capa; io->u.ci_fsync.fi_fid = parent->u.ci_fsync.fi_fid; io->u.ci_fsync.fi_mode = parent->u.ci_fsync.fi_mode; break; @@ -179,8 +178,9 @@ static int lov_io_sub_init(const struct lu_env *env, struct lov_io *lio, sub->sub_io = &lio->lis_single_subio; lio->lis_single_subio_index = stripe; } else { - OBD_ALLOC_PTR(sub->sub_io); - if (sub->sub_io == NULL) + sub->sub_io = kzalloc(sizeof(*sub->sub_io), + GFP_NOFS); + if (!sub->sub_io) result = -ENOMEM; } } @@ -272,7 +272,6 @@ struct lov_io_sub *lov_page_subio(const struct lu_env *env, struct lov_io *lio, return lov_sub_get(env, lio, stripe); } - static int lov_io_subio_init(const struct lu_env *env, struct lov_io *lio, struct cl_io *io) { @@ -285,8 +284,10 @@ static int lov_io_subio_init(const struct lu_env *env, struct lov_io *lio, * Need to be optimized, we can't afford to allocate a piece of memory * when writing a page. -jay */ - OBD_ALLOC_LARGE(lio->lis_subs, - lsm->lsm_stripe_count * sizeof(lio->lis_subs[0])); + lio->lis_subs = + libcfs_kvzalloc(lsm->lsm_stripe_count * + sizeof(lio->lis_subs[0]), + GFP_NOFS); if (lio->lis_subs != NULL) { lio->lis_nr_subios = lio->lis_stripe_count; lio->lis_single_subio_index = -1; @@ -329,6 +330,7 @@ static void lov_io_slice_init(struct lov_io *lio, case CIT_FAULT: { pgoff_t index = io->u.ci_fault.ft_index; + lio->lis_pos = cl_offset(io->ci_obj, index); lio->lis_endpos = cl_offset(io->ci_obj, index + 1); break; @@ -359,8 +361,7 @@ static void lov_io_fini(const struct lu_env *env, const struct cl_io_slice *ios) if (lio->lis_subs != NULL) { for (i = 0; i < lio->lis_nr_subios; i++) lov_io_sub_fini(env, lio, &lio->lis_subs[i]); - OBD_FREE_LARGE(lio->lis_subs, - lio->lis_nr_subios * sizeof(lio->lis_subs[0])); + kvfree(lio->lis_subs); lio->lis_nr_subios = 0; } @@ -544,7 +545,6 @@ static void lov_io_unlock(const struct lu_env *env, LASSERT(rc == 0); } - static struct cl_page_list *lov_io_submit_qin(struct lov_device *ld, struct cl_page_list *qin, int idx, int alloc) @@ -603,8 +603,10 @@ static int lov_io_submit(const struct lu_env *env, LASSERT(lio->lis_subs != NULL); if (alloc) { - OBD_ALLOC_LARGE(stripes_qin, - sizeof(*stripes_qin) * lio->lis_nr_subios); + stripes_qin = + libcfs_kvzalloc(sizeof(*stripes_qin) * + lio->lis_nr_subios, + GFP_NOFS); if (stripes_qin == NULL) return -ENOMEM; @@ -657,8 +659,7 @@ static int lov_io_submit(const struct lu_env *env, } if (alloc) { - OBD_FREE_LARGE(stripes_qin, - sizeof(*stripes_qin) * lio->lis_nr_subios); + kvfree(stripes_qin); } else { int i; @@ -726,6 +727,8 @@ static int lov_io_fault_start(const struct lu_env *env, fio = &ios->cis_io->u.ci_fault; lio = cl2lov_io(env, ios); sub = lov_sub_get(env, lio, lov_page_stripe(fio->ft_page)); + if (IS_ERR(sub)) + return PTR_ERR(sub); sub->sub_io->u.ci_fault.ft_nob = fio->ft_nob; lov_sub_put(sub); return lov_io_start(env, ios); @@ -987,4 +990,5 @@ int lov_io_init_released(const struct lu_env *env, struct cl_object *obj, io->ci_result = result < 0 ? result : 0; return result != 0; } + /** @} lov */ |