| /* |
| * 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 <linux/fs_struct.h> |
| #include <linux/namei.h> |
| |
| #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 <linux/version.h> |
| #include <linux/fs.h> |
| |
| # define ll_umode_t umode_t |
| |
| #include <linux/dcache.h> |
| |
| # define ll_dirty_inode(inode, flag) (inode)->i_sb->s_op->dirty_inode((inode), flag) |
| |
| #endif /* _COMPAT25_H */ |