/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 only, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is included * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. * * GPL HEADER END */ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ * Lustre is a trademark of Sun Microsystems, Inc. */ #ifndef _LINUX_COMPAT25_H #define _LINUX_COMPAT25_H #include #include #include "lustre_patchless_compat.h" /* * set ATTR_BLOCKS to a high value to avoid any risk of collision with other * ATTR_* attributes (see bug 13828) */ #define ATTR_BLOCKS (1 << 27) #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 #define LTIME_S(time) (time.tv_sec) /* inode_dio_wait(i) use as-is for write lock */ # define inode_dio_write_done(i) do {} while (0) /* for write unlock */ # define inode_dio_read(i) atomic_inc(&(i)->i_dio_count) /* inode_dio_done(i) use as-is for read unlock */ #ifndef FS_HAS_FIEMAP #define FS_HAS_FIEMAP (0) #endif #define ll_vfs_rmdir(dir, entry, mnt) vfs_rmdir(dir, entry) #define ll_vfs_mkdir(inode, dir, mnt, mode) vfs_mkdir(inode, dir, mode) #define ll_vfs_link(old, mnt, dir, new, mnt1) vfs_link(old, dir, new) #define ll_vfs_unlink(inode, entry, mnt) vfs_unlink(inode, entry) #define ll_vfs_mknod(dir, entry, mnt, mode, dev) \ vfs_mknod(dir, entry, mode, dev) #define ll_security_inode_unlink(dir, entry, mnt) \ security_inode_unlink(dir, entry) #define ll_vfs_rename(old, old_dir, mnt, new, new_dir, mnt1) \ vfs_rename(old, old_dir, new, new_dir, NULL, 0) #define cfs_bio_io_error(a, b) bio_io_error((a)) #define cfs_bio_endio(a, b, c) bio_endio((a), (c)) #define cfs_path_put(nd) path_put(&(nd)->path) #ifndef SLAB_DESTROY_BY_RCU #define SLAB_DESTROY_BY_RCU 0 #endif 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) { struct path path; rc = kern_path(name, LOOKUP_FOLLOW, &path); if (!rc) return rc; rc = sb->s_qcop->quota_on(sb, off, ver , &path ); path_put(&path); return rc; } else return -ENOSYS; } static inline int ll_quota_off(struct super_block *sb, int off, int remount) { if (sb->s_qcop->quota_off) { return sb->s_qcop->quota_off(sb, off ); } else return -ENOSYS; } # 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) #define queue_max_phys_segments(rq) queue_max_segments(rq) #define queue_max_hw_segments(rq) queue_max_segments(rq) #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) \ p = NULL; hlist_for_each_entry(dentry, i_dentry, alias) #define bio_hw_segments(q, bio) 0 #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) #ifndef QUOTA_OK # define QUOTA_OK 0 #endif #ifndef NO_QUOTA # 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 # 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 #ifdef ATTR_TIMES_SET # define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET) #else # define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET) #endif #include #include # define ll_umode_t umode_t #include # define ll_dirty_inode(inode, flag) (inode)->i_sb->s_op->dirty_inode((inode), flag) #endif /* _COMPAT25_H */