])
])
-AC_DEFUN([LC_FUNC_SET_FS_PWD],
-[LB_CHECK_SYMBOL_EXPORT([set_fs_pwd],
-[fs/namespace.c],[
- AC_DEFINE(HAVE_SET_FS_PWD, 1, [set_fs_pwd is exported])
-],[
-])
-])
-
#
# check for FS_RENAME_DOES_D_MOVE flag
#
EXTRA_KCFLAGS="$tmp_flags"
])
+# inode have i_private field since 2.6.17
+AC_DEFUN([LC_INODE_IPRIVATE],
+[AC_MSG_CHECKING([if inode has a i_private field])
+LB_LINUX_TRY_COMPILE([
+#include <linux/fs.h>
+],[
+ struct inode i;
+ i.i_private = NULL;
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_INODE_IPRIVATE, 1,
+ [struct inode has i_private field])
+],[
+ AC_MSG_RESULT(no)
+])
+])
+
# 2.6.19 API changes
# inode don't have i_blksize field
AC_DEFUN([LC_INODE_BLKSIZE],
LC_STRUCT_INTENT_FILE
LC_POSIX_ACL_XATTR_H
LC_EXPORT___IGET
- LC_FUNC_SET_FS_PWD
LC_FUNC_MS_FLOCK_LOCK
LC_FUNC_HAVE_CAN_SLEEP_ARG
LC_FUNC_F_OP_FLOCK
LC_VFS_KERN_MOUNT
LC_INVALIDATEPAGE_RETURN_INT
LC_UMOUNTBEGIN_HAS_VFSMOUNT
+ LC_INODE_IPRIVATE
LC_EXPORT_FILEMAP_FDATAWRITE_RANGE
if test x$enable_server = xyes ; then
LC_EXPORT_INVALIDATE_MAPPING_PAGES
#define ll_iattr_struct iattr
#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) */
-#ifndef HAVE_SET_FS_PWD
-
#ifdef HAVE_FS_STRUCT_USE_PATH
static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt,
struct dentry *dentry)
if (old_pwd.dentry)
path_put(&old_pwd);
}
-
#else
-
static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt,
struct dentry *dentry)
{
mntput(old_pwdmnt);
}
}
-#endif
-#else
-#define ll_set_fs_pwd set_fs_pwd
-#endif /* HAVE_SET_FS_PWD */
+#endif /* HAVE_FS_STRUCT_USE_PATH */
#ifdef HAVE_INODE_I_MUTEX
#define UNLOCK_INODE_MUTEX(inode) do {mutex_unlock(&(inode)->i_mutex); } while(0)
#define SLAB_DESTROY_BY_RCU 0
#endif
+#ifdef HAVE_INODE_IPRIVATE
+#define INODE_PRIVATE_DATA(inode) ((inode)->i_private)
+#else
+#define INODE_PRIVATE_DATA(inode) ((inode)->u.generic_ip)
+#endif
+
#endif /* __KERNEL__ */
#endif /* _COMPAT25_H */
up(&bdev->bd_sem);
Index: linux-2.6.16.i686/include/linux/fs.h
===================================================================
---- linux-2.6.16.i686.orig/include/linux/fs.h
-+++ linux-2.6.16.i686/include/linux/fs.h
-@@ -1595,6 +1595,10 @@ extern void file_kill(struct file *f);
- struct bio;
- extern void submit_bio(int, struct bio *);
- extern int bdev_read_only(struct block_device *);
+--- linux-2.6.16.i686.orig/include/linux/blkdev.h
++++ linux-2.6.16.i686/include/linux/blkdev.h
+@@ -1595,6 +1595,11 @@ extern void file_kill(struct file *f);
+ } \
+ )
+ #endif
++
+#define HAVE_CLEAR_RDONLY_ON_PUT
+void dev_set_rdonly(struct block_device *bdev);
+int dev_check_rdonly(struct block_device *bdev);
+void dev_clear_rdonly(struct block_device *bdev);
- extern int set_blocksize(struct block_device *, int);
- extern int sb_set_blocksize(struct super_block *, int);
- extern int sb_min_blocksize(struct super_block *, int);
+
+ #define MODULE_ALIAS_BLOCKDEV(major,minor) \
+ MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
-Index: linux-2.6.12-rc6/fs/filesystems.c
-===================================================================
---- linux-2.6.12-rc6.orig/fs/filesystems.c 2005-06-06 17:22:29.000000000 +0200
-+++ linux-2.6.12-rc6/fs/filesystems.c 2005-06-14 15:53:58.298522852 +0200
-@@ -28,7 +28,9 @@
- */
-
- static struct file_system_type *file_systems;
--static DEFINE_RWLOCK(file_systems_lock);
-+DEFINE_RWLOCK(file_systems_lock);
-+
-+EXPORT_SYMBOL(file_systems_lock);
-
- /* WARNING: This can be used only if we _already_ own a reference */
- void get_filesystem(struct file_system_type *fs)
-Index: linux-2.6.12-rc6/include/linux/fs.h
-===================================================================
---- linux-2.6.12-rc6.orig/include/linux/fs.h 2005-06-14 15:53:18.356140529 +0200
-+++ linux-2.6.12-rc6/include/linux/fs.h 2005-06-14 15:53:58.309265039 +0200
-@@ -1563,6 +1563,7 @@
-
- extern struct file_operations generic_ro_fops;
-
-+extern rwlock_t file_systems_lock;
- #define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
-
- extern int vfs_readlink(struct dentry *, char __user *, int, const char *);
-Index: linux-2.6.12-rc6/fs/namespace.c
-===================================================================
---- linux-2.6.12-rc6.orig/fs/namespace.c 2005-06-14 15:53:17.868835847 +0200
-+++ linux-2.6.12-rc6/fs/namespace.c 2005-06-14 15:53:58.361022851 +0200
-@@ -1240,6 +1240,7 @@
- mntput(old_pwdmnt);
- }
- }
-+EXPORT_SYMBOL(set_fs_pwd);
-
- static void chroot_fs_refs(struct nameidata *old_nd, struct nameidata *new_nd)
- {
-Index: linux-2.6.12.5/kernel/exit.c
-===================================================================
---- linux-2.6.12.5.orig/kernel/exit.c 2005-08-17 17:51:28.000000000 +0200
-+++ linux-2.6.12.5/kernel/exit.c 2005-08-17 17:51:44.000000000 +0200
-@@ -250,6 +250,8 @@
- switch_uid(INIT_USER);
- }
-
-+EXPORT_SYMBOL(reparent_to_init);
-+
- void __set_special_pids(pid_t session, pid_t pgrp)
- {
- struct task_struct *curr = current;
Index: linux-2.6.12-rc6/fs/dcache.c
===================================================================
--- linux-2.6.12-rc6.orig/fs/dcache.c 2005-06-14 15:53:19.812195198 +0200
export_symbol_numa-2.6-fc5.patch
blkdev_tunables-2.6-sles10.patch
jbd-stats-2.6-sles10.patch
-i_filter_data.patch
quota-fix-oops-in-invalidate_dquots.patch
-fmode-exec-2.6-sles10.patch
quota-large-limits-sles10.patch
md-mmp-unplug-dev-sles10.patch
__u64 io_epoch;
};
-#define MDS_FILTERDATA(inode) ((struct mds_filter_data *)(inode)->i_filterdata)
+#define MDS_FILTERDATA(inode) \
+ ((struct mds_filter_data *)INODE_PRIVATE_DATA(inode))
+
static inline struct mds_obd *mds_req2mds(struct ptlrpc_request *req)
{
/* Caller must hold mds->mds_epoch_sem */
static int mds_alloc_filterdata(struct inode *inode)
{
- LASSERT(inode->i_filterdata == NULL);
- OBD_ALLOC(inode->i_filterdata, sizeof(struct mds_filter_data));
- if (inode->i_filterdata == NULL)
+ LASSERT(INODE_PRIVATE_DATA(inode) == NULL);
+ OBD_ALLOC(INODE_PRIVATE_DATA(inode), sizeof(struct mds_filter_data));
+ if (INODE_PRIVATE_DATA(inode) == NULL)
return -ENOMEM;
LASSERT(igrab(inode) == inode);
return 0;
/* Caller must hold mds->mds_epoch_sem */
static void mds_free_filterdata(struct inode *inode)
{
- LASSERT(inode->i_filterdata != NULL);
- OBD_FREE(inode->i_filterdata, sizeof(struct mds_filter_data));
- inode->i_filterdata = NULL;
+ LASSERT(INODE_PRIVATE_DATA(inode) != NULL);
+ OBD_FREE(INODE_PRIVATE_DATA(inode), sizeof(struct mds_filter_data));
+ INODE_PRIVATE_DATA(inode) = NULL;
iput(inode);
}
goto out;
}
- if (inode->i_filterdata == NULL)
+ if (MDS_FILTERDATA(inode) == NULL)
mds_alloc_filterdata(inode);
- if (inode->i_filterdata == NULL) {
+ if (MDS_FILTERDATA(inode) == NULL) {
rc = -ENOMEM;
goto out;
}
ENTRY;
LOCK_INODE_MUTEX(inode);
- ofd = inode->i_filterdata;
+ ofd = INODE_PRIVATE_DATA(inode);
if (ofd && ofd->ofd_epoch >= io_epoch) {
if (ofd->ofd_epoch > io_epoch)
if (!ofd)
GOTO(out, rc = -ENOMEM);
igrab(inode);
- inode->i_filterdata = ofd;
+ INODE_PRIVATE_DATA(inode) = ofd;
ofd->ofd_epoch = io_epoch;
}
/* the decision to write a record is now made, unlock */