X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flinux%2Flustre_patchless_compat.h;h=1876f94d0152526614d0b6dd9089cf99b096b651;hb=5bd85b467a4b6ef57d7a3c119296c9a317afc73b;hp=17fbc5cbc469bbdcc42f2455ca363bd3ed91036d;hpb=7c27d9a67ada42a70b638ca1701dc298142934cc;p=fs%2Flustre-release.git diff --git a/lustre/include/linux/lustre_patchless_compat.h b/lustre/include/linux/lustre_patchless_compat.h index 17fbc5c..1876f94 100644 --- a/lustre/include/linux/lustre_patchless_compat.h +++ b/lustre/include/linux/lustre_patchless_compat.h @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -28,6 +26,8 @@ /* * Copyright (c) 2007, 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/ @@ -37,7 +37,6 @@ #ifndef LUSTRE_PATCHLESS_COMPAT_H #define LUSTRE_PATCHLESS_COMPAT_H -#include #include #ifndef HAVE_TRUNCATE_COMPLETE_PAGE @@ -45,33 +44,44 @@ #include #include +#ifndef HAVE_DELETE_FROM_PAGE_CACHE /* 2.6.39 */ +#ifndef HAVE_REMOVE_FROM_PAGE_CACHE /* 2.6.35 - 2.6.38 */ + /* XXX copy & paste from 2.6.15 kernel */ static inline void ll_remove_from_page_cache(struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping = page->mapping; - BUG_ON(!PageLocked(page)); + BUG_ON(!PageLocked(page)); #ifdef HAVE_RW_TREE_LOCK - write_lock_irq(&mapping->tree_lock); -#else - cfs_spin_lock_irq(&mapping->tree_lock); -#endif - radix_tree_delete(&mapping->page_tree, page->index); - page->mapping = NULL; - mapping->nrpages--; -#ifdef HAVE_NR_PAGECACHE - cfs_atomic_add(-1, &nr_pagecache); // XXX pagecache_acct(-1); + write_lock_irq(&mapping->tree_lock); #else - __dec_zone_page_state(page, NR_FILE_PAGES); + spin_lock_irq(&mapping->tree_lock); #endif + radix_tree_delete(&mapping->page_tree, page->index); + page->mapping = NULL; + mapping->nrpages--; + __dec_zone_page_state(page, NR_FILE_PAGES); #ifdef HAVE_RW_TREE_LOCK - write_unlock_irq(&mapping->tree_lock); + write_unlock_irq(&mapping->tree_lock); #else - cfs_spin_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); #endif } +#else /* HAVE_REMOVE_FROM_PAGE_CACHE */ +#define ll_remove_from_page_cache(page) remove_from_page_cache(page) +#endif /* !HAVE_REMOVE_FROM_PAGE_CACHE */ + +static inline void ll_delete_from_page_cache(struct page *page) +{ + ll_remove_from_page_cache(page); + page_cache_release(page); +} +#else /* HAVE_DELETE_FROM_PAGE_CACHE */ +#define ll_delete_from_page_cache(page) delete_from_page_cache(page) +#endif /* !HAVE_DELETE_FROM_PAGE_CACHE */ static inline void truncate_complete_page(struct address_space *mapping, struct page *page) @@ -82,32 +92,18 @@ truncate_complete_page(struct address_space *mapping, struct page *page) 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 ClearPageMappedToDisk(page); - ll_remove_from_page_cache(page); - page_cache_release(page); /* pagecache ref */ + ll_delete_from_page_cache(page); } -#endif /* HAVE_TRUNCATE_COMPLETE_PAGE */ - -#if !defined(HAVE_D_REHASH_COND) && !defined(HAVE___D_REHASH) -/* megahack */ -static inline void d_rehash_cond(struct dentry * entry, int lock) -{ - if (!lock) - spin_unlock(&dcache_lock); +#endif /* !HAVE_TRUNCATE_COMPLETE_PAGE */ - d_rehash(entry); - - if (!lock) - spin_lock(&dcache_lock); -} - -#define __d_rehash(dentry, lock) d_rehash_cond(dentry, lock) -#endif /* !HAVE_D_REHASH_COND && !HAVE___D_REHASH*/ +#ifdef HAVE_DCACHE_LOCK +# define dget_dlock(d) dget_locked(d) +# define d_refcount(d) atomic_read(&(d)->d_count) +#else +# define d_refcount(d) ((d)->d_count) +#endif /* HAVE_DCACHE_LOCK */ #ifdef ATTR_OPEN # define ATTR_FROM_OPEN ATTR_OPEN