X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Flinux%2Flustre_compat25.h;h=8af616e48505464658460328459f1e0c3ab03f23;hp=01f5e4fbfea7153daf6f2cbb341d06eaeffa1f69;hb=c746abe3d0738a9553c5322665dff3be66a66873;hpb=f12b088ace79fa518bdfc8bdb9b462b8165d715e diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h index 01f5e4f..8af616e 100644 --- a/lustre/include/linux/lustre_compat25.h +++ b/lustre/include/linux/lustre_compat25.h @@ -47,6 +47,7 @@ #endif #include +#include #include #include @@ -68,6 +69,14 @@ struct ll_iattr { #define ll_iattr iattr #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) */ +#ifdef HAVE_FS_STRUCT_RWLOCK +# define LOCK_FS_STRUCT(fs) cfs_write_lock(&(fs)->lock) +# define UNLOCK_FS_STRUCT(fs) cfs_write_unlock(&(fs)->lock) +#else +# define LOCK_FS_STRUCT(fs) cfs_spin_lock(&(fs)->lock) +# define UNLOCK_FS_STRUCT(fs) cfs_spin_unlock(&(fs)->lock) +#endif + #ifdef HAVE_FS_STRUCT_USE_PATH static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, struct dentry *dentry) @@ -77,11 +86,11 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, path.mnt = mnt; path.dentry = dentry; - write_lock(&fs->lock); + LOCK_FS_STRUCT(fs); old_pwd = fs->pwd; path_get(&path); fs->pwd = path; - write_unlock(&fs->lock); + UNLOCK_FS_STRUCT(fs); if (old_pwd.dentry) path_put(&old_pwd); @@ -95,12 +104,12 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, struct dentry *old_pwd; struct vfsmount *old_pwdmnt; - cfs_write_lock(&fs->lock); + LOCK_FS_STRUCT(fs); old_pwd = fs->pwd; old_pwdmnt = fs->pwdmnt; fs->pwdmnt = mntget(mnt); fs->pwd = dget(dentry); - cfs_write_unlock(&fs->lock); + UNLOCK_FS_STRUCT(fs); if (old_pwd) { dput(old_pwd); @@ -197,6 +206,14 @@ do {cfs_mutex_lock_nested(&(inode)->i_mutex, I_MUTEX_PARENT); } while(0) #define ll_permission(inode,mask,nd) permission(inode,mask,nd) #endif +#ifdef 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 + #define ll_pgcache_lock(mapping) cfs_spin_lock(&mapping->page_lock) #define ll_pgcache_unlock(mapping) cfs_spin_unlock(&mapping->page_lock) #define ll_call_writepage(inode, page) \ @@ -393,6 +410,26 @@ ll_kern_mount(const char *fstype, int flags, const char *name, void *data) #define ll_kern_mount(fstype, flags, name, data) do_kern_mount((fstype), (flags), (name), (data)) #endif +#ifndef HAVE_ATOMIC_MNT_COUNT +static inline unsigned int mnt_get_count(struct vfsmount *mnt) +{ +#ifdef CONFIG_SMP + unsigned int count = 0; + int cpu; + + for_each_possible_cpu(cpu) { + count += per_cpu_ptr(mnt->mnt_pcp, cpu)->mnt_count; + } + + return count; +#else + return mnt->mnt_count; +#endif +} +#else +# define mnt_get_count(mnt) cfs_atomic_read(&mnt->mnt_count) +#endif + #ifdef HAVE_STATFS_DENTRY_PARAM #define ll_do_statfs(sb, sfs) (sb)->s_op->statfs((sb)->s_root, (sfs)) #else @@ -692,10 +729,6 @@ static inline int ll_crypto_hmac(struct crypto_tfm *tfm, #define cfs_for_each_possible_cpu(cpu) for_each_cpu(cpu) #endif -#ifndef cpu_to_node -#define cpu_to_node(cpu) 0 -#endif - #ifdef HAVE_BIO_ENDIO_2ARG #define cfs_bio_io_error(a,b) bio_io_error((a)) #define cfs_bio_endio(a,b,c) bio_endio((a),(c)) @@ -750,7 +783,9 @@ static inline long labs(long x) #define ll_sb_has_quota_active(sb, type) sb_has_quota_enabled(sb, type) #endif -#ifdef HAVE_SB_ANY_QUOTA_ACTIVE +#ifdef HAVE_SB_ANY_QUOTA_LOADED +#define ll_sb_any_quota_active(sb) sb_any_quota_loaded(sb) +#elif defined(HAVE_SB_ANY_QUOTA_ACTIVE) #define ll_sb_any_quota_active(sb) sb_any_quota_active(sb) #else #define ll_sb_any_quota_active(sb) sb_any_quota_enabled(sb) @@ -759,12 +794,30 @@ static inline long labs(long x) static inline int ll_quota_on(struct super_block *sb, int off, int ver, char *name, int remount) { + int rc; + if (sb->s_qcop->quota_on) { - return sb->s_qcop->quota_on(sb, off, ver, name +#ifdef HAVE_QUOTA_ON_USE_PATH + struct path path; + + rc = kern_path(name, LOOKUP_FOLLOW, &path); + if (!rc) + return rc; +#endif + rc = sb->s_qcop->quota_on(sb, off, ver +#ifdef HAVE_QUOTA_ON_USE_PATH + , &path +#else + , name +#endif #ifdef HAVE_QUOTA_ON_5ARGS , remount #endif ); +#ifdef HAVE_QUOTA_ON_USE_PATH + path_put(&path); +#endif + return rc; } else return -ENOSYS; @@ -860,5 +913,25 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount) #define ll_pagevec_lru_add_file(pv) pagevec_lru_add_file(pv) #endif +#if !defined(HAVE_NODE_TO_CPUMASK) && defined(HAVE_CPUMASK_OF_NODE) +#define node_to_cpumask(i) (*(cpumask_of_node(i))) +#define HAVE_NODE_TO_CPUMASK +#endif + +#ifndef QUOTA_OK +# define QUOTA_OK 0 +#endif +#ifndef NO_QUOTA +# define NO_QUOTA (-EDQUOT) +#endif + +#if !defined(_ASM_GENERIC_BITOPS_EXT2_NON_ATOMIC_H_) && !defined(ext2_set_bit) +# define ext2_set_bit __test_and_set_bit_le +# define ext2_clear_bit __test_and_clear_bit_le +# define ext2_test_bit test_bit_le +# define ext2_find_first_zero_bit find_first_zero_bit_le +# define ext2_find_next_zero_bit find_next_zero_bit_le +#endif + #endif /* __KERNEL__ */ #endif /* _COMPAT25_H */