X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fliblustre%2Frw.c;h=fb41272f0397f915d027b1f3ae1e9e9b2e0712a6;hb=ec4b19c47597d9ffcfba83cc8ac0009531bb47df;hp=8c4c686470b88c11dbc28263d2e037c57e115c62;hpb=191061ee668400324f4505cf498f1ee2d57e4962;p=fs%2Flustre-release.git diff --git a/lustre/liblustre/rw.c b/lustre/liblustre/rw.c index 8c4c686..fb41272 100644 --- a/lustre/liblustre/rw.c +++ b/lustre/liblustre/rw.c @@ -32,12 +32,15 @@ #include #include +#ifdef HAVE_XTIO_H #include +#endif #include -#include #include #include +#ifdef HAVE_FILE_H #include +#endif #undef LIST_HEAD @@ -79,7 +82,7 @@ static int llu_lock_to_stripe_offset(struct inode *inode, struct ldlm_lock *lock { struct llu_inode_info *lli = llu_i2info(inode); struct lov_stripe_md *lsm = lli->lli_smd; - struct obd_export *exp = llu_i2obdexp(inode); + struct obd_export *exp = llu_i2dtexp(inode); struct { char name[16]; struct ldlm_lock *lock; @@ -96,7 +99,7 @@ static int llu_lock_to_stripe_offset(struct inode *inode, struct ldlm_lock *lock rc = obd_get_info(exp, sizeof(key), &key, &vallen, &stripe); if (rc != 0) { CERROR("obd_get_info: rc = %d\n", rc); - LBUG(); + RETURN(rc); } LASSERT(stripe < lsm->lsm_stripe_count); RETURN(stripe); @@ -144,10 +147,15 @@ static int llu_extent_lock_callback(struct ldlm_lock *lock, lsm = lli->lli_smd; stripe = llu_lock_to_stripe_offset(inode, lock); - l_lock(&lock->l_resource->lr_namespace->ns_lock); + if (stripe < 0) { + CERROR("lock on inode without such object\n"); + break; + } +#warning "fix l_lock() using here!" +// l_lock(&lock->l_resource->lr_namespace->ns_lock); kms = ldlm_extent_shift_kms(lock, lsm->lsm_oinfo[stripe].loi_kms); - l_unlock(&lock->l_resource->lr_namespace->ns_lock); +// l_unlock(&lock->l_resource->lr_namespace->ns_lock); if (lsm->lsm_oinfo[stripe].loi_kms != kms) LDLM_DEBUG(lock, "updating kms from "LPU64" to "LPU64, lsm->lsm_oinfo[stripe].loi_kms, kms); @@ -181,8 +189,13 @@ static int llu_glimpse_callback(struct ldlm_lock *lock, void *reqp) GOTO(iput, rc = -ELDLM_NO_LOCK_DATA); /* First, find out which stripe index this lock corresponds to. */ - if (lli->lli_smd->lsm_stripe_count > 1) + if (lli->lli_smd->lsm_stripe_count > 1) { stripe = llu_lock_to_stripe_offset(inode, lock); + if (stripe < 0) { + CWARN("lock on inode without such object\n"); + GOTO(iput, rc = -ELDLM_NO_LOCK_DATA); + } + } rc = lustre_pack_reply(req, 1, &size, NULL); if (rc) { @@ -224,7 +237,7 @@ int llu_glimpse_size(struct inode *inode) CDEBUG(D_DLMTRACE, "Glimpsing inode %lu\n", lli->lli_st_ino); - rc = obd_enqueue(sbi->ll_osc_exp, lli->lli_smd, LDLM_EXTENT, &policy, + rc = obd_enqueue(sbi->ll_dt_exp, lli->lli_smd, LDLM_EXTENT, &policy, LCK_PR, &flags, llu_extent_lock_callback, ldlm_completion_ast, llu_glimpse_callback, inode, sizeof(struct ost_lvb), lustre_swab_ost_lvb, &lockh); @@ -240,7 +253,7 @@ int llu_glimpse_size(struct inode *inode) CDEBUG(D_DLMTRACE, "glimpse: size: %llu, blocks: %lu\n", lli->lli_st_size, lli->lli_st_blocks); - obd_cancel(sbi->ll_osc_exp, lli->lli_smd, LCK_PR, &lockh); + obd_cancel(sbi->ll_dt_exp, lli->lli_smd, LCK_PR, &lockh); RETURN(rc); } @@ -265,7 +278,7 @@ int llu_extent_lock(struct ll_file_data *fd, struct inode *inode, CDEBUG(D_DLMTRACE, "Locking inode %lu, start "LPU64" end "LPU64"\n", lli->lli_st_ino, policy->l_extent.start, policy->l_extent.end); - rc = obd_enqueue(sbi->ll_osc_exp, lsm, LDLM_EXTENT, policy, mode, + rc = obd_enqueue(sbi->ll_dt_exp, lsm, LDLM_EXTENT, policy, mode, &ast_flags, llu_extent_lock_callback, ldlm_completion_ast, llu_glimpse_callback, inode, sizeof(struct ost_lvb), lustre_swab_ost_lvb, lockh); @@ -294,7 +307,7 @@ int llu_extent_unlock(struct ll_file_data *fd, struct inode *inode, (sbi->ll_flags & LL_SBI_NOLCK)) RETURN(0); - rc = obd_cancel(sbi->ll_osc_exp, lsm, mode, lockh); + rc = obd_cancel(sbi->ll_dt_exp, lsm, mode, lockh); RETURN(rc); } @@ -309,28 +322,15 @@ struct ll_async_page { struct inode *llap_inode; }; -static struct ll_async_page *llap_from_cookie(void *cookie) -{ - struct ll_async_page *llap = cookie; - if (llap->llap_magic != LLAP_MAGIC) - return ERR_PTR(-EINVAL); - return llap; -}; - static void llu_ap_fill_obdo(void *data, int cmd, struct obdo *oa) { struct ll_async_page *llap; struct inode *inode; struct lov_stripe_md *lsm; - obd_flag valid_flags; + obd_valid valid_flags; ENTRY; - llap = llap_from_cookie(data); - if (IS_ERR(llap)) { - EXIT; - return; - } - + llap = LLAP_FROM_COOKIE(data); inode = llap->llap_inode; lsm = llu_i2info(inode)->lli_smd; @@ -350,12 +350,7 @@ static void llu_ap_completion(void *data, int cmd, struct obdo *oa, int rc) struct ll_async_page *llap; struct page *page; - llap = llap_from_cookie(data); - if (IS_ERR(llap)) { - EXIT; - return; - } - + llap = LLAP_FROM_COOKIE(data); llap->llap_queued = 0; page = llap->llap_page; @@ -379,7 +374,7 @@ static int llu_queue_pio(int cmd, struct llu_io_group *group, { struct llu_inode_info *lli = llu_i2info(group->lig_inode); struct lov_stripe_md *lsm = lli->lli_smd; - struct obd_export *exp = llu_i2obdexp(group->lig_inode); + struct obd_export *exp = llu_i2dtexp(group->lig_inode); struct page *pages = &group->lig_pages[group->lig_npages]; struct ll_async_page *llap = &group->lig_llap[group->lig_npages]; int i, rc, npages = 0, ret_bytes = 0; @@ -492,7 +487,7 @@ static void put_io_group(struct llu_io_group *group) { struct lov_stripe_md *lsm = llu_i2info(group->lig_inode)->lli_smd; - struct obd_export *exp = llu_i2obdexp(group->lig_inode); + struct obd_export *exp = llu_i2dtexp(group->lig_inode); struct ll_async_page *llap = group->lig_llap; int i; @@ -508,9 +503,6 @@ void put_io_group(struct llu_io_group *group) OBD_FREE(group, LLU_IO_GROUP_SIZE(group->lig_maxpages)); } -void lov_increase_kms(struct obd_export *exp, struct lov_stripe_md *lsm, - obd_off size); - static ssize_t llu_file_prwv(const struct iovec *iovec, int iovlen, _SYSIO_OFF_T pos, ssize_t len, @@ -536,7 +528,7 @@ ssize_t llu_file_prwv(const struct iovec *iovec, int iovlen, */ liblustre_wait_event(0); - exp = llu_i2obdexp(inode); + exp = llu_i2dtexp(inode); if (exp == NULL) RETURN(-EINVAL); @@ -619,7 +611,7 @@ ssize_t llu_file_prwv(const struct iovec *iovec, int iovlen, pos += ret; if (!is_read) { LASSERT(ret == count); - lov_increase_kms(exp, lsm, pos); + obd_adjust_kms(exp, lsm, pos, 0); /* file size grow immediately */ if (pos > lli->lli_st_size) lli->lli_st_size = pos;