X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Fobd_class.h;h=964baf15ef848229c36969e964cfad603e2f63a8;hp=9ad5ec805d318d95d7df04707f8ecc3409ad15c0;hb=0ad54d59777366fba8ee61eaaa27b3060c91782f;hpb=a829595add808d0fb09bab525c500d0aa6955883 diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h index 9ad5ec8..964baf1 100644 --- a/lustre/include/obd_class.h +++ b/lustre/include/obd_class.h @@ -58,12 +58,16 @@ int lustre_get_jobid(char *jobid, size_t len); void lustre_jobid_clear(const char *jobid); void jobid_cache_fini(void); int jobid_cache_init(void); +char *jobid_current(void); +int jobid_set_current(char *jobid); struct lu_device_type; /* genops.c */ struct obd_export *class_conn2export(struct lustre_handle *); -struct kobject *class_setup_tunables(const char *name); +#ifdef HAVE_SERVER_SUPPORT +struct obd_type *class_add_symlinks(const char *name, bool enable_proc); +#endif int class_register_type(struct obd_ops *, struct md_ops *, bool enable_proc, struct lprocfs_vars *module_vars, const char *nm, struct lu_device_type *ldt); @@ -82,7 +86,7 @@ int class_uuid2dev(struct obd_uuid *uuid); struct obd_device *class_uuid2obd(struct obd_uuid *uuid); void class_obd_list(void); struct obd_device * class_find_client_obd(struct obd_uuid *tgt_uuid, - const char * typ_name, + const char *type_name, struct obd_uuid *grp_uuid); struct obd_device * class_devices_in_group(struct obd_uuid *grp_uuid, int *next); @@ -125,10 +129,8 @@ __u16 obd_get_max_mod_rpcs_in_flight(struct client_obd *cli); int obd_set_max_mod_rpcs_in_flight(struct client_obd *cli, __u16 max); int obd_mod_rpc_stats_seq_show(struct client_obd *cli, struct seq_file *seq); -__u16 obd_get_mod_rpc_slot(struct client_obd *cli, __u32 opc, - struct lookup_intent *it); -void obd_put_mod_rpc_slot(struct client_obd *cli, __u32 opc, - struct lookup_intent *it, __u16 tag); +__u16 obd_get_mod_rpc_slot(struct client_obd *cli, __u32 opc); +void obd_put_mod_rpc_slot(struct client_obd *cli, __u32 opc, __u16 tag); struct llog_handle; struct llog_rec_hdr; @@ -154,8 +156,6 @@ int class_process_config(struct lustre_cfg *lcfg); ssize_t class_set_global(const char *param); ssize_t class_modify_config(struct lustre_cfg *lcfg, const char *prefix, struct kobject *kobj); -int class_process_proc_param(char *prefix, struct lprocfs_vars *lvars, - struct lustre_cfg *lcfg, void *data); int class_attach(struct lustre_cfg *lcfg); int class_setup(struct obd_device *obd, struct lustre_cfg *lcfg); int class_cleanup(struct obd_device *obd, struct lustre_cfg *lcfg); @@ -247,6 +247,7 @@ static inline bool logname_is_barrier(const char *logname) /* list of active configuration logs */ struct config_llog_data { struct ldlm_res_id cld_resid; + struct lustre_handle cld_lockh; struct config_llog_instance cld_cfg; struct list_head cld_list_chain;/* on config_llog_list */ atomic_t cld_refcount; @@ -357,8 +358,10 @@ void class_import_put(struct obd_import *); struct obd_import *class_new_import(struct obd_device *obd); void class_destroy_import(struct obd_import *exp); +#ifdef HAVE_SERVER_SUPPORT struct obd_type *class_search_type(const char *name); struct obd_type *class_get_type(const char *name); +#endif void class_put_type(struct obd_type *type); int class_connect(struct lustre_handle *conn, struct obd_device *obd, struct obd_uuid *cluuid); @@ -574,12 +577,19 @@ static inline int obd_precleanup(struct obd_device *obd) ENTRY; if (ldt != NULL && d != NULL) { - struct lu_env env; - - rc = lu_env_init(&env, ldt->ldt_ctx_tags); - if (rc == 0) { - ldt->ldt_ops->ldto_device_fini(&env, d); - lu_env_fini(&env); + struct lu_env *env = lu_env_find(); + struct lu_env _env; + + if (!env) { + env = &_env; + rc = lu_env_init(env, ldt->ldt_ctx_tags); + LASSERT(rc == 0); + lu_env_add(env); + } + ldt->ldt_ops->ldto_device_fini(env, d); + if (env == &_env) { + lu_env_remove(env); + lu_env_fini(env); } } @@ -911,19 +921,6 @@ static inline int obd_fid_alloc(const struct lu_env *env, RETURN(rc); } -static inline int obd_ping(const struct lu_env *env, struct obd_export *exp) -{ - int rc; - ENTRY; - - if (!exp->exp_obd->obd_type || - !exp->exp_obd->obd_type->typ_dt_ops->o_ping) - RETURN(0); - - rc = OBP(exp->exp_obd, ping)(env, exp); - RETURN(rc); -} - static inline int obd_pool_new(struct obd_device *obd, char *poolname) { int rc; @@ -1027,21 +1024,8 @@ static inline int obd_statfs_async(struct obd_export *exp, CDEBUG(D_SUPER, "%s: age %lld, max_age %lld\n", obd->obd_name, obd->obd_osfs_age, max_age); - if (obd->obd_osfs_age < max_age) { - rc = OBP(obd, statfs_async)(exp, oinfo, max_age, rqset); - } else { - CDEBUG(D_SUPER, - "%s: use %p cache blocks %llu/%llu objects %llu/%llu\n", - obd->obd_name, &obd->obd_osfs, - obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, - obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); - spin_lock(&obd->obd_osfs_lock); - memcpy(oinfo->oi_osfs, &obd->obd_osfs, sizeof(*oinfo->oi_osfs)); - spin_unlock(&obd->obd_osfs_lock); - oinfo->oi_flags |= OBD_STATFS_FROM_CACHE; - if (oinfo->oi_cb_up) - oinfo->oi_cb_up(oinfo, 0); - } + rc = OBP(obd, statfs_async)(exp, oinfo, max_age, rqset); + RETURN(rc); } @@ -1073,13 +1057,31 @@ static inline int obd_statfs(const struct lu_env *env, struct obd_export *exp, if (obd->obd_osfs_age < max_age || ((obd->obd_osfs.os_state & OS_STATE_SUM) && !(flags & OBD_STATFS_SUM))) { - rc = OBP(obd, statfs)(env, exp, osfs, max_age, flags); + bool update_age = false; + /* the RPC will block anyway, so avoid sending many at once */ + rc = mutex_lock_interruptible(&obd->obd_dev_mutex); + if (rc) + RETURN(rc); + if (obd->obd_osfs_age < max_age || + ((obd->obd_osfs.os_state & OS_STATE_SUM) && + !(flags & OBD_STATFS_SUM))) { + rc = OBP(obd, statfs)(env, exp, osfs, max_age, flags); + update_age = true; + } else { + CDEBUG(D_SUPER, + "%s: new %p cache blocks %llu/%llu objects %llu/%llu\n", + obd->obd_name, &obd->obd_osfs, + obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, + obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); + } if (rc == 0) { spin_lock(&obd->obd_osfs_lock); memcpy(&obd->obd_osfs, osfs, sizeof(obd->obd_osfs)); - obd->obd_osfs_age = ktime_get_seconds(); + if (update_age) + obd->obd_osfs_age = ktime_get_seconds(); spin_unlock(&obd->obd_osfs_lock); } + mutex_unlock(&obd->obd_dev_mutex); } else { CDEBUG(D_SUPER, "%s: use %p cache blocks %llu/%llu objects %llu/%llu\n", @@ -1780,6 +1782,18 @@ static inline int md_unpackmd(struct obd_export *exp, return MDP(exp->exp_obd, unpackmd)(exp, plsm, lmm, lmm_size); } +static inline int md_rmfid(struct obd_export *exp, struct fid_array *fa, + int *rcs, struct ptlrpc_request_set *set) +{ + int rc; + + rc = exp_check_ops(exp); + if (rc) + return rc; + + return MDP(exp->exp_obd, rmfid)(exp, fa, rcs, set); +} + /* OBD Metadata Support */ extern int obd_init_caches(void); @@ -1815,15 +1829,6 @@ int lustre_register_fs(void); int lustre_unregister_fs(void); int lustre_check_exclusion(struct super_block *sb, char *svname); -typedef __u8 class_uuid_t[16]; -static inline void class_uuid_unparse(class_uuid_t uu, struct obd_uuid *out) -{ - snprintf(out->uuid, sizeof(out->uuid), "%02x%02x%02x%02x-%02x%02x-" - "%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", - uu[14], uu[15], uu[12], uu[13], uu[10], uu[11], uu[8], uu[9], - uu[6], uu[7], uu[4], uu[5], uu[2], uu[3], uu[0], uu[1]); -} - /* lustre_peer.c */ int lustre_uuid_to_peer(const char *uuid, lnet_nid_t *peer_nid, int index); int class_add_uuid(const char *uuid, __u64 nid); @@ -1833,21 +1838,17 @@ int class_check_uuid(struct obd_uuid *uuid, __u64 nid); /* class_obd.c */ extern char obd_jobid_name[]; -/* prng.c */ -#define ll_generate_random_uuid(uuid_out) cfs_get_random_bytes(uuid_out, sizeof(class_uuid_t)) - /* statfs_pack.c */ struct kstatfs; void statfs_pack(struct obd_statfs *osfs, struct kstatfs *sfs); void statfs_unpack(struct kstatfs *sfs, struct obd_statfs *osfs); /* root squash info */ -struct rw_semaphore; struct root_squash_info { uid_t rsi_uid; gid_t rsi_gid; struct list_head rsi_nosquash_nids; - struct rw_semaphore rsi_sem; + spinlock_t rsi_lock; }; int server_name2index(const char *svname, __u32 *idx, const char **endptr); @@ -1857,4 +1858,15 @@ extern struct miscdevice obd_psdev; int obd_ioctl_getdata(char **buf, int *len, void __user *arg); int class_procfs_init(void); int class_procfs_clean(void); + +extern void obd_heat_add(struct obd_heat_instance *instance, + unsigned int time_second, __u64 count, + unsigned int weight, unsigned int period_second); +extern void obd_heat_decay(struct obd_heat_instance *instance, + __u64 time_second, unsigned int weight, + unsigned int period_second); +extern __u64 obd_heat_get(struct obd_heat_instance *instance, + unsigned int time_second, unsigned int weight, + unsigned int period_second); +extern void obd_heat_clear(struct obd_heat_instance *instance, int count); #endif /* __LINUX_OBD_CLASS_H */