X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Flinux%2Flustre_compat25.h;h=e0a29ff5a7531fa9a43a5185d5c34eaa11a76ebc;hp=a0cdf317f62ae0e6aca107e6384105b3b4bbebd2;hb=1e149bef8d832aade6c04b65b8308b71c6d523ed;hpb=615b53dd36fcb205960799b7f3d7d1a21c3ce755;ds=sidebyside diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h index a0cdf31..e0a29ff 100644 --- a/lustre/include/linux/lustre_compat25.h +++ b/lustre/include/linux/lustre_compat25.h @@ -27,7 +27,7 @@ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2012, Whamcloud, Inc. + * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -140,16 +140,27 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, #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) +#ifdef HAVE_DENTRY_OPEN_USE_PATH +#define ll_dentry_open(a,b,c) dentry_open(a,b,c) #else -#define ll_dentry_open(a, b, c, d) dentry_open(a, b, c) -#endif - -#ifdef HAVE_KIOBUF_KIO_BLOCKS -#define KIOBUF_GET_BLOCKS(k) ((k)->kio_blocks) -#else -#define KIOBUF_GET_BLOCKS(k) ((k)->blocks) +/* + * dentry_open handles its own reference counting since Linux v3.6 + * (commit 765927b2). Callers should free their own references. + * + * Prior versions expected the caller to increment the references. + * The references are retained on success and freed on error. + */ +static inline struct file *ll_dentry_open(struct path *path, int flags, + const struct cred *cred) +{ + mntget(path->mnt); + dget(path->dentry); +# ifdef HAVE_DENTRY_OPEN_4ARGS + return dentry_open(path->dentry, path->mnt, flags, cred); +# else + return dentry_open(path->dentry, path->mnt, flags); +# endif +} #endif #ifdef HAVE_SECURITY_PLUG @@ -166,10 +177,12 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, #endif -#ifndef container_of -#define container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) +#if !defined(HAVE_FILE_LLSEEK_SIZE) || defined(HAVE_FILE_LLSEEK_SIZE_5ARGS) +#define ll_generic_file_llseek_size(file, offset, origin, maxbytes, eof) \ + generic_file_llseek_size(file, offset, origin, maxbytes, eof); +#else +#define ll_generic_file_llseek_size(file, offset, origin, maxbytes, eof) \ + generic_file_llseek_size(file, offset, origin, maxbytes); #endif #ifdef HAVE_INODE_DIO_WAIT @@ -184,39 +197,6 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, # define inode_dio_done(i) up_read(&(i)->i_alloc_sem) #endif -#include /* for generic_writepages */ - -#ifdef HAVE_HIDE_VFSMOUNT_GUTS -# include <../fs/mount.h> -#else -# define real_mount(mnt) (mnt) -#endif - -static inline const char *mnt_get_devname(struct vfsmount *mnt) -{ - return real_mount(mnt)->mnt_devname; -} - -#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(real_mount(mnt)->mnt_pcp, cpu)->mnt_count; - } - - return count; -#else - return real_mount(mnt)->mnt_count; -#endif -} -#else -# define mnt_get_count(mnt) cfs_atomic_read(&(real_mount(mnt)->mnt_count)) -#endif - #ifdef HAVE_RW_TREE_LOCK #define TREE_READ_LOCK_IRQ(mapping) read_lock_irq(&(mapping)->tree_lock) #define TREE_READ_UNLOCK_IRQ(mapping) read_unlock_irq(&(mapping)->tree_lock) @@ -575,6 +555,7 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount) #define blk_queue_logical_block_size(q, sz) blk_queue_hardsect_size(q, sz) #endif +#ifndef HAVE_DQUOT_SUSPEND #ifndef HAVE_VFS_DQ_OFF # define ll_vfs_dq_init DQUOT_INIT # define ll_vfs_dq_drop DQUOT_DROP @@ -586,19 +567,16 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount) # 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) +# 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 -#ifdef HAVE_NEW_BACKING_DEV_INFO -# define ll_bdi_wb_cnt(bdi) ((bdi).wb_cnt) -#else -# define ll_bdi_wb_cnt(bdi) 1 +#ifndef HAVE_BDI_INIT +#define bdi_init(bdi) 0 +#define bdi_destroy(bdi) do { } while (0) #endif #ifdef HAVE_BLK_QUEUE_MAX_SECTORS /* removed in rhel6 */ @@ -633,6 +611,26 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount) #define ll_kunmap_atomic(a, b) kunmap_atomic(a, b) #endif +#ifndef HAVE_CLEAR_INODE +#define clear_inode(i) end_writeback(i) +#endif + +#ifdef HAVE_DENTRY_D_ALIAS_HLIST +#define ll_d_hlist_node hlist_node +#define ll_d_hlist_empty(list) hlist_empty(list) +#define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name) +#define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry) +#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \ + hlist_for_each_entry(dentry, p, i_dentry, alias) +#else +#define ll_d_hlist_node list_head +#define ll_d_hlist_empty(list) list_empty(list) +#define ll_d_hlist_entry(ptr, type, name) list_entry(ptr.next, type, name) +#define ll_d_hlist_for_each(tmp, i_dentry) list_for_each(tmp, i_dentry) +#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \ + p = NULL; list_for_each_entry(dentry, i_dentry, alias) +#endif + #ifndef HAVE_BI_HW_SEGMENTS #define bio_hw_segments(q, bio) 0 @@ -643,15 +641,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount) #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) \ +#define 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_init(pv, cold) pagevec_init(pv, cold); #define ll_pagevec_add(pv, pg) \ ({ \ int __ret; \ @@ -662,9 +658,12 @@ 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 +#if !defined(HAVE_CPUMASK_OF_NODE) && defined(HAVE_NODE_TO_CPUMASK) +# ifdef HAVE_OFED_CPUMASK_OF_NODE +# undef cpumask_of_node +# define HAVE_CPUMASK_OF_NODE +# endif +#define cpumask_of_node(i) (&node_to_cpumask(i)) #endif #ifndef QUOTA_OK @@ -674,6 +673,17 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount) # define NO_QUOTA (-EDQUOT) #endif +#ifndef SEEK_DATA +#define SEEK_DATA 3 /* seek to the next data */ +#endif +#ifndef SEEK_HOLE +#define SEEK_HOLE 4 /* seek to the next hole */ +#endif + +#ifndef FMODE_UNSIGNED_OFFSET +#define FMODE_UNSIGNED_OFFSET ((__force fmode_t)0x2000) +#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