X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Flinux%2Flinux-misc.h;h=1db78bbc3f201847e6553aef05995aba00dbf0c6;hb=d7249d9d70ac0fcfa665ece78634b495bc9a22cd;hp=bff63ba0294590df42b39ab9c9ff8e78f30b411e;hpb=3453c95f513cd9d65f8e74e64d10d8942d934f01;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/linux/linux-misc.h b/libcfs/include/libcfs/linux/linux-misc.h index bff63ba..1db78bb 100644 --- a/libcfs/include/libcfs/linux/linux-misc.h +++ b/libcfs/include/libcfs/linux/linux-misc.h @@ -34,6 +34,10 @@ #define __LIBCFS_LINUX_MISC_H__ #include +/* Since Commit 2f8b544477e6 ("block,fs: untangle fs.h and blk_types.h") + * fs.h doesn't include blk_types.h, but we need it. + */ +#include #include #include #include @@ -54,8 +58,6 @@ #endif #endif /* HAVE_IOV_ITER_TYPE */ -int cfs_get_environ(const char *key, char *value, int *val_len); - int cfs_kernel_write(struct file *filp, const void *buf, size_t count, loff_t *pos); ssize_t cfs_kernel_read(struct file *file, void *buf, size_t count, @@ -95,6 +97,60 @@ int cfs_apply_workqueue_attrs(struct workqueue_struct *wq, int kstrtobool_from_user(const char __user *s, size_t count, bool *res); #endif /* HAVE_KSTRTOBOOL_FROM_USER */ +#ifndef HAVE_KREF_READ +static inline int kref_read(const struct kref *kref) +{ + return atomic_read(&kref->refcount); +} +#endif /* HAVE_KREF_READ */ + +#ifdef HAVE_FORCE_SIG_WITH_TASK +#define cfs_force_sig(sig, task) force_sig((sig), (task)) +#else +#define cfs_force_sig(sig, task) \ +do { \ + unsigned long flags; \ + \ + spin_lock_irqsave(&task->sighand->siglock, flags); \ + task->sighand->action[sig - 1].sa.sa_handler = SIG_DFL; \ + send_sig(sig, task, 1); \ + spin_unlock_irqrestore(&task->sighand->siglock, flags); \ +} while (0) +#endif + void cfs_arch_init(void); +#ifndef container_of_safe +/** + * container_of_safe - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + * If IS_ERR_OR_NULL(ptr), ptr is returned unchanged. + * + * Note: Copied from Linux 5.6, with BUILD_BUG_ON_MSG section removed. + */ +#define container_of_safe(ptr, type, member) ({ \ + void *__mptr = (void *)(ptr); \ + IS_ERR_OR_NULL(__mptr) ? ERR_CAST(__mptr) : \ + ((type *)(__mptr - offsetof(type, member))); }) +#endif + +/* + * Linux v4.15-rc2-5-g4229a470175b added sizeof_field() + * Linux v5.5-rc4-1-g1f07dcc459d5 removed FIELD_SIZEOF() + * Proved a sizeof_field in terms of FIELD_SIZEOF() when one is not provided + */ +#ifndef sizeof_field +#define sizeof_field(type, member) FIELD_SIZEOF(type, member) +#endif + +#ifndef HAVE_KALLSYMS_LOOKUP_NAME +static inline void *kallsyms_lookup_name(char *func) +{ + return NULL; +} +#endif + #endif /* __LIBCFS_LINUX_MISC_H__ */