diff options
Diffstat (limited to 'drivers/staging/lustre/lustre/osc')
-rw-r--r-- | drivers/staging/lustre/lustre/osc/osc_cache.c | 176 | ||||
-rw-r--r-- | drivers/staging/lustre/lustre/osc/osc_cl_internal.h | 2 | ||||
-rw-r--r-- | drivers/staging/lustre/lustre/osc/osc_lock.c | 6 | ||||
-rw-r--r-- | drivers/staging/lustre/lustre/osc/osc_object.c | 3 | ||||
-rw-r--r-- | drivers/staging/lustre/lustre/osc/osc_page.c | 11 | ||||
-rw-r--r-- | drivers/staging/lustre/lustre/osc/osc_request.c | 51 |
6 files changed, 142 insertions, 107 deletions
diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c b/drivers/staging/lustre/lustre/osc/osc_cache.c index 7734d666b7a1..370e6d4896c6 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cache.c +++ b/drivers/staging/lustre/lustre/osc/osc_cache.c @@ -178,76 +178,113 @@ static int osc_extent_sanity_check0(struct osc_extent *ext, int page_count; int rc = 0; - if (!osc_object_is_locked(obj)) - GOTO(out, rc = 9); + if (!osc_object_is_locked(obj)) { + rc = 9; + goto out; + } - if (ext->oe_state >= OES_STATE_MAX) - GOTO(out, rc = 10); + if (ext->oe_state >= OES_STATE_MAX) { + rc = 10; + goto out; + } - if (atomic_read(&ext->oe_refc) <= 0) - GOTO(out, rc = 20); + if (atomic_read(&ext->oe_refc) <= 0) { + rc = 20; + goto out; + } - if (atomic_read(&ext->oe_refc) < atomic_read(&ext->oe_users)) - GOTO(out, rc = 30); + if (atomic_read(&ext->oe_refc) < atomic_read(&ext->oe_users)) { + rc = 30; + goto out; + } switch (ext->oe_state) { case OES_INV: if (ext->oe_nr_pages > 0 || !list_empty(&ext->oe_pages)) - GOTO(out, rc = 35); - GOTO(out, rc = 0); - break; + rc = 35; + else + rc = 0; + goto out; case OES_ACTIVE: - if (atomic_read(&ext->oe_users) == 0) - GOTO(out, rc = 40); - if (ext->oe_hp) - GOTO(out, rc = 50); - if (ext->oe_fsync_wait && !ext->oe_urgent) - GOTO(out, rc = 55); + if (atomic_read(&ext->oe_users) == 0) { + rc = 40; + goto out; + } + if (ext->oe_hp) { + rc = 50; + goto out; + } + if (ext->oe_fsync_wait && !ext->oe_urgent) { + rc = 55; + goto out; + } break; case OES_CACHE: - if (ext->oe_grants == 0) - GOTO(out, rc = 60); - if (ext->oe_fsync_wait && !ext->oe_urgent && !ext->oe_hp) - GOTO(out, rc = 65); + if (ext->oe_grants == 0) { + rc = 60; + goto out; + } + if (ext->oe_fsync_wait && !ext->oe_urgent && !ext->oe_hp) { + rc = 65; + goto out; + } default: - if (atomic_read(&ext->oe_users) > 0) - GOTO(out, rc = 70); + if (atomic_read(&ext->oe_users) > 0) { + rc = 70; + goto out; + } } - if (ext->oe_max_end < ext->oe_end || ext->oe_end < ext->oe_start) - GOTO(out, rc = 80); + if (ext->oe_max_end < ext->oe_end || ext->oe_end < ext->oe_start) { + rc = 80; + goto out; + } - if (ext->oe_osclock == NULL && ext->oe_grants > 0) - GOTO(out, rc = 90); + if (ext->oe_osclock == NULL && ext->oe_grants > 0) { + rc = 90; + goto out; + } if (ext->oe_osclock) { struct cl_lock_descr *descr; descr = &ext->oe_osclock->cll_descr; if (!(descr->cld_start <= ext->oe_start && - descr->cld_end >= ext->oe_max_end)) - GOTO(out, rc = 100); + descr->cld_end >= ext->oe_max_end)) { + rc = 100; + goto out; + } } - if (ext->oe_nr_pages > ext->oe_mppr) - GOTO(out, rc = 105); + if (ext->oe_nr_pages > ext->oe_mppr) { + rc = 105; + goto out; + } /* Do not verify page list if extent is in RPC. This is because an * in-RPC extent is supposed to be exclusively accessible w/o lock. */ - if (ext->oe_state > OES_CACHE) - GOTO(out, rc = 0); + if (ext->oe_state > OES_CACHE) { + rc = 0; + goto out; + } - if (!extent_debug) - GOTO(out, rc = 0); + if (!extent_debug) { + rc = 0; + goto out; + } page_count = 0; list_for_each_entry(oap, &ext->oe_pages, oap_pending_item) { pgoff_t index = oap2cl_page(oap)->cp_index; ++page_count; - if (index > ext->oe_end || index < ext->oe_start) - GOTO(out, rc = 110); + if (index > ext->oe_end || index < ext->oe_start) { + rc = 110; + goto out; + } + } + if (page_count != ext->oe_nr_pages) { + rc = 120; + goto out; } - if (page_count != ext->oe_nr_pages) - GOTO(out, rc = 120); out: if (rc != 0) @@ -536,10 +573,9 @@ static int osc_extent_merge(const struct lu_env *env, struct osc_extent *cur, /** * Drop user count of osc_extent, and unplug IO asynchronously. */ -int osc_extent_release(const struct lu_env *env, struct osc_extent *ext) +void osc_extent_release(const struct lu_env *env, struct osc_extent *ext) { struct osc_object *obj = ext->oe_obj; - int rc = 0; LASSERT(atomic_read(&ext->oe_users) > 0); LASSERT(sanity_check(ext) == 0); @@ -571,7 +607,6 @@ int osc_extent_release(const struct lu_env *env, struct osc_extent *ext) osc_io_unplug_async(env, osc_cli(obj), obj); } osc_extent_put(env, ext); - return rc; } static inline int overlapped(struct osc_extent *ex1, struct osc_extent *ex2) @@ -776,8 +811,10 @@ restart: rc = osc_extent_wait(env, conflict, OES_INV); osc_extent_put(env, conflict); conflict = NULL; - if (rc < 0) - GOTO(out, found = ERR_PTR(rc)); + if (rc < 0) { + found = ERR_PTR(rc); + goto out; + } goto restart; } @@ -934,7 +971,7 @@ static int osc_extent_truncate(struct osc_extent *ext, pgoff_t trunc_index, io->ci_obj = cl_object_top(osc2cl(obj)); rc = cl_io_init(env, io, CIT_MISC, io->ci_obj); if (rc < 0) - GOTO(out, rc); + goto out; /* discard all pages with index greater then trunc_index */ list_for_each_entry_safe(oap, tmp, &ext->oe_pages, @@ -1114,21 +1151,27 @@ static int osc_extent_expand(struct osc_extent *ext, pgoff_t index, int *grants) osc_object_lock(obj); LASSERT(sanity_check_nolock(ext) == 0); end_chunk = ext->oe_end >> ppc_bits; - if (chunk > end_chunk + 1) - GOTO(out, rc = -ERANGE); + if (chunk > end_chunk + 1) { + rc = -ERANGE; + goto out; + } - if (end_chunk >= chunk) - GOTO(out, rc = 0); + if (end_chunk >= chunk) { + rc = 0; + goto out; + } LASSERT(end_chunk + 1 == chunk); /* try to expand this extent to cover @index */ end_index = min(ext->oe_max_end, ((chunk + 1) << ppc_bits) - 1); next = next_extent(ext); - if (next != NULL && next->oe_start <= end_index) + if (next != NULL && next->oe_start <= end_index) { /* complex mode - overlapped with the next extent, * this case will be handled by osc_extent_find() */ - GOTO(out, rc = -EAGAIN); + rc = -EAGAIN; + goto out; + } ext->oe_end = end_index; ext->oe_grants += chunksize; @@ -1497,12 +1540,16 @@ static int osc_enter_cache(const struct lu_env *env, struct client_obd *cli, * of queued writes and create a discontiguous rpc stream */ if (OBD_FAIL_CHECK(OBD_FAIL_OSC_NO_GRANT) || cli->cl_dirty_max < PAGE_CACHE_SIZE || - cli->cl_ar.ar_force_sync || loi->loi_ar.ar_force_sync) - GOTO(out, rc = -EDQUOT); + cli->cl_ar.ar_force_sync || loi->loi_ar.ar_force_sync) { + rc = -EDQUOT; + goto out; + } /* Hopefully normal case - cache space and write credits available */ - if (osc_enter_cache_try(cli, oap, bytes, 0)) - GOTO(out, rc = 0); + if (osc_enter_cache_try(cli, oap, bytes, 0)) { + rc = 0; + goto out; + } /* We can get here for two reasons: too many dirty pages in cache, or * run out of grants. In both cases we should write dirty pages out. @@ -1530,16 +1577,18 @@ static int osc_enter_cache(const struct lu_env *env, struct client_obd *cli, /* l_wait_event is interrupted by signal */ if (rc < 0) { list_del_init(&ocw.ocw_entry); - GOTO(out, rc); + goto out; } LASSERT(list_empty(&ocw.ocw_entry)); rc = ocw.ocw_rc; if (rc != -EDQUOT) - GOTO(out, rc); - if (osc_enter_cache_try(cli, oap, bytes, 0)) - GOTO(out, rc = 0); + goto out; + if (osc_enter_cache_try(cli, oap, bytes, 0)) { + rc = 0; + goto out; + } } out: client_obd_list_unlock(&cli->cl_loi_list_lock); @@ -1562,8 +1611,8 @@ void osc_wake_cache_waiters(struct client_obd *cli) if ((cli->cl_dirty + PAGE_CACHE_SIZE > cli->cl_dirty_max) || (atomic_read(&obd_dirty_pages) + 1 > obd_max_dirty_pages)) { - CDEBUG(D_CACHE, "no dirty room: dirty: %ld " - "osc max %ld, sys max %d\n", cli->cl_dirty, + CDEBUG(D_CACHE, "no dirty room: dirty: %ld osc max %ld, sys max %d\n", + cli->cl_dirty, cli->cl_dirty_max, obd_max_dirty_pages); goto wakeup; } @@ -2401,14 +2450,15 @@ int osc_flush_async_page(const struct lu_env *env, struct cl_io *io, * one making the extent active, we could deadlock waiting for * the page writeback to clear but it won't because the extent * is active and won't be written out. */ - GOTO(out, rc = -EAGAIN); + rc = -EAGAIN; + goto out; default: break; } rc = cl_page_prep(env, io, cl_page_top(cp), CRT_WRITE); if (rc) - GOTO(out, rc); + goto out; spin_lock(&oap->oap_lock); oap->oap_async_flags |= ASYNC_READY|ASYNC_URGENT; diff --git a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h index ebbd95c0cea8..365b2787b3c8 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h @@ -678,7 +678,7 @@ struct osc_extent { int osc_extent_finish(const struct lu_env *env, struct osc_extent *ext, int sent, int rc); -int osc_extent_release(const struct lu_env *env, struct osc_extent *ext); +void osc_extent_release(const struct lu_env *env, struct osc_extent *ext); /** @} osc */ diff --git a/drivers/staging/lustre/lustre/osc/osc_lock.c b/drivers/staging/lustre/lustre/osc/osc_lock.c index 8138856fda8c..a7f08bc48166 100644 --- a/drivers/staging/lustre/lustre/osc/osc_lock.c +++ b/drivers/staging/lustre/lustre/osc/osc_lock.c @@ -1067,14 +1067,12 @@ static int osc_lock_enqueue_wait(const struct lu_env *env, * conflicts, we do not wait but return 0 so the * request is send to the server */ - CDEBUG(D_DLMTRACE, "group lock %p is conflicted " - "with %p, no wait, send to server\n", + CDEBUG(D_DLMTRACE, "group lock %p is conflicted with %p, no wait, send to server\n", lock, conflict); cl_lock_put(env, conflict); rc = 0; } else { - CDEBUG(D_DLMTRACE, "lock %p is conflicted with %p, " - "will wait\n", + CDEBUG(D_DLMTRACE, "lock %p is conflicted with %p, will wait\n", lock, conflict); LASSERT(lock->cll_conflict == NULL); lu_ref_add(&conflict->cll_reference, "cancel-wait", diff --git a/drivers/staging/lustre/lustre/osc/osc_object.c b/drivers/staging/lustre/lustre/osc/osc_object.c index 69000584619d..92c202f70395 100644 --- a/drivers/staging/lustre/lustre/osc/osc_object.c +++ b/drivers/staging/lustre/lustre/osc/osc_object.c @@ -140,8 +140,7 @@ static int osc_object_print(const struct lu_env *env, void *cookie, struct lov_oinfo *oinfo = osc->oo_oinfo; struct osc_async_rc *ar = &oinfo->loi_ar; - (*p)(env, cookie, "id: "DOSTID" " - "idx: %d gen: %d kms_valid: %u kms %llu rc: %d force_sync: %d min_xid: %llu ", + (*p)(env, cookie, "id: " DOSTID " idx: %d gen: %d kms_valid: %u kms %llu rc: %d force_sync: %d min_xid: %llu ", POSTID(&oinfo->loi_oi), oinfo->loi_ost_idx, oinfo->loi_ost_gen, oinfo->loi_kms_valid, oinfo->loi_kms, ar->ar_rc, ar->ar_force_sync, ar->ar_min_xid); diff --git a/drivers/staging/lustre/lustre/osc/osc_page.c b/drivers/staging/lustre/lustre/osc/osc_page.c index fcd079b1af01..76ba58b09c5d 100644 --- a/drivers/staging/lustre/lustre/osc/osc_page.c +++ b/drivers/staging/lustre/lustre/osc/osc_page.c @@ -369,12 +369,7 @@ static int osc_page_print(const struct lu_env *env, struct osc_object *obj = cl2osc(slice->cpl_obj); struct client_obd *cli = &osc_export(obj)->exp_obd->u.cli; - return (*printer)(env, cookie, LUSTRE_OSC_NAME"-page@%p: " - "1< %#x %d %u %s %s > " - "2< %llu %u %u %#x %#x | %p %p %p > " - "3< %s %p %d %lu %d > " - "4< %d %d %d %lu %s | %s %s %s %s > " - "5< %s %s %s %s | %d %s | %d %s %s>\n", + return (*printer)(env, cookie, LUSTRE_OSC_NAME "-page@%p: 1< %#x %d %u %s %s > 2< %llu %u %u %#x %#x | %p %p %p > 3< %s %p %d %lu %d > 4< %d %d %d %lu %s | %s %s %s %s > 5< %s %s %s %s | %d %s | %d %s %s>\n", opg, /* 1 */ oap->oap_magic, oap->oap_cmd, @@ -550,8 +545,8 @@ void osc_page_submit(const struct lu_env *env, struct osc_page *opg, LINVRNT(osc_page_protected(env, opg, crt == CRT_WRITE ? CLM_WRITE : CLM_READ, 1)); - LASSERTF(oap->oap_magic == OAP_MAGIC, "Bad oap magic: oap %p, " - "magic 0x%x\n", oap, oap->oap_magic); + LASSERTF(oap->oap_magic == OAP_MAGIC, "Bad oap magic: oap %p, magic 0x%x\n", + oap, oap->oap_magic); LASSERT(oap->oap_async_flags & ASYNC_READY); LASSERT(oap->oap_async_flags & ASYNC_COUNT_STABLE); diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index 44657a06b8a5..b9450b95f1c5 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -1078,9 +1078,9 @@ static void osc_init_grant(struct client_obd *cli, struct obd_connect_data *ocd) cli->cl_chunkbits = max_t(int, PAGE_CACHE_SHIFT, ocd->ocd_blocksize); client_obd_list_unlock(&cli->cl_loi_list_lock); - CDEBUG(D_CACHE, "%s, setting cl_avail_grant: %ld cl_lost_grant: %ld." - "chunk bits: %d.\n", cli->cl_import->imp_obd->obd_name, - cli->cl_avail_grant, cli->cl_lost_grant, cli->cl_chunkbits); + CDEBUG(D_CACHE, "%s, setting cl_avail_grant: %ld cl_lost_grant: %ld chunk bits: %d\n", + cli->cl_import->imp_obd->obd_name, + cli->cl_avail_grant, cli->cl_lost_grant, cli->cl_chunkbits); if (ocd->ocd_connect_flags & OBD_CONNECT_GRANT_SHRINK && list_empty(&cli->cl_grant_shrink_list)) @@ -1171,8 +1171,7 @@ static inline int can_merge_pages(struct brw_page *p1, struct brw_page *p2) /* warn if we try to combine flags that we don't know to be * safe to combine */ if (unlikely((p1->flag & mask) != (p2->flag & mask))) { - CWARN("Saw flags 0x%x and 0x%x in the same brw, please " - "report this at http://bugs.whamcloud.com/\n", + CWARN("Saw flags 0x%x and 0x%x in the same brw, please report this at http://bugs.whamcloud.com/\n", p1->flag, p2->flag); } return 0; @@ -1343,8 +1342,7 @@ static int osc_brw_prep_request(int cmd, struct client_obd *cli, "i: %d/%d pg: %p off: %llu, count: %u\n", i, page_count, pg, pg->off, pg->count); LASSERTF(i == 0 || pg->off > pg_prev->off, - "i %d p_c %u pg %p [pri %lu ind %lu] off %llu" - " prev_pg %p [pri %lu ind %lu] off %llu\n", + "i %d p_c %u pg %p [pri %lu ind %lu] off %llu prev_pg %p [pri %lu ind %lu] off %llu\n", i, page_count, pg->pg, page_private(pg->pg), pg->pg->index, pg->off, pg_prev->pg, page_private(pg_prev->pg), @@ -1467,16 +1465,16 @@ static int check_write_checksum(struct obdo *oa, const lnet_process_id_t *peer, cksum_type); if (cksum_type != client_cksum_type) - msg = "the server did not use the checksum type specified in " - "the original request - likely a protocol problem"; + msg = "the server did not use the checksum type specified in the original request - likely a protocol problem" + ; else if (new_cksum == server_cksum) - msg = "changed on the client after we checksummed it - " - "likely false positive due to mmap IO (bug 11742)"; + msg = "changed on the client after we checksummed it - likely false positive due to mmap IO (bug 11742)" + ; else if (new_cksum == client_cksum) msg = "changed in transit before arrival at OST"; else - msg = "changed in transit AND doesn't match the original - " - "likely false positive due to mmap IO (bug 11742)"; + msg = "changed in transit AND doesn't match the original - likely false positive due to mmap IO (bug 11742)" + ; LCONSOLE_ERROR_MSG(0x132, "BAD WRITE CHECKSUM: %s: from %s inode "DFID " object "DOSTID" extent [%llu-%llu]\n", @@ -1486,8 +1484,8 @@ static int check_write_checksum(struct obdo *oa, const lnet_process_id_t *peer, oa->o_valid & OBD_MD_FLFID ? oa->o_parent_ver : 0, POSTID(&oa->o_oi), pga[0]->off, pga[page_count-1]->off + pga[page_count-1]->count - 1); - CERROR("original client csum %x (type %x), server csum %x (type %x), " - "client csum now %x\n", client_cksum, client_cksum_type, + CERROR("original client csum %x (type %x), server csum %x (type %x), client csum now %x\n", + client_cksum, client_cksum_type, server_cksum, cksum_type, new_cksum); return 1; } @@ -1601,23 +1599,21 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) } if (server_cksum != client_cksum) { - LCONSOLE_ERROR_MSG(0x133, "%s: BAD READ CHECKSUM: from " - "%s%s%s inode "DFID" object "DOSTID - " extent [%llu-%llu]\n", + LCONSOLE_ERROR_MSG(0x133, "%s: BAD READ CHECKSUM: from %s%s%s inode " DFID " object " DOSTID " extent [%llu-%llu]\n", req->rq_import->imp_obd->obd_name, libcfs_nid2str(peer->nid), via, router, body->oa.o_valid & OBD_MD_FLFID ? - body->oa.o_parent_seq : (__u64)0, + body->oa.o_parent_seq : (__u64)0, body->oa.o_valid & OBD_MD_FLFID ? - body->oa.o_parent_oid : 0, + body->oa.o_parent_oid : 0, body->oa.o_valid & OBD_MD_FLFID ? - body->oa.o_parent_ver : 0, + body->oa.o_parent_ver : 0, POSTID(&body->oa.o_oi), aa->aa_ppga[0]->off, aa->aa_ppga[aa->aa_page_count-1]->off + aa->aa_ppga[aa->aa_page_count-1]->count - - 1); + 1); CERROR("client %x, server %x, cksum_type %x\n", client_cksum, server_cksum, cksum_type); cksum_counter = 0; @@ -1771,8 +1767,7 @@ static int brw_interpret(const struct lu_env *env, if (osc_recoverable_error(rc)) { if (req->rq_import_generation != req->rq_import->imp_generation) { - CDEBUG(D_HA, "%s: resend cross eviction for object: " - ""DOSTID", rc = %d.\n", + CDEBUG(D_HA, "%s: resend cross eviction for object: " DOSTID ", rc = %d.\n", req->rq_import->imp_obd->obd_name, POSTID(&aa->aa_oa->o_oi), rc); } else if (rc == -EINPROGRESS || @@ -3013,8 +3008,8 @@ static int osc_reconnect(const struct lu_env *env, cli->cl_lost_grant = 0; client_obd_list_unlock(&cli->cl_loi_list_lock); - CDEBUG(D_RPCTRACE, "ocd_connect_flags: %#llx ocd_version: %d" - " ocd_grant: %d, lost: %ld.\n", data->ocd_connect_flags, + CDEBUG(D_RPCTRACE, "ocd_connect_flags: %#llx ocd_version: %d ocd_grant: %d, lost: %ld.\n", + data->ocd_connect_flags, data->ocd_version, data->ocd_grant, lost_grant); } @@ -3217,8 +3212,6 @@ out_ptlrpcd: static int osc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) { - int rc = 0; - switch (stage) { case OBD_CLEANUP_EARLY: { struct obd_import *imp; @@ -3253,7 +3246,7 @@ static int osc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) break; } } - return rc; + return 0; } int osc_cleanup(struct obd_device *obd) |