⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lustre_compat25.h

📁 非常经典的一个分布式系统
💻 H
📖 第 1 页 / 共 2 页
字号:
        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_RESCHEDstatic 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 CheckWriteback(page, cmd) 1#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);}#ifndef typecheck/* * Check at compile time that something is of a particular type. * Always evaluates to 1 so you may use it easily in comparisons. */#define typecheck(type,x) \({	type __dummy; \	typeof(x) __dummy2; \	(void)(&__dummy == &__dummy2); \	1; \})#endif#endif /* end of 2.4 compat macros */#ifdef HAVE_PAGE_LISTstatic inline int mapping_has_pages(struct address_space *mapping){        int rc = 1;        ll_pgcache_lock(mapping);        if (list_empty(&mapping->dirty_pages) &&            list_empty(&mapping->clean_pages) &&            list_empty(&mapping->locked_pages)) {                rc = 0;        }        ll_pgcache_unlock(mapping);        return rc;}#elsestatic inline int mapping_has_pages(struct address_space *mapping){        return mapping->nrpages > 0;}#endif#ifdef HAVE_KIOBUF_KIO_BLOCKS#define KIOBUF_GET_BLOCKS(k) ((k)->kio_blocks)#else#define KIOBUF_GET_BLOCKS(k) ((k)->blocks)#endif#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7))#define ll_set_dflags(dentry, flags) do { dentry->d_vfs_flags |= flags; } while(0)#define ll_vfs_symlink(dir, dentry, path, mode) vfs_symlink(dir, dentry, path)#else#define ll_set_dflags(dentry, flags) do { \                spin_lock(&dentry->d_lock); \                dentry->d_flags |= flags; \                spin_unlock(&dentry->d_lock); \        } while(0)#define ll_vfs_symlink(dir, dentry, path, mode) vfs_symlink(dir, dentry, path, mode)#endif#ifndef container_of#define container_of(ptr, type, member) ({                      \                const typeof( ((type *)0)->member ) *__mptr = (ptr); \                (type *)( (char *)__mptr - offsetof(type,member) );})#endif#ifdef HAVE_I_ALLOC_SEM#define UP_WRITE_I_ALLOC_SEM(i)   do { up_write(&(i)->i_alloc_sem); } while (0)#define DOWN_WRITE_I_ALLOC_SEM(i) do { down_write(&(i)->i_alloc_sem); } while(0)#define LASSERT_I_ALLOC_SEM_WRITE_LOCKED(i) LASSERT(down_read_trylock(&(i)->i_alloc_sem) == 0)#define UP_READ_I_ALLOC_SEM(i)    do { up_read(&(i)->i_alloc_sem); } while (0)#define DOWN_READ_I_ALLOC_SEM(i)  do { down_read(&(i)->i_alloc_sem); } while (0)#define LASSERT_I_ALLOC_SEM_READ_LOCKED(i) LASSERT(down_write_trylock(&(i)->i_alloc_sem) == 0)#else#define UP_READ_I_ALLOC_SEM(i)              do { } while (0)#define DOWN_READ_I_ALLOC_SEM(i)            do { } while (0)#define LASSERT_I_ALLOC_SEM_READ_LOCKED(i)  do { } while (0)#define UP_WRITE_I_ALLOC_SEM(i)             do { } while (0)#define DOWN_WRITE_I_ALLOC_SEM(i)           do { } while (0)#define LASSERT_I_ALLOC_SEM_WRITE_LOCKED(i) do { } while (0)#endif#ifndef HAVE_GRAB_CACHE_PAGE_NOWAIT_GFP#define grab_cache_page_nowait_gfp(x, y, z) grab_cache_page_nowait((x), (y))#endif#ifndef HAVE_FILEMAP_FDATAWRITE#define filemap_fdatawrite(mapping)      filemap_fdatasync(mapping)#endif#ifdef HAVE_VFS_KERN_MOUNTstatic inline struct vfsmount *ll_kern_mount(const char *fstype, int flags, const char *name, void *data){        struct file_system_type *type = get_fs_type(fstype);        struct vfsmount *mnt;        if (!type)                return ERR_PTR(-ENODEV);        mnt = vfs_kern_mount(type, flags, name, data);        module_put(type->owner);        return mnt;}#else#define ll_kern_mount(fstype, flags, name, data) do_kern_mount((fstype), (flags), (name), (data))#endif#ifndef HAVE_GENERIC_FILE_READstatic inlinessize_tgeneric_file_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos){        struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };        struct kiocb kiocb;        ssize_t ret;        init_sync_kiocb(&kiocb, filp);        kiocb.ki_pos = *ppos;        kiocb.ki_left = len;        ret = generic_file_aio_read(&kiocb, &iov, 1, kiocb.ki_pos);        *ppos = kiocb.ki_pos;        return ret;}#endif#ifndef HAVE_GENERIC_FILE_WRITEstatic inlinessize_tgeneric_file_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos){        struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };        struct kiocb kiocb;        ssize_t ret;        init_sync_kiocb(&kiocb, filp);        kiocb.ki_pos = *ppos;        kiocb.ki_left = len;        ret = generic_file_aio_write(&kiocb, &iov, 1, kiocb.ki_pos);        *ppos = kiocb.ki_pos;        return ret;}#endif#ifdef HAVE_STATFS_DENTRY_PARAM#define ll_do_statfs(sb, sfs) (sb)->s_op->statfs((sb)->s_root, (sfs))#else#define ll_do_statfs(sb, sfs) (sb)->s_op->statfs((sb), (sfs))#endif/* task_struct */#ifndef HAVE_TASK_PPTR#define p_pptr parent#endif#ifdef HAVE_UNREGISTER_BLKDEV_RETURN_INT#define ll_unregister_blkdev(a,b)       unregister_blkdev((a),(b))#elsestatic inline int ll_unregister_blkdev(unsigned int dev, const char *name){        unregister_blkdev(dev, name);        return 0;}#endif#ifdef HAVE_INVALIDATE_BDEV_2ARG#define ll_invalidate_bdev(a,b)         invalidate_bdev((a),(b))#else#define ll_invalidate_bdev(a,b)         invalidate_bdev((a))#endif#endif /* __KERNEL__ */#endif /* _COMPAT25_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -