linux/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h
<<
>>
Prefs
   1/*
   2 * GPL HEADER START
   3 *
   4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 only,
   8 * as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but
  11 * WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13 * General Public License version 2 for more details (a copy is included
  14 * in the LICENSE file that accompanied this code).
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * version 2 along with this program; If not, see
  18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  19 *
  20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  21 * CA 95054 USA or visit www.sun.com if you need additional information or
  22 * have any questions.
  23 *
  24 * GPL HEADER END
  25 */
  26/*
  27 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
  28 * Use is subject to license terms.
  29 *
  30 * Copyright (c) 2011, 2012, Intel Corporation.
  31 */
  32/*
  33 * This file is part of Lustre, http://www.lustre.org/
  34 * Lustre is a trademark of Sun Microsystems, Inc.
  35 */
  36
  37#ifndef _LINUX_COMPAT25_H
  38#define _LINUX_COMPAT25_H
  39
  40#include <linux/fs_struct.h>
  41#include <linux/namei.h>
  42#include <linux/libcfs/linux/portals_compat25.h>
  43
  44#include <linux/lustre_patchless_compat.h>
  45
  46# define LOCK_FS_STRUCT(fs)     spin_lock(&(fs)->lock)
  47# define UNLOCK_FS_STRUCT(fs)   spin_unlock(&(fs)->lock)
  48
  49static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt,
  50                                 struct dentry *dentry)
  51{
  52        struct path path;
  53        struct path old_pwd;
  54
  55        path.mnt = mnt;
  56        path.dentry = dentry;
  57        LOCK_FS_STRUCT(fs);
  58        old_pwd = fs->pwd;
  59        path_get(&path);
  60        fs->pwd = path;
  61        UNLOCK_FS_STRUCT(fs);
  62
  63        if (old_pwd.dentry)
  64                path_put(&old_pwd);
  65}
  66
  67
  68/*
  69 * set ATTR_BLOCKS to a high value to avoid any risk of collision with other
  70 * ATTR_* attributes (see bug 13828)
  71 */
  72#define ATTR_BLOCKS    (1 << 27)
  73
  74#define current_ngroups current_cred()->group_info->ngroups
  75#define current_groups current_cred()->group_info->small_block
  76
  77/*
  78 * OBD need working random driver, thus all our
  79 * initialization routines must be called after device
  80 * driver initialization
  81 */
  82#ifndef MODULE
  83#undef module_init
  84#define module_init(a)     late_initcall(a)
  85#endif
  86
  87
  88#define LTIME_S(time)              (time.tv_sec)
  89
  90/* inode_dio_wait(i) use as-is for write lock */
  91# define inode_dio_write_done(i)        do {} while (0) /* for write unlock */
  92# define inode_dio_read(i)              atomic_inc(&(i)->i_dio_count)
  93/* inode_dio_done(i) use as-is for read unlock */
  94
  95#define TREE_READ_LOCK_IRQ(mapping)     spin_lock_irq(&(mapping)->tree_lock)
  96#define TREE_READ_UNLOCK_IRQ(mapping)   spin_unlock_irq(&(mapping)->tree_lock)
  97
  98#ifndef FS_HAS_FIEMAP
  99#define FS_HAS_FIEMAP                   (0)
 100#endif
 101
 102#define ll_vfs_rmdir(dir,entry,mnt)          vfs_rmdir(dir,entry)
 103#define ll_vfs_mkdir(inode,dir,mnt,mode)        vfs_mkdir(inode,dir,mode)
 104#define ll_vfs_link(old,mnt,dir,new,mnt1)       vfs_link(old,dir,new)
 105#define ll_vfs_unlink(inode,entry,mnt)    vfs_unlink(inode,entry)
 106#define ll_vfs_mknod(dir,entry,mnt,mode,dev)    vfs_mknod(dir,entry,mode,dev)
 107#define ll_security_inode_unlink(dir,entry,mnt) security_inode_unlink(dir,entry)
 108#define ll_vfs_rename(old, old_dir, mnt, new, new_dir, mnt1) \
 109                vfs_rename(old, old_dir, new, new_dir, NULL, 0)
 110
 111#define cfs_bio_io_error(a,b)   bio_io_error((a))
 112#define cfs_bio_endio(a,b,c)    bio_endio((a),(c))
 113
 114#define cfs_fs_pwd(fs)       ((fs)->pwd.dentry)
 115#define cfs_fs_mnt(fs)       ((fs)->pwd.mnt)
 116#define cfs_path_put(nd)     path_put(&(nd)->path)
 117
 118
 119#ifndef SLAB_DESTROY_BY_RCU
 120#define SLAB_DESTROY_BY_RCU 0
 121#endif
 122
 123
 124
 125static inline int
 126ll_quota_on(struct super_block *sb, int off, int ver, char *name, int remount)
 127{
 128        int rc;
 129
 130        if (sb->s_qcop->quota_on) {
 131                struct path path;
 132
 133                rc = kern_path(name, LOOKUP_FOLLOW, &path);
 134                if (!rc)
 135                        return rc;
 136                rc = sb->s_qcop->quota_on(sb, off, ver
 137                                            , &path
 138                                           );
 139                path_put(&path);
 140                return rc;
 141        }
 142        else
 143                return -ENOSYS;
 144}
 145
 146static inline int ll_quota_off(struct super_block *sb, int off, int remount)
 147{
 148        if (sb->s_qcop->quota_off) {
 149                return sb->s_qcop->quota_off(sb, off
 150                                            );
 151        }
 152        else
 153                return -ENOSYS;
 154}
 155
 156
 157# define ll_vfs_dq_init      dquot_initialize
 158# define ll_vfs_dq_drop      dquot_drop
 159# define ll_vfs_dq_transfer      dquot_transfer
 160# define ll_vfs_dq_off(sb, remount) dquot_suspend(sb, -1)
 161
 162
 163
 164
 165
 166#define queue_max_phys_segments(rq)       queue_max_segments(rq)
 167#define queue_max_hw_segments(rq)        queue_max_segments(rq)
 168
 169
 170#define ll_d_hlist_node hlist_node
 171#define ll_d_hlist_empty(list) hlist_empty(list)
 172#define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
 173#define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
 174#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
 175        p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
 176
 177
 178#define bio_hw_segments(q, bio) 0
 179
 180
 181#define ll_pagevec_init(pv, cold)       do {} while (0)
 182#define ll_pagevec_add(pv, pg)    (0)
 183#define ll_pagevec_lru_add_file(pv)     do {} while (0)
 184
 185
 186#ifndef QUOTA_OK
 187# define QUOTA_OK 0
 188#endif
 189#ifndef NO_QUOTA
 190# define NO_QUOTA (-EDQUOT)
 191#endif
 192
 193#ifndef SEEK_DATA
 194#define SEEK_DATA      3       /* seek to the next data */
 195#endif
 196#ifndef SEEK_HOLE
 197#define SEEK_HOLE      4       /* seek to the next hole */
 198#endif
 199
 200#ifndef FMODE_UNSIGNED_OFFSET
 201#define FMODE_UNSIGNED_OFFSET   ((__force fmode_t)0x2000)
 202#endif
 203
 204#if !defined(_ASM_GENERIC_BITOPS_EXT2_NON_ATOMIC_H_) && !defined(ext2_set_bit)
 205# define ext2_set_bit        __test_and_set_bit_le
 206# define ext2_clear_bit    __test_and_clear_bit_le
 207# define ext2_test_bit      test_bit_le
 208# define ext2_find_first_zero_bit find_first_zero_bit_le
 209# define ext2_find_next_zero_bit  find_next_zero_bit_le
 210#endif
 211
 212#ifdef ATTR_TIMES_SET
 213# define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)
 214#else
 215# define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET)
 216#endif
 217
 218
 219
 220/*
 221 * After 3.1, kernel's nameidata.intent.open.flags is different
 222 * with lustre's lookup_intent.it_flags, as lustre's it_flags'
 223 * lower bits equal to FMODE_xxx while kernel doesn't transliterate
 224 * lower bits of nameidata.intent.open.flags to FMODE_xxx.
 225 * */
 226#include <linux/version.h>
 227static inline int ll_namei_to_lookup_intent_flag(int flag)
 228{
 229#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)
 230        flag = (flag & ~O_ACCMODE) | OPEN_FMODE(flag);
 231#endif
 232        return flag;
 233}
 234
 235#include <linux/fs.h>
 236
 237# define ll_umode_t     umode_t
 238
 239#include <linux/dcache.h>
 240
 241# define ll_dirty_inode(inode, flag)    (inode)->i_sb->s_op->dirty_inode((inode), flag)
 242
 243#endif /* _COMPAT25_H */
 244