X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Flinux%2Flustre_compat25.h;h=8324e202721a468789c944420f39cf75489ac67d;hp=81f8cc1747c4b30c8e2e9177320ca6291f7a6d2c;hb=bd12b1a4fc839c789630eea92fb816b453f2c503;hpb=6e3ec5812ebd1b5ecf7cae584f429b013ffe7431 diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h index 81f8cc1..8324e20 100644 --- a/lustre/include/linux/lustre_compat25.h +++ b/lustre/include/linux/lustre_compat25.h @@ -26,10 +26,13 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* + * Copyright (c) 2011 Whamcloud, Inc. + */ +/* * This file is part of Lustre, http://www.lustre.org/ * Lustre is a trademark of Sun Microsystems, Inc. */ @@ -43,10 +46,19 @@ #error sorry, lustre requires at least linux kernel 2.6.9 or later #endif +#include #include #include +/* Some old kernels (like 2.6.9) may not define such SEEK_XXX. So the + * definition allows to compile lustre client on more OS platforms. */ +#ifndef SEEK_SET + #define SEEK_SET 0 + #define SEEK_CUR 1 + #define SEEK_END 2 +#endif + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) struct ll_iattr { struct iattr iattr; @@ -139,8 +151,8 @@ do {cfs_mutex_lock_nested(&(inode)->i_mutex, I_MUTEX_PARENT); } while(0) #define LOCK_DQONOFF_MUTEX(dqopt) cfs_down(&(dqopt)->dqonoff_sem) #endif /* HAVE_DQUOTOFF_MUTEX */ -#define current_ngroups current->group_info->ngroups -#define current_groups current->group_info->small_block +#define current_ngroups current_cred()->group_info->ngroups +#define current_groups current_cred()->group_info->small_block #ifndef page_private #define page_private(page) ((page)->private) @@ -178,7 +190,20 @@ do {cfs_mutex_lock_nested(&(inode)->i_mutex, I_MUTEX_PARENT); } while(0) #define LTIME_S(time) (time.tv_sec) #define ll_path_lookup path_lookup + +#ifdef HAVE_EXPORT_INODE_PERMISSION +#define ll_permission(inode,mask,nd) inode_permission(inode,mask) +#else #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) @@ -186,8 +211,6 @@ do {cfs_mutex_lock_nested(&(inode)->i_mutex, I_MUTEX_PARENT); } while(0) (inode)->i_mapping->a_ops->writepage(page, NULL) #define ll_invalidate_inode_pages(inode) \ invalidate_inode_pages((inode)->i_mapping) -#define ll_truncate_complete_page(page) \ - truncate_complete_page(page->mapping, page) #define ll_vfs_create(a,b,c,d) vfs_create(a,b,c,d) #define ll_dev_t dev_t @@ -195,7 +218,18 @@ do {cfs_mutex_lock_nested(&(inode)->i_mutex, I_MUTEX_PARENT); } while(0) #define to_kdev_t(dev) (dev) #define kdev_t_to_nr(dev) (dev) #define val_to_kdev(dev) (dev) -#define ILOOKUP(sb, ino, test, data) ilookup5(sb, ino, test, (void *)(data)); + +#ifdef HAVE_BLKDEV_PUT_2ARGS +#define ll_blkdev_put(a, b) blkdev_put(a, b) +#else +#define ll_blkdev_put(a, b) blkdev_put(a) +#endif + +#ifdef HAVE_DENTRY_OPEN_4ARGS +#define ll_dentry_open(a, b, c, d) dentry_open(a, b, c, d) +#else +#define ll_dentry_open(a, b, c, d) dentry_open(a, b, c) +#endif #include @@ -235,11 +269,6 @@ static inline int cfs_cleanup_group_info(void) extern void __d_rehash(struct dentry *dentry, int lock); #endif -#if !defined(HAVE_D_MOVE_LOCKED) && defined(HAVE___D_MOVE) -#define d_move_locked(dentry, target) __d_move(dentry, target) -extern void __d_move(struct dentry *dentry, struct dentry *target); -#endif - #ifdef HAVE_CAN_SLEEP_ARG #define ll_flock_lock_file_wait(file, lock, can_sleep) \ flock_lock_file_wait(file, lock, can_sleep) @@ -291,11 +320,7 @@ static inline int mapping_has_pages(struct address_space *mapping) #define ll_vfs_symlink(dir, dentry, mnt, path, mode) \ vfs_symlink(dir, dentry, path) #endif -#endif -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7)) -#define ll_set_dflags(dentry, flags) do { dentry->d_vfs_flags |= flags; } while(0) -#else #define ll_set_dflags(dentry, flags) do { \ cfs_spin_lock(&dentry->d_lock); \ dentry->d_flags |= flags; \ @@ -429,6 +454,22 @@ int ll_unregister_blkdev(unsigned int dev, const char *name) #define LL_RENAME_DOES_D_MOVE FS_ODD_RENAME #endif +#ifndef HAVE_D_OBTAIN_ALIAS +/* The old d_alloc_anon() didn't free the inode reference on error + * like d_obtain_alias(). Hide that difference/inconvenience here. */ +static inline struct dentry *d_obtain_alias(struct inode *inode) +{ + struct dentry *anon = d_alloc_anon(inode); + + if (anon == NULL) { + iput(inode); + anon = ERR_PTR(-ENOMEM); + } + + return anon; +} +#endif + /* add a lustre compatible layer for crypto API */ #include #ifdef HAVE_ASYNC_BLOCK_CIPHER @@ -615,8 +656,11 @@ static inline int ll_crypto_hmac(struct crypto_tfm *tfm, #endif /* HAVE_ASYNC_BLOCK_CIPHER */ #ifndef HAVE_SYNCHRONIZE_RCU +/* Linux 2.6.32 provides define when !CONFIG_TREE_PREEMPT_RCU */ +#ifndef synchronize_rcu #define synchronize_rcu() synchronize_kernel() #endif +#endif #ifdef HAVE_FILE_REMOVE_SUID # define ll_remove_suid(file, mnt) file_remove_suid(file) @@ -656,41 +700,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_REGISTER_SHRINKER -typedef int (*cfs_shrinker_t)(int nr_to_scan, gfp_t gfp_mask); - -static inline -struct shrinker *cfs_set_shrinker(int seek, cfs_shrinker_t func) -{ - struct shrinker *s; - - s = kmalloc(sizeof(*s), GFP_KERNEL); - if (s == NULL) - return (NULL); - - s->shrink = func; - s->seeks = seek; - - register_shrinker(s); - - return s; -} - -static inline -void cfs_remove_shrinker(struct shrinker *shrinker) -{ - if (shrinker == NULL) - return; - - unregister_shrinker(shrinker); - kfree(shrinker); -} -#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)) @@ -778,5 +787,87 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount) return -ENOSYS; } +#ifndef HAVE_BLK_QUEUE_LOG_BLK_SIZE /* added in 2.6.31 */ +#define blk_queue_logical_block_size(q, sz) blk_queue_hardsect_size(q, sz) +#endif + +#ifndef HAVE_VFS_DQ_OFF +# define ll_vfs_dq_init DQUOT_INIT +# define ll_vfs_dq_drop DQUOT_DROP +# define ll_vfs_dq_transfer DQUOT_TRANSFER +# define ll_vfs_dq_off(sb, remount) DQUOT_OFF(sb) +#else +# 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) +#endif + +#ifdef HAVE_BDI_INIT +#define ll_bdi_init(bdi) bdi_init(bdi) +#define ll_bdi_destroy(bdi) bdi_destroy(bdi) +#else +#define ll_bdi_init(bdi) 0 +#define ll_bdi_destroy(bdi) do { } while(0) +#endif + +#ifdef HAVE_NEW_BACKING_DEV_INFO +# define ll_bdi_wb_cnt(bdi) ((bdi).wb_cnt) +#else +# define ll_bdi_wb_cnt(bdi) 1 +#endif + +#ifdef HAVE_BLK_QUEUE_MAX_SECTORS /* removed in rhel6 */ +#define blk_queue_max_hw_sectors(q, sect) blk_queue_max_sectors(q, sect) +#endif + +#ifndef HAVE_BLKDEV_GET_BY_DEV +# define blkdev_get_by_dev(dev, mode, holder) open_by_devnum(dev, mode) +#endif + +#ifndef HAVE_REQUEST_QUEUE_LIMITS +#define queue_max_sectors(rq) ((rq)->max_sectors) +#define queue_max_hw_sectors(rq) ((rq)->max_hw_sectors) +#define queue_max_phys_segments(rq) ((rq)->max_phys_segments) +#define queue_max_hw_segments(rq) ((rq)->max_hw_segments) +#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 + + +#ifndef HAVE_BI_HW_SEGMENTS +#define bio_hw_segments(q, bio) 0 +#endif + +#ifndef HAVE_PAGEVEC_LRU_ADD_FILE +#define pagevec_lru_add_file pagevec_lru_add +#endif + +#ifdef HAVE_ADD_TO_PAGE_CACHE_LRU +#define ll_add_to_page_cache_lru(pg, mapping, off, gfp) \ + add_to_page_cache_lru(pg, mapping, off, gfp) +#define ll_pagevec_init(pv, cold) do {} while (0) +#define ll_pagevec_add(pv, pg) (0) +#define ll_pagevec_lru_add_file(pv) do {} while (0) +#else +#define ll_add_to_page_cache_lru(pg, mapping, off, gfp) \ + add_to_page_cache(pg, mapping, off, gfp) +#define ll_pagevec_init(pv, cold) pagevec_init(&lru_pvec, cold); +#define ll_pagevec_add(pv, pg) pagevec_add(pv, pg) +#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 + #endif /* __KERNEL__ */ #endif /* _COMPAT25_H */