X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Flustre_compat.h;h=3ebef7a2ab6a19902e133a01cae07c2fbaf6e6b1;hp=284f4ee39250a30158882cdca8bcaf7bbf2203dc;hb=a0a3a29deb82656f9639f46847deac2689973893;hpb=f172b116885753d0f316549a2fb9d451e9b4bd2e diff --git a/lustre/include/lustre_compat.h b/lustre/include/lustre_compat.h index 284f4ee..3ebef7a 100644 --- a/lustre/include/lustre_compat.h +++ b/lustre/include/lustre_compat.h @@ -38,78 +38,19 @@ #include #include #include +#include #include #include #include #include +#include #include -#include #include -#ifdef HAVE_FS_STRUCT_RWLOCK -# define LOCK_FS_STRUCT(fs) write_lock(&(fs)->lock) -# define UNLOCK_FS_STRUCT(fs) write_unlock(&(fs)->lock) -#else -# define LOCK_FS_STRUCT(fs) spin_lock(&(fs)->lock) -# define UNLOCK_FS_STRUCT(fs) spin_unlock(&(fs)->lock) -#endif - -#ifdef HAVE_FS_STRUCT_SEQCOUNT -# define WRITE_FS_SEQ_BEGIN(fs) write_seqcount_begin(&(fs)->seq) -# define WRITE_FS_SEQ_END(fs) write_seqcount_end(&(fs)->seq) -#else -# define WRITE_FS_SEQ_BEGIN(fs) -# define WRITE_FS_SEQ_END(fs) -#endif -static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, - struct dentry *dentry) -{ - struct path path; - struct path old_pwd; - - path.mnt = mnt; - path.dentry = dentry; - path_get(&path); - LOCK_FS_STRUCT(fs); - WRITE_FS_SEQ_BEGIN(fs); - old_pwd = fs->pwd; - fs->pwd = path; - WRITE_FS_SEQ_END(fs); - UNLOCK_FS_STRUCT(fs); - - if (old_pwd.dentry) - path_put(&old_pwd); -} - #define current_ngroups current_cred()->group_info->ngroups #define current_groups current_cred()->group_info->small_block -/* - * OBD need working random driver, thus all our - * initialization routines must be called after device - * driver initialization - */ -#ifndef MODULE -#undef module_init -#define module_init(a) late_initcall(a) -#endif - -#ifndef MODULE_ALIAS_FS -#define MODULE_ALIAS_FS(name) -#endif - -#ifdef HAVE_GENERIC_PERMISSION_2ARGS -# define ll_generic_permission(inode, mask, flags, check_acl) \ - generic_permission(inode, mask) -#elif defined HAVE_GENERIC_PERMISSION_4ARGS -# define ll_generic_permission(inode, mask, flags, check_acl) \ - generic_permission(inode, mask, flags, check_acl) -#else -# define ll_generic_permission(inode, mask, flags, check_acl) \ - generic_permission(inode, mask, check_acl) -#endif - #ifdef HAVE_4ARGS_VFS_SYMLINK #define ll_vfs_symlink(dir, dentry, mnt, path, mode) \ vfs_symlink(dir, dentry, path, mode) @@ -134,14 +75,6 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, # define inode_dio_write_done(i) up_write(&(i)->i_alloc_sem) #endif -#ifndef FS_HAS_FIEMAP -#define FS_HAS_FIEMAP (0) -#endif - -#ifndef HAVE_SIMPLE_SETATTR -#define simple_setattr(dentry, ops) inode_setattr((dentry)->d_inode, ops) -#endif - #ifndef HAVE_INIT_LIST_HEAD_RCU static inline void INIT_LIST_HEAD_RCU(struct list_head *list) { @@ -150,22 +83,6 @@ static inline void INIT_LIST_HEAD_RCU(struct list_head *list) } #endif -#ifndef HAVE_DQUOT_SUSPEND -# define ll_vfs_dq_init vfs_dq_init -# define ll_vfs_dq_drop vfs_dq_drop -# define ll_vfs_dq_transfer vfs_dq_transfer -# define ll_vfs_dq_off(sb, remount) vfs_dq_off(sb, remount) -#else -# define ll_vfs_dq_init dquot_initialize -# define ll_vfs_dq_drop dquot_drop -# define ll_vfs_dq_transfer dquot_transfer -# define ll_vfs_dq_off(sb, remount) dquot_suspend(sb, -1) -#endif - -#ifndef HAVE_BLKDEV_GET_BY_DEV -# define blkdev_get_by_dev(dev, mode, holder) open_by_devnum(dev, mode) -#endif - #ifdef HAVE_BVEC_ITER #define bio_idx(bio) (bio->bi_iter.bi_idx) #define bio_set_sector(bio, sector) (bio->bi_iter.bi_sector = sector) @@ -186,23 +103,6 @@ static inline void INIT_LIST_HEAD_RCU(struct list_head *list) #define bio_start_sector(bio) (bio->bi_sector) #endif -#ifndef HAVE_BLK_QUEUE_MAX_SEGMENTS -#define blk_queue_max_segments(rq, seg) \ - do { blk_queue_max_phys_segments(rq, seg); \ - blk_queue_max_hw_segments(rq, seg); } while (0) -#else -#define queue_max_phys_segments(rq) queue_max_segments(rq) -#define queue_max_hw_segments(rq) queue_max_segments(rq) -#endif - -#ifdef HAVE_BLK_PLUG -#define DECLARE_PLUG(plug) struct blk_plug plug -#else /* !HAVE_BLK_PLUG */ -#define DECLARE_PLUG(name) -#define blk_start_plug(plug) do {} while (0) -#define blk_finish_plug(plug) do {} while (0) -#endif - #ifdef HAVE_KMAP_ATOMIC_HAS_1ARG #define ll_kmap_atomic(a, b) kmap_atomic(a) #define ll_kunmap_atomic(a, b) kunmap_atomic(a) @@ -326,6 +226,10 @@ static inline void set_nlink(struct inode *inode, unsigned int nlink) # define ll_umode_t int #endif +#ifndef HAVE_VM_FAULT_T +#define vm_fault_t int +#endif + #include #ifndef HAVE_D_MAKE_ROOT static inline struct dentry *d_make_root(struct inode *root) @@ -339,6 +243,10 @@ static inline struct dentry *d_make_root(struct inode *root) } #endif +#ifndef HAVE_FOP_ITERATE_SHARED +#define iterate_shared iterate +#endif + #ifdef HAVE_DIRTY_INODE_HAS_FLAG # define ll_dirty_inode(inode, flag) (inode)->i_sb->s_op->dirty_inode((inode), flag) #else @@ -422,6 +330,13 @@ static inline int radix_tree_exceptional_entry(void *arg) } #endif +#ifndef HAVE_XA_IS_VALUE +static inline bool xa_is_value(void *entry) +{ + return radix_tree_exceptional_entry(entry); +} +#endif + #ifndef HAVE_TRUNCATE_INODE_PAGES_FINAL static inline void truncate_inode_pages_final(struct address_space *map) { @@ -469,9 +384,11 @@ static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr) #endif #ifdef HAVE_PID_NS_FOR_CHILDREN -# define ll_task_pid_ns(task) ((task)->nsproxy->pid_ns_for_children) +# define ll_task_pid_ns(task) \ + ((task)->nsproxy ? ((task)->nsproxy->pid_ns_for_children) : NULL) #else -# define ll_task_pid_ns(task) ((task)->nsproxy->pid_ns) +# define ll_task_pid_ns(task) \ + ((task)->nsproxy ? ((task)->nsproxy->pid_ns) : NULL) #endif #ifdef HAVE_FULL_NAME_HASH_3ARGS @@ -489,17 +406,9 @@ static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr) #endif #ifdef HAVE_IOP_XATTR -#ifdef HAVE_XATTR_HANDLER_FLAGS #define ll_setxattr generic_setxattr #define ll_getxattr generic_getxattr #define ll_removexattr generic_removexattr -#else -int ll_setxattr(struct dentry *dentry, const char *name, - const void *value, size_t size, int flags); -ssize_t ll_getxattr(struct dentry *dentry, const char *name, - void *buf, size_t buf_size); -int ll_removexattr(struct dentry *dentry, const char *name); -#endif /* ! HAVE_XATTR_HANDLER_FLAGS */ #endif /* HAVE_IOP_XATTR */ #ifndef HAVE_VFS_SETXATTR @@ -509,7 +418,6 @@ static inline int __vfs_setxattr(struct dentry *dentry, struct inode *inode, const char *name, const void *value, size_t size, int flags) { -# ifdef HAVE_XATTR_HANDLER_FLAGS const struct xattr_handler *handler; int rc; @@ -525,14 +433,25 @@ __vfs_setxattr(struct dentry *dentry, struct inode *inode, const char *name, rc = handler->set(dentry, name, value, size, flags, handler->flags); # endif /* !HAVE_XATTR_HANDLER_INODE_PARAM */ return rc; -# else /* !HAVE_XATTR_HANDLER_FLAGS */ - return ll_setxattr(dentry, name, value, size, flags); -# endif /* HAVE_XATTR_HANDLER_FLAGS */ } #endif /* HAVE_VFS_SETXATTR */ +#ifndef HAVE_POSIXACL_USER_NS +/* + * Mask out &init_user_ns so we don't jump + * through hoops to define it somehow only + * to have it ignored anyway. + */ +#define posix_acl_from_xattr(a, b, c) posix_acl_from_xattr(b, c) +#define posix_acl_to_xattr(a, b, c, d) posix_acl_to_xattr(b, c, d) +#endif + +#ifndef HAVE_POSIX_ACL_VALID_USER_NS +#define posix_acl_valid(a,b) posix_acl_valid(b) +#endif + #ifdef HAVE_IOP_SET_ACL -#ifdef CONFIG_FS_POSIX_ACL +#ifdef CONFIG_LUSTRE_FS_POSIX_ACL #ifndef HAVE_POSIX_ACL_UPDATE_MODE static inline int posix_acl_update_mode(struct inode *inode, umode_t *mode_p, struct posix_acl **acl) @@ -574,11 +493,24 @@ static inline bool is_sxid(umode_t mode) #define IS_NOSEC(inode) (!is_sxid(inode->i_mode)) #endif -#ifndef MS_NOSEC -static inline void inode_has_no_xattr(struct inode *inode) -{ - return; -} +/* + * mount MS_* flags split from superblock SB_* flags + * if the SB_* flags are not available use the MS_* flags + */ +#if !defined(SB_RDONLY) && defined(MS_RDONLY) +# define SB_RDONLY MS_RDONLY +#endif +#if !defined(SB_ACTIVE) && defined(MS_ACTIVE) +# define SB_ACTIVE MS_ACTIVE +#endif +#if !defined(SB_NOSEC) && defined(MS_NOSEC) +# define SB_NOSEC MS_NOSEC +#endif +#if !defined(SB_POSIXACL) && defined(MS_POSIXACL) +# define SB_POSIXACL MS_POSIXACL +#endif +#if !defined(SB_NODIRATIME) && defined(MS_NODIRATIME) +# define SB_NODIRATIME MS_NODIRATIME #endif #ifndef HAVE_FILE_OPERATIONS_READ_WRITE_ITER @@ -822,12 +754,40 @@ static inline bool bdev_integrity_enabled(struct block_device *bdev, int rw) #define ll_pagevec_init(pvec, n) pagevec_init(pvec, n) #endif +#ifdef HAVE_D_COUNT +# define ll_d_count(d) d_count(d) +#else +# define ll_d_count(d) ((d)->d_count) +#endif /* HAVE_D_COUNT */ + +#ifndef HAVE_IN_COMPAT_SYSCALL +#define in_compat_syscall is_compat_task +#endif + #ifdef HAVE_I_PAGES #define page_tree i_pages #else #define i_pages tree_lock -#define xa_lock_irq(lockp) spin_lock_irq(lockp) -#define xa_unlock_irq(lockp) spin_unlock_irq(lockp) +#endif + +#ifndef xa_lock_irqsave +#define xa_lock_irqsave(lockp, flags) spin_lock_irqsave(lockp, flags) +#define xa_unlock_irqrestore(lockp, flags) spin_unlock_irqrestore(lockp, flags) +#endif + +#ifndef HAVE_LOCK_PAGE_MEMCG +#define lock_page_memcg(page) do {} while (0) +#define unlock_page_memcg(page) do {} while (0) +#endif + +#ifndef KMEM_CACHE_USERCOPY +#define kmem_cache_create_usercopy(name, size, align, flags, useroffset, \ + usersize, ctor) \ + kmem_cache_create(name, size, align, flags, ctor) +#endif + +#ifndef HAVE_LINUX_SELINUX_IS_ENABLED +#define selinux_is_enabled() 1 #endif #endif /* _LUSTRE_COMPAT_H */