to check whether it is stale, because sometimes, we want the
enqueue happened anyway, and op_data.fid2 will not be initialized.
+Severity : enhancement
+Bugzilla : 11647
+Description: update patchless client
+Details : Add support for patchless client with 2.6.20, 2.6.21 and RHEL 5
--------------------------------------------------------------------------------
#* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+#* vim:expandtab:shiftwidth=8:tabstop=8:
#
# LC_CONFIG_SRCDIR
#
AC_DEFUN([LC_CONFIG_SRCDIR],
[AC_CONFIG_SRCDIR([lustre/obdclass/obdo.c])
])
-
+
#
# LC_PATH_DEFAULTS
#
])
])
-# LC_WB_RANGE_START
-# 2.6.20 rename struct writeback fields
-AC_DEFUN([LC_WB_RANGE_START],
-[AC_MSG_CHECKING([kernel has range_start in struct writeback_control])
+# LC_CANCEL_DIRTY_PAGE
+# 2.6.20 introduse cancel_dirty_page instead of
+# clear_page_dirty.
+AC_DEFUN([LC_CANCEL_DIRTY_PAGE],
+[AC_MSG_CHECKING([kernel has cancel_dirty_page])
LB_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- #include <linux/sched.h>
- #include <linux/writeback.h>
+ #include <linux/page-flags.h>
],[
- struct writeback_control wb;
+ cancel_dirty_page(NULL, 0);
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_CANCEL_DIRTY_PAGE, 1,
+ [kernel has cancel_dirty_page instead of clear_page_dirty])
+],[
+ AC_MSG_RESULT(NO)
+])
+])
- wb.range_start = 0;
+# RHEL5 in FS-cache patch rename PG_checked flag
+# into PG_fs_misc
+AC_DEFUN([LC_PG_FS_MISC],
+[AC_MSG_CHECKING([kernel has PG_fs_misc])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/page-flags.h>
+],[
+ #ifndef PG_fs_misc
+ #error PG_fs_misc not defined in kernel
+ #endif
],[
AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_WB_RANGE_START, 1,
- [writeback control has range_start field])
+ AC_DEFINE(HAVE_PG_FS_MISC, 1,
+ [is kernel have PG_fs_misc])
],[
AC_MSG_RESULT(NO)
])
AC_DEFUN([LC_PROG_LINUX],
[ LC_LUSTRE_VERSION_H
if test x$enable_server = xyes ; then
- LC_CONFIG_BACKINGFS
+ LC_CONFIG_BACKINGFS
fi
LC_CONFIG_PINGER
LC_CONFIG_LIBLUSTRE_RECOVERY
LC_VFS_KERN_MOUNT
LC_INVALIDATEPAGE_RETURN_INT
LC_UMOUNTBEGIN_HAS_VFSMOUNT
-LC_WB_RANGE_START
+
+#2.6.18 + RHEL5 (fc6)
+LC_PG_FS_MISC
# 2.6.19
LC_INODE_BLKSIZE
LC_VFS_READDIR_U64_INO
LC_GENERIC_FILE_READ
LC_GENERIC_FILE_WRITE
+
+# 2.6.20
+LC_CANCEL_DIRTY_PAGE
])
#
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+ * vim:expandtab:shiftwidth=8:tabstop=8:
+ *
+ * Copyright (C) 2002, 2003 Cluster File Systems, Inc.
+ *
+ * This file is part of Lustre, http://www.lustre.org.
+ *
+ * Lustre is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * Lustre 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 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Lustre; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
#ifndef LUSTRE_PATCHLESS_COMPAT_H
#define LUSTRE_PATCHLESS_COMPAT_H
if (PagePrivate(page))
page->mapping->a_ops->invalidatepage(page, 0);
+#ifdef HAVE_CANCEL_DIRTY_PAGE
+ cancel_dirty_page(page, PAGE_SIZE);
+#else
clear_page_dirty(page);
+#endif
ClearPageUptodate(page);
ClearPageMappedToDisk(page);
ll_remove_from_page_cache(page);
}
#define __d_rehash(dentry, lock) d_rehash_cond(dentry, lock)
-
+
#define LUSTRE_PATCHLESS
#ifndef ATTR_FROM_OPEN
typedef struct ext2_dir_entry_2 ext2_dirent;
-#define PageChecked(page) test_bit(PG_checked, &(page)->flags)
-#define SetPageChecked(page) set_bit(PG_checked, &(page)->flags)
+#ifdef HAVE_PG_FS_MISC
+#define PageChecked(page) test_bit(PG_fs_misc, &(page)->flags)
+#define SetPageChecked(page) set_bit(PG_fs_misc, &(page)->flags)
+#endif
/* returns the page unlocked, but with a reference */
static int ll_dir_readpage(struct file *file, struct page *page)
{
struct ll_file_data *fd;
- OBD_SLAB_ALLOC(fd, ll_file_data_slab, SLAB_KERNEL, sizeof *fd);
+ OBD_SLAB_ALLOC(fd, ll_file_data_slab, GFP_KERNEL, sizeof *fd);
return fd;
}
if (sbi->ll_async_page_count >= sbi->ll_async_page_max)
llap_shrink_cache(sbi, 0);
- OBD_SLAB_ALLOC(llap, ll_async_page_slab, SLAB_KERNEL,
+ OBD_SLAB_ALLOC(llap, ll_async_page_slab, GFP_KERNEL,
ll_async_page_slab_size);
if (llap == NULL)
RETURN(ERR_PTR(-ENOMEM));
{
struct ll_inode_info *lli;
lprocfs_counter_incr((ll_s2sbi(sb))->ll_stats, LPROC_LL_ALLOC_INODE);
- OBD_SLAB_ALLOC(lli, ll_inode_cachep, SLAB_KERNEL, sizeof *lli);
+ OBD_SLAB_ALLOC(lli, ll_inode_cachep, GFP_KERNEL, sizeof *lli);
if (lli == NULL)
return NULL;
return NULL;;
for (i = 0; i < stripe_count; i++) {
- OBD_SLAB_ALLOC(loi, lov_oinfo_slab, SLAB_NOFS, sizeof(*loi));
+ OBD_SLAB_ALLOC(loi, lov_oinfo_slab, GFP_NOFS, sizeof(*loi));
if (loi == NULL)
goto err;
lsm->lsm_oinfo[i] = loi;
{
struct obd_device *obd;
- OBD_SLAB_ALLOC(obd, obd_device_cachep, SLAB_KERNEL, sizeof(*obd));
+ OBD_SLAB_ALLOC(obd, obd_device_cachep, GFP_KERNEL, sizeof(*obd));
if (obd != NULL) {
obd->obd_magic = OBD_DEVICE_MAGIC;
}
{
#ifdef CONFIG_SYSCTL
if ( !obd_table_header )
- obd_table_header = register_sysctl_table(parent_table, 0);
+ obd_table_header = cfs_register_sysctl_table(parent_table, 0);
#endif
}
{
#ifdef CONFIG_SYSCTL
if ( obd_table_header )
- unregister_sysctl_table(obd_table_header);
+ cfs_unregister_sysctl_table(obd_table_header);
obd_table_header = NULL;
#endif
}
struct filter_export_data *fed = &exp->exp_filter_data;
struct filter_mod_data *found = NULL, *fmd_new = NULL;
- OBD_SLAB_ALLOC(fmd_new, ll_fmd_cachep, SLAB_NOFS, sizeof(*fmd_new));
+ OBD_SLAB_ALLOC(fmd_new, ll_fmd_cachep, GFP_NOFS, sizeof(*fmd_new));
spin_lock(&fed->fed_lock);
found = filter_fmd_find_nolock(&exp->exp_obd->u.filter,fed,objid,group);
struct lustre_qunit *qunit = NULL;
ENTRY;
- OBD_SLAB_ALLOC(qunit, qunit_cachep, SLAB_NOFS, sizeof(*qunit));
+ OBD_SLAB_ALLOC(qunit, qunit_cachep, GFP_NOFS, sizeof(*qunit));
if (qunit == NULL)
RETURN(NULL);
struct lustre_dquot *dquot = NULL;
ENTRY;
- OBD_SLAB_ALLOC(dquot, lustre_dquot_cachep, SLAB_NOFS, sizeof(*dquot));
+ OBD_SLAB_ALLOC(dquot, lustre_dquot_cachep, GFP_NOFS, sizeof(*dquot));
if (dquot == NULL)
RETURN(NULL);