static inline int mgs_destroy_export(struct obd_export *exp) { ENTRY; target_destroy_export(exp); mgs_client_free(exp); if (unlikely(obd_uuid_equals(&exp->exp_obd->obd_uuid, &exp->exp_client_uuid))) RETURN(0); ldlm_destroy_export(exp); RETURN(0); }
/** * Implementation of obd_ops::o_destroy_export. * * This function is called from class_export_destroy() to cleanup * the OFD-specific data for export being destroyed. * * \param[in] exp OBD export * * \retval 0 if successful * \retval negative value on error */ static int ofd_destroy_export(struct obd_export *exp) { struct ofd_device *ofd = ofd_exp(exp); if (exp->exp_filter_data.fed_pending) CERROR("%s: cli %s/%p has %lu pending on destroyed export" "\n", exp->exp_obd->obd_name, exp->exp_client_uuid.uuid, exp, exp->exp_filter_data.fed_pending); target_destroy_export(exp); if (unlikely(obd_uuid_equals(&exp->exp_obd->obd_uuid, &exp->exp_client_uuid))) return 0; ldlm_destroy_export(exp); tgt_client_free(exp); ofd_fmd_cleanup(exp); /* * discard grants once we're sure no more * interaction with the client is possible */ ofd_grant_discard(exp); ofd_fmd_cleanup(exp); if (exp_connect_flags(exp) & OBD_CONNECT_GRANT_SHRINK) { if (ofd->ofd_tot_granted_clients > 0) ofd->ofd_tot_granted_clients --; } if (!(exp->exp_flags & OBD_OPT_FORCE)) ofd_grant_sanity_check(exp->exp_obd, __FUNCTION__); LASSERT(list_empty(&exp->exp_filter_data.fed_mod_list)); return 0; }