X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosc%2Fosc_request.c;h=6cd0a2cfe1d5f70ebe655045bd7960ccbe1a86c7;hb=f7392c7c4a16bc1127ee448f937ba81c50dcdfd5;hp=bea61cd193e6e6b03e39a17fed9e08e287f8c660;hpb=8fc5fc5889c052c3d0ed58da0333dc30e33080e8;p=fs%2Flustre-release.git diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index bea61cd..6cd0a2c 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -1782,9 +1782,8 @@ static void dump_all_bulk_pages(struct obdo *oa, __u32 page_count, * file/fid, not during the resends/retries. */ snprintf(dbgcksum_file_name, sizeof(dbgcksum_file_name), "%s-checksum_dump-osc-"DFID":[%llu-%llu]-%x-%x", - (strncmp(libcfs_debug_file_path_arr, "NONE", 4) != 0 ? - libcfs_debug_file_path_arr : - LIBCFS_DEBUG_FILE_PATH_DEFAULT), + (strncmp(libcfs_debug_file_path, "NONE", 4) != 0 ? + libcfs_debug_file_path : LIBCFS_DEBUG_FILE_PATH_DEFAULT), oa->o_valid & OBD_MD_FLFID ? oa->o_parent_seq : 0ULL, oa->o_valid & OBD_MD_FLFID ? oa->o_parent_oid : 0, oa->o_valid & OBD_MD_FLFID ? oa->o_parent_ver : 0, @@ -3035,19 +3034,17 @@ static int osc_statfs(const struct lu_env *env, struct obd_export *exp, struct obd_device *obd = class_exp2obd(exp); struct obd_statfs *msfs; struct ptlrpc_request *req; - struct obd_import *imp = NULL; + struct obd_import *imp, *imp0; int rc; ENTRY; - - /*Since the request might also come from lprocfs, so we need - *sync this with client_disconnect_export Bug15684*/ - down_read(&obd->u.cli.cl_sem); - if (obd->u.cli.cl_import) - imp = class_import_get(obd->u.cli.cl_import); - up_read(&obd->u.cli.cl_sem); - if (!imp) - RETURN(-ENODEV); + /*Since the request might also come from lprocfs, so we need + *sync this with client_disconnect_export Bug15684 + */ + with_imp_locked(obd, imp0, rc) + imp = class_import_get(imp0); + if (rc) + RETURN(rc); /* We could possibly pass max_age in the request (as an absolute * timestamp or a "seconds.usec ago") so the target can avoid doing @@ -3617,21 +3614,28 @@ static const struct obd_ops osc_obd_ops = { .o_quotactl = osc_quotactl, }; -static struct shrinker *osc_cache_shrinker; LIST_HEAD(osc_shrink_list); DEFINE_SPINLOCK(osc_shrink_lock); -#ifndef HAVE_SHRINKER_COUNT -static int osc_cache_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask)) +#ifdef HAVE_SHRINKER_COUNT +static struct shrinker osc_cache_shrinker = { + .count_objects = osc_cache_shrink_count, + .scan_objects = osc_cache_shrink_scan, + .seeks = DEFAULT_SEEKS, +}; +#else +static int osc_cache_shrink(struct shrinker *shrinker, + struct shrink_control *sc) { - struct shrink_control scv = { - .nr_to_scan = shrink_param(sc, nr_to_scan), - .gfp_mask = shrink_param(sc, gfp_mask) - }; - (void)osc_cache_shrink_scan(shrinker, &scv); + (void)osc_cache_shrink_scan(shrinker, sc); - return osc_cache_shrink_count(shrinker, &scv); + return osc_cache_shrink_count(shrinker, sc); } + +static struct shrinker osc_cache_shrinker = { + .shrink = osc_cache_shrink, + .seeks = DEFAULT_SEEKS, +}; #endif static int __init osc_init(void) @@ -3639,8 +3643,6 @@ static int __init osc_init(void) unsigned int reqpool_size; unsigned int reqsize; int rc; - DEF_SHRINKER_VAR(osc_shvar, osc_cache_shrink, - osc_cache_shrink_count, osc_cache_shrink_scan); ENTRY; /* print an address of _any_ initialized kernel symbol from this @@ -3652,16 +3654,18 @@ static int __init osc_init(void) if (rc) RETURN(rc); - rc = class_register_type(&osc_obd_ops, NULL, true, NULL, + rc = class_register_type(&osc_obd_ops, NULL, true, LUSTRE_OSC_NAME, &osc_device_type); if (rc) GOTO(out_kmem, rc); - osc_cache_shrinker = set_shrinker(DEFAULT_SEEKS, &osc_shvar); + rc = register_shrinker(&osc_cache_shrinker); + if (rc) + GOTO(out_type, rc); /* This is obviously too much memory, only prevent overflow here */ if (osc_reqpool_mem_max >= 1 << 12 || osc_reqpool_mem_max == 0) - GOTO(out_type, rc = -EINVAL); + GOTO(out_shrinker, rc = -EINVAL); reqpool_size = osc_reqpool_mem_max << 20; @@ -3682,7 +3686,7 @@ static int __init osc_init(void) ptlrpc_add_rqs_to_pool); if (osc_rq_pool == NULL) - GOTO(out_type, rc = -ENOMEM); + GOTO(out_shrinker, rc = -ENOMEM); rc = osc_start_grant_work(); if (rc != 0) @@ -3692,6 +3696,8 @@ static int __init osc_init(void) out_req_pool: ptlrpc_free_rq_pool(osc_rq_pool); +out_shrinker: + unregister_shrinker(&osc_cache_shrinker); out_type: class_unregister_type(LUSTRE_OSC_NAME); out_kmem: @@ -3703,7 +3709,7 @@ out_kmem: static void __exit osc_exit(void) { osc_stop_grant_work(); - remove_shrinker(osc_cache_shrinker); + unregister_shrinker(&osc_cache_shrinker); class_unregister_type(LUSTRE_OSC_NAME); lu_kmem_fini(osc_caches); ptlrpc_free_rq_pool(osc_rq_pool);