/* Initialize the default and maximum LOV EA and cookie sizes. This allows * us to make MDS RPCs with large enough reply buffers to hold the * maximum-sized (= maximum striped) EA and cookie without having to * calculate this (via a call into the LOV + OSCs) each time we make an RPC. */ int cl_init_ea_size(struct obd_export *md_exp, struct obd_export *dt_exp) { struct lov_stripe_md lsm = { .lsm_magic = LOV_MAGIC_V3 }; __u32 valsize = sizeof(struct lov_desc); int rc, easize, def_easize, cookiesize; struct lov_desc desc; __u16 stripes; ENTRY; rc = obd_get_info(NULL, dt_exp, sizeof(KEY_LOVDESC), KEY_LOVDESC, &valsize, &desc, NULL); if (rc) RETURN(rc); stripes = min(desc.ld_tgt_count, (__u32)LOV_MAX_STRIPE_COUNT); lsm.lsm_stripe_count = stripes; easize = obd_size_diskmd(dt_exp, &lsm); lsm.lsm_stripe_count = desc.ld_default_stripe_count; def_easize = obd_size_diskmd(dt_exp, &lsm); cookiesize = stripes * sizeof(struct llog_cookie); CDEBUG(D_HA, "updating max_mdsize/max_cookiesize: %d/%d\n", easize, cookiesize); rc = md_init_ea_size(md_exp, easize, def_easize, cookiesize); RETURN(rc); }
/* Initialize the default and maximum LOV EA and cookie sizes. This allows * us to make MDS RPCs with large enough reply buffers to hold the * maximum-sized (= maximum striped) EA and cookie without having to * calculate this (via a call into the LOV + OSCs) each time we make an RPC. */ static int cl_init_ea_size(struct obd_export *md_exp, struct obd_export *dt_exp) { u32 val_size; u32 max_easize; u32 def_easize; int rc; ENTRY; val_size = sizeof(max_easize); rc = obd_get_info(NULL, dt_exp, sizeof(KEY_MAX_EASIZE), KEY_MAX_EASIZE, &val_size, &max_easize); if (rc != 0) RETURN(rc); val_size = sizeof(def_easize); rc = obd_get_info(NULL, dt_exp, sizeof(KEY_DEFAULT_EASIZE), KEY_DEFAULT_EASIZE, &val_size, &def_easize); if (rc != 0) RETURN(rc); /* default cookiesize is 0 because from 2.4 server doesn't send * llog cookies to client. */ CDEBUG(D_HA, "updating def/max_easize: %d/%d\n", def_easize, max_easize); rc = md_init_ea_size(md_exp, max_easize, def_easize); RETURN(rc); }
/* Initialize the default and maximum LOV EA and cookie sizes. This allows * us to make MDS RPCs with large enough reply buffers to hold the * maximum-sized (= maximum striped) EA and cookie without having to * calculate this (via a call into the LOV + OSCs) each time we make an RPC. */ int cl_init_ea_size(struct obd_export *md_exp, struct obd_export *dt_exp) { struct lov_stripe_md lsm = { .lsm_magic = LOV_MAGIC_V3 }; __u32 valsize = sizeof(struct lov_desc); int rc, easize, def_easize, cookiesize; struct lov_desc desc; __u16 stripes, def_stripes; rc = obd_get_info(NULL, dt_exp, sizeof(KEY_LOVDESC), KEY_LOVDESC, &valsize, &desc, NULL); if (rc) return rc; stripes = min_t(__u32, desc.ld_tgt_count, LOV_MAX_STRIPE_COUNT); lsm.lsm_stripe_count = stripes; easize = obd_size_diskmd(dt_exp, &lsm); def_stripes = min_t(__u32, desc.ld_default_stripe_count, LOV_MAX_STRIPE_COUNT); lsm.lsm_stripe_count = def_stripes; def_easize = obd_size_diskmd(dt_exp, &lsm); cookiesize = stripes * sizeof(struct llog_cookie); /* default cookiesize is 0 because from 2.4 server doesn't send * llog cookies to client. */ CDEBUG(D_HA, "updating def/max_easize: %d/%d def/max_cookiesize: 0/%d\n", def_easize, easize, cookiesize); rc = md_init_ea_size(md_exp, easize, def_easize, cookiesize, 0); return rc; }