#ifndef AFS_LINUX_OSI_COMPAT_H
#define AFS_LINUX_OSI_COMPAT_H
-#ifndef DO_SYNC_READ
+#if defined(HAVE_LINUX_FREEZER_H)
+# include <linux/freezer.h>
+#endif
+
+#ifndef HAVE_LINUX_DO_SYNC_READ
static inline int
do_sync_read(struct file *fp, char *buf, size_t count, loff_t *offp) {
return generic_file_read(fp, buf, count, offp);
static inline void afs_linux_set_nfsfs_renamed(void) { return; }
#endif
-#ifndef HAVE_KERNEL_HLIST_UNHASHED
+#ifndef HAVE_LINUX_HLIST_UNHASHED
static void
hlist_unhashed(const struct hlist_node *h) {
return (!h->pprev == NULL);
#define AOP_WRITEPAGE_ACTIVATE WRITEPAGE_ACTIVATE
#endif
-#if defined(HAVE_WRITE_BEGIN) && !defined(HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN)
+#if defined(STRUCT_ADDRESS_SPACE_OPERATIONS_HAS_WRITE_BEGIN) && !defined(HAVE_LINUX_GRAB_CACHE_PAGE_WRITE_BEGIN)
static inline struct page *
grab_cache_page_write_begin(struct address_space *mapping, pgoff_t index,
unsigned int flags) {
#endif
}
-#if defined(STRUCT_TASK_HAS_CRED)
+#if defined(STRUCT_TASK_STRUCT_HAS_CRED)
static inline struct key*
afs_linux_search_keyring(afs_ucred_t *cred, struct key_type *type)
{
}
#endif
+#ifdef LINUX_KEYRING_SUPPORT
+# ifndef KEY_ALLOC_NOT_IN_QUOTA
+# define KEY_ALLOC_NOT_IN_QUOTA 1
+# endif
+# ifndef KEY_ALLOC_IN_QUOTA
+# define KEY_ALLOC_IN_QUOTA 0
+# endif
+#endif
+#endif
+
+#ifndef HAVE_LINUX_PAGE_OFFSET
+static inline loff_t
+page_offset(struct page *pp)
+{
+ return (((loff_t) pp->index) << PAGE_CACHE_SHIFT);
+}
+#endif
+
+#ifndef HAVE_LINUX_ZERO_USER_SEGMENTS
+static inline void
+zero_user_segments(struct page *pp, unsigned int from1, unsigned int to1,
+ unsigned int from2, unsigned int to2)
+{
+ void *base = kmap_atomic(pp, KM_USER0);
+
+ if (to1 > from1)
+ memset(base + from1, 0, to1 - from1);
+
+ if (to2 > from2)
+ memset(base + from2, 0, to2 - from2);
+
+ flush_dcache_page(pp);
+ kunmap_atomic(base, KM_USER0);
+}
+#endif
+
+#ifndef HAVE_LINUX_VFS_LLSEEK
+static inline loff_t
+vfs_llseek(struct file *filp, loff_t offset, int origin) {
+ if (filp->f_op->llseek)
+ return filp->f_op->llseek(filp, offset, origin);
+ return default_llseek(filp, offset, origin);
+}
+#endif
+
+#ifndef HAVE_LINUX_KERNEL_SETSOCKOPT
+/* Available from 2.6.19 */
+
+static inline int
+kernel_setsockopt(struct socket *sockp, int level, int name, char *val,
+ unsigned int len) {
+ mm_segment_t old_fs = get_fs();
+ int ret;
+
+ set_fs(get_ds());
+ ret = sockp->ops->setsockopt(sockp, level, name, val, len);
+ set_fs(old_fs);
+
+ return ret;
+}
+
+static inline int
+kernel_getsockopt(struct socket *sockp, int level, int name, char *val,
+ int *len) {
+ mm_segment_t old_fs = get_fs();
+ int ret;
+
+ set_fs(get_ds());
+ ret = sockp->ops->setsockopt(sockp, level, name, val, len);
+ set_fs(old_fs);
+
+ return ret;
+}
+#endif
+
+#ifdef HAVE_TRY_TO_FREEZE
+static inline void
+afs_try_to_freeze(void) {
+# ifdef LINUX_REFRIGERATOR_TAKES_PF_FREEZE
+ try_to_freeze(PF_FREEZE);
+# else
+ try_to_freeze();
+# endif
+}
+#else
+static inline void
+afs_try_to_freeze(void) {
+# ifdef CONFIG_PM
+ if (current->flags & PF_FREEZE) {
+ refrigerator(PF_FREEZE);
+# endif
+}
+#endif
+
+#if !defined(HAVE_LINUX_PAGECHECKED)
+# if defined(HAVE_LINUX_PAGEFSMISC)
+# include <linux/page-flags.h>
+
+# define PageChecked(p) PageFsMisc((p))
+# define SetPageChecked(p) SetPageFsMisc((p))
+# define ClearPageChecked(p) ClearPageFsMisc((p))
+
+# endif
#endif