Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / include / linux / lustre_compat25.h
index 8139856..cd61080 100644 (file)
 #include <linux/lustre_patchless_compat.h>
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
-struct ll_iattr_struct {
+struct ll_iattr {
         struct iattr    iattr;
         unsigned int    ia_attr_flags;
 };
 #else
-#define ll_iattr_struct iattr
+#define ll_iattr iattr
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) */
 
 #ifndef HAVE_SET_FS_PWD
@@ -65,7 +65,13 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt,
 #define ll_set_fs_pwd set_fs_pwd
 #endif /* HAVE_SET_FS_PWD */
 
-#ifdef HAVE_INODE_I_MUTEX
+/*
+ * set ATTR_BLOCKS to a high value to avoid any risk of collision with other
+ * ATTR_* attributes (see bug 13828)
+ */
+#define ATTR_BLOCKS    (1 << 27)
+
+#if HAVE_INODE_I_MUTEX
 #define UNLOCK_INODE_MUTEX(inode) do {mutex_unlock(&(inode)->i_mutex); } while(0)
 #define LOCK_INODE_MUTEX(inode) do {mutex_lock(&(inode)->i_mutex); } while(0)
 #define TRYLOCK_INODE_MUTEX(inode) mutex_trylock(&(inode)->i_mutex)
@@ -121,8 +127,6 @@ void groups_free(struct group_info *ginfo);
 #define gfp_t int
 #endif
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-
 #define lock_dentry(___dentry)          spin_lock(&(___dentry)->d_lock)
 #define unlock_dentry(___dentry)        spin_unlock(&(___dentry)->d_lock)
 
@@ -201,7 +205,7 @@ static inline int cleanup_group_info(void)
 
 #include <linux/proc_fs.h>
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,11)
+#ifndef HAVE___D_REHASH
 #define __d_rehash(dentry, lock) d_rehash_cond(dentry, lock)
 #endif
 
@@ -213,191 +217,8 @@ static inline int cleanup_group_info(void)
         flock_lock_file_wait(file, lock)
 #endif
 
-
-#else /* 2.4.. */
-
-#define ll_flock_lock_file_wait(file, lock, can_sleep) \
-        do {} while(0)
-
-#define lock_dentry(___dentry)
-#define unlock_dentry(___dentry)
-
-#define lock_24kernel()         lock_kernel()
-#define unlock_24kernel()       unlock_kernel()
-#define ll_kernel_locked()      (current->lock_depth >= 0)
-
-/* 2.4 kernels have HZ=100 on i386/x86_64, this should be reasonably safe */
-#define get_jiffies_64()        (__u64)jiffies
-
-#ifdef HAVE_MM_INLINE
-#include <linux/mm_inline.h>
-#endif
-
-#ifndef pgoff_t
-#define pgoff_t unsigned long
-#endif
-
-#define ll_vfs_create(a,b,c,d)              vfs_create(a,b,c)
-#define ll_permission(inode,mask,nd)        permission(inode,mask)
-#define ILOOKUP(sb, ino, test, data)        ilookup4(sb, ino, test, data);
-#define DCACHE_DISCONNECTED                 DCACHE_NFSD_DISCONNECTED
-#define ll_dev_t                            int
-#define old_encode_dev(dev)                 (dev)
-
-/* 2.5 uses hlists for some things, like the d_hash.  we'll treat them
- * as 2.5 and let macros drop back.. */
-#ifndef HLIST_HEAD /* until we get a kernel newer than l28 */
-#define hlist_entry                     list_entry
-#define hlist_head                      list_head
-#define hlist_node                      list_head
-#define HLIST_HEAD                      LIST_HEAD
-#define INIT_HLIST_HEAD                 INIT_LIST_HEAD
-#define hlist_del_init                  list_del_init
-#define hlist_add_head                  list_add
-#endif
-
-#ifndef INIT_HLIST_NODE
-#define INIT_HLIST_NODE(p)              ((p)->next = NULL, (p)->prev = NULL)
-#endif
-
-#ifndef hlist_for_each
-#define hlist_for_each                  list_for_each
-#endif
-
-#ifndef hlist_for_each_safe
-#define hlist_for_each_safe             list_for_each_safe
-#endif
-
-#define KDEVT_INIT(val)                 (val)
-#define ext3_xattr_set_handle           ext3_xattr_set
-#define try_module_get                  __MOD_INC_USE_COUNT
-#define module_put                      __MOD_DEC_USE_COUNT
-#define LTIME_S(time)                   (time)
-
-#if !defined(CONFIG_RH_2_4_20) && !defined(cpu_online)
-#define cpu_online(cpu)                 test_bit(cpu, &(cpu_online_map))
-#endif
-
-static inline int ll_path_lookup(const char *path, unsigned flags,
-                                 struct nameidata *nd)
-{
-        int error = 0;
-        if (path_init(path, flags, nd))
-                error = path_walk(path, nd);
-        return error;
-}
-#define ll_permission(inode,mask,nd)    permission(inode,mask)
-typedef long sector_t;
-
-#define ll_pgcache_lock(mapping)        spin_lock(&pagecache_lock)
-#define ll_pgcache_unlock(mapping)      spin_unlock(&pagecache_lock)
-#define ll_call_writepage(inode, page)  \
-                               (inode)->i_mapping->a_ops->writepage(page)
-#define ll_invalidate_inode_pages(inode) invalidate_inode_pages(inode)
-#define ll_truncate_complete_page(page) truncate_complete_page(page)
-
-static inline void clear_page_dirty(struct page *page)
-{
-        if (PageDirty(page))
-                ClearPageDirty(page);
-}
-
-static inline int clear_page_dirty_for_io(struct page *page)
-{
-        struct address_space *mapping = page->mapping;
-
-        if (page->mapping && PageDirty(page)) {
-                ClearPageDirty(page);
-                ll_pgcache_lock(mapping);
-                list_del(&page->list);
-                list_add(&page->list, &mapping->locked_pages);
-                ll_pgcache_unlock(mapping);
-                return 1;
-        }
-        return 0;
-}
-
-static inline void ll_redirty_page(struct page *page)
-{
-        SetPageDirty(page);
-        ClearPageLaunder(page);
-}
-
-static inline void __d_drop(struct dentry *dentry)
-{
-        list_del_init(&dentry->d_hash);
-}
-
-static inline int cleanup_group_info(void)
-{
-        /* Get rid of unneeded supplementary groups */
-        current->ngroups = 0;
-        memset(current->groups, 0, sizeof(current->groups));
-        return 0;
-}
-
-#ifndef HAVE_COND_RESCHED
-static inline void cond_resched(void)
-{
-        if (unlikely(need_resched())) {
-                set_current_state(TASK_RUNNING);
-                schedule();
-        }
-}
-#endif
-
-/* to find proc_dir_entry from inode. 2.6 has native one -bzzz */
-#ifndef HAVE_PDE
-#define PDE(ii)         ((ii)->u.generic_ip)
-#endif
-
-#define __set_page_ll_data(page, llap) set_page_private(page, (unsigned long)llap)
-#define __clear_page_ll_data(page) set_page_private(page, 0)
-#define PageWriteback(page) 0
-#define set_page_writeback(page) do {} while (0)
-#define end_page_writeback(page) do {} while (0)
-
-static inline int mapping_mapped(struct address_space *mapping)
-{
-        if (mapping->i_mmap_shared)
-                return 1;
-        if (mapping->i_mmap)
-                return 1;
-        return 0;
-}
-
-#ifdef ZAP_PAGE_RANGE_VMA
-#define ll_zap_page_range(vma, addr, len)  zap_page_range(vma, addr, len)
-#else
-#define ll_zap_page_range(vma, addr, len)  zap_page_range(vma->vm_mm, addr, len)
-#endif
-
-#ifndef HAVE_PAGE_MAPPED
-/* Poor man's page_mapped. substract from page count, counts from
-   buffers/pagecache and our own count (we are supposed to hold one reference).
-   What is left are user mappings and also others who work with this page now,
-   but there are supposedly none. */
-static inline int page_mapped(struct page *page)
-{
-        return page_count(page) - !!page->mapping - !!page->buffers - 1;
-}
-#endif /* !HAVE_PAGE_MAPPED */
-
-static inline void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
-{
-        update_atime(dentry->d_inode);
-}
-
-static inline void file_accessed(struct file *file)
-{
-#ifdef O_NOATIME
-        if (file->f_flags & O_NOATIME)
-                return;
-#endif
-        touch_atime(file->f_vfsmnt, file->f_dentry);
-}
-
-#endif /* end of 2.4 compat macros */
+#define CheckWriteback(page, cmd) \
+        (!(!PageWriteback(page) && cmd == OBD_BRW_WRITE))
 
 #ifdef HAVE_PAGE_LIST
 static inline int mapping_has_pages(struct address_space *mapping)
@@ -481,6 +302,7 @@ ll_kern_mount(const char *fstype, int flags, const char *name, void *data)
         if (!type)
                 return ERR_PTR(-ENODEV);
         mnt = vfs_kern_mount(type, flags, name, data);
+        module_put(type->owner);
         return mnt;
 }
 #else