Whamcloud - gitweb
LU-2800 build: fix compilation issue with is_compat_task
[fs/lustre-release.git] / lustre / llite / llite_internal.h
index 25cc733..912b04d 100644 (file)
@@ -46,6 +46,7 @@
 #include <lclient.h>
 #include <lustre_mdc.h>
 #include <linux/lustre_intent.h>
+#include <linux/compat.h>
 
 #ifndef FMODE_EXEC
 #define FMODE_EXEC 0
@@ -123,6 +124,8 @@ enum lli_flags {
         LLIF_SRVLOCK            = (1 << 5),
        /* File data is modified. */
        LLIF_DATA_MODIFIED      = (1 << 6),
+       /* File is being restored */
+       LLIF_FILE_RESTORING     = (1 << 7),
 };
 
 struct ll_inode_info {
@@ -296,10 +299,10 @@ static inline struct ll_inode_info *ll_i2info(struct inode *inode)
 
 /* default to about 40meg of readahead on a given system.  That much tied
  * up in 512k readahead requests serviced at 40ms each is about 1GB/s. */
-#define SBI_DEFAULT_READAHEAD_MAX (40UL << (20 - CFS_PAGE_SHIFT))
+#define SBI_DEFAULT_READAHEAD_MAX (40UL << (20 - PAGE_CACHE_SHIFT))
 
 /* default to read-ahead full files smaller than 2MB on the second read */
-#define SBI_DEFAULT_READAHEAD_WHOLE_MAX (2UL << (20 - CFS_PAGE_SHIFT))
+#define SBI_DEFAULT_READAHEAD_WHOLE_MAX (2UL << (20 - PAGE_CACHE_SHIFT))
 
 enum ra_stat {
         RA_STAT_HIT = 0,
@@ -474,10 +477,6 @@ struct ll_sb_info {
 
         struct lprocfs_stats     *ll_stats; /* lprocfs stats counter */
 
-       /* Used to track "unstable" pages on a client, and maintain a
-        * LRU list of clean pages. An "unstable" page is defined as
-        * any page which is sent to a server as part of a bulk request,
-        * but is uncommitted to stable storage. */
        struct cl_client_cache    ll_cache;
 
         struct lprocfs_stats     *ll_ra_stats;
@@ -516,6 +515,7 @@ struct ll_sb_info {
                                                  * clustred nfs */
         struct rmtacl_ctl_table   ll_rct;
         struct eacl_table         ll_et;
+       __kernel_fsid_t           ll_fsid;
 };
 
 #define LL_DEFAULT_MAX_RW_CHUNK      (32 * 1024 * 1024)
@@ -613,15 +613,19 @@ struct ll_readahead_state {
         unsigned long   ras_consecutive_stride_requests;
 };
 
-extern cfs_mem_cache_t *ll_file_data_slab;
+extern struct kmem_cache *ll_file_data_slab;
 struct lustre_handle;
 struct ll_file_data {
-        struct ll_readahead_state fd_ras;
-        int fd_omode;
-        struct ccc_grouplock fd_grouplock;
+       struct ll_readahead_state fd_ras;
+       struct ccc_grouplock fd_grouplock;
        __u64 lfd_pos;
-        __u32 fd_flags;
-        struct file *fd_file;
+       __u32 fd_flags;
+       fmode_t fd_omode;
+       /* openhandle if lease exists for this file.
+        * Borrow lli->lli_och_mutex to protect assignment */
+       struct obd_client_handle *fd_lease_och;
+       struct obd_client_handle *fd_och;
+       struct file *fd_file;
        /* Indicate whether need to report failure when close.
         * true: failure is known, not report again.
         * false: unknown failure, should report. */
@@ -653,13 +657,18 @@ static inline int ll_need_32bit_api(struct ll_sb_info *sbi)
 #if BITS_PER_LONG == 32
         return 1;
 #else
-        return unlikely(cfs_curproc_is_32bit() || (sbi->ll_flags & LL_SBI_32BIT_API));
+       return unlikely(
+#ifdef CONFIG_COMPAT
+               is_compat_task() ||
+#endif
+               (sbi->ll_flags & LL_SBI_32BIT_API)
+       );
 #endif
 }
 
 #define LLAP_MAGIC 98764321
 
-extern cfs_mem_cache_t *ll_async_page_slab;
+extern struct kmem_cache *ll_async_page_slab;
 extern size_t ll_async_page_slab_size;
 
 void ll_ra_read_in(struct file *f, struct ll_ra_read *rar);
@@ -809,6 +818,11 @@ int ll_put_grouplock(struct inode *inode, struct file *file, unsigned long arg);
 int ll_fid2path(struct inode *inode, void *arg);
 int ll_data_version(struct inode *inode, __u64 *data_version, int extent_lock);
 
+struct obd_client_handle *ll_lease_open(struct inode *inode, struct file *file,
+                                       fmode_t mode);
+int ll_lease_close(struct obd_client_handle *och, struct inode *inode,
+                  bool *lease_broken);
+
 /* llite/dcache.c */
 
 int ll_dops_init(struct dentry *de, int block, int init_sa);
@@ -850,18 +864,14 @@ void ll_delete_inode(struct inode *inode);
 int ll_iocontrol(struct inode *inode, struct file *file,
                  unsigned int cmd, unsigned long arg);
 int ll_flush_ctx(struct inode *inode);
-#ifdef HAVE_UMOUNTBEGIN_VFSMOUNT
-void ll_umount_begin(struct vfsmount *vfsmnt, int flags);
-#else
 void ll_umount_begin(struct super_block *sb);
-#endif
 int ll_remount_fs(struct super_block *sb, int *flags, char *data);
 #ifdef HAVE_SUPEROPS_USE_DENTRY
 int ll_show_options(struct seq_file *seq, struct dentry *dentry);
 #else
 int ll_show_options(struct seq_file *seq, struct vfsmount *vfs);
 #endif
-void ll_dirty_page_discard_warn(cfs_page_t *page, int ioret);
+void ll_dirty_page_discard_warn(struct page *page, int ioret);
 int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req,
                  struct super_block *, struct lookup_intent *);
 void lustre_dump_dentry(struct dentry *, int recur);
@@ -880,6 +890,7 @@ char *ll_get_fsname(struct super_block *sb, char *buf, int buflen);
 /* llite/llite_nfs.c */
 extern struct export_operations lustre_export_operations;
 __u32 get_uuid2int(const char *name, int len);
+void get_uuid2fsid(const char *name, int len, __kernel_fsid_t *fsid);
 struct inode *search_inode_for_lustre(struct super_block *sb,
                                      const struct lu_fid *fid);
 
@@ -944,20 +955,7 @@ struct vvp_io {
                         /**
                          *  locked page returned from vvp_io
                          */
-                        cfs_page_t            *ft_vmpage;
-#ifndef HAVE_VM_OP_FAULT
-                        struct vm_nopage_api {
-                                /**
-                                 * Virtual address at which fault occurred.
-                                 */
-                                unsigned long   ft_address;
-                                /**
-                                 * Fault type, as to be supplied to
-                                 * filemap_nopage().
-                                 */
-                                int             *ft_type;
-                        } nopage;
-#else
+                       struct page            *ft_vmpage;
                         struct vm_fault_api {
                                 /**
                                  * kernel fault info
@@ -968,7 +966,6 @@ struct vvp_io {
                                  */
                                 unsigned int    ft_flags;
                         } fault;
-#endif
                 } fault;
         } u;
         /**
@@ -995,9 +992,7 @@ struct vvp_io_args {
 
         union {
                 struct {
-#ifndef HAVE_FILE_WRITEV
                         struct kiocb      *via_iocb;
-#endif
                         struct iovec      *via_iov;
                         unsigned long      via_nrsegs;
                 } normal;
@@ -1103,7 +1098,7 @@ static inline void ll_invalidate_page(struct page *vmpage)
         if (mapping == NULL)
                 return;
 
-        ll_teardown_mmaps(mapping, offset, offset + CFS_PAGE_SIZE);
+       ll_teardown_mmaps(mapping, offset, offset + PAGE_CACHE_SIZE);
         truncate_complete_page(mapping, vmpage);
 }
 
@@ -1174,8 +1169,8 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size);
 int ll_removexattr(struct dentry *dentry, const char *name);
 
 /* llite/remote_perm.c */
-extern cfs_mem_cache_t *ll_remote_perm_cachep;
-extern cfs_mem_cache_t *ll_rmtperm_hash_cachep;
+extern struct kmem_cache *ll_remote_perm_cachep;
+extern struct kmem_cache *ll_rmtperm_hash_cachep;
 
 cfs_hlist_head_t *alloc_rmtperm_hash(void);
 void free_rmtperm_hash(cfs_hlist_head_t *hash);
@@ -1589,13 +1584,14 @@ static inline void __d_lustre_invalidate(struct dentry *dentry)
  * ll_md_blocking_ast), unhash this dentry, and let dcache to reclaim it later;
  * else dput() of the last refcount will unhash this dentry and kill it.
  */
-static inline void d_lustre_invalidate(struct dentry *dentry)
+static inline void d_lustre_invalidate(struct dentry *dentry, int nested)
 {
        CDEBUG(D_DENTRY, "invalidate dentry %.*s (%p) parent %p inode %p "
               "refc %d\n", dentry->d_name.len, dentry->d_name.name, dentry,
               dentry->d_parent, dentry->d_inode, d_refcount(dentry));
 
-       spin_lock(&dentry->d_lock);
+       spin_lock_nested(&dentry->d_lock,
+                        nested ? DENTRY_D_LOCK_NESTED : DENTRY_D_LOCK_NORMAL);
        __d_lustre_invalidate(dentry);
        if (d_refcount(dentry) == 0)
                __d_drop(dentry);
@@ -1635,5 +1631,6 @@ enum {
 
 int ll_layout_conf(struct inode *inode, const struct cl_object_conf *conf);
 int ll_layout_refresh(struct inode *inode, __u32 *gen);
+int ll_layout_restore(struct inode *inode);
 
 #endif /* LLITE_INTERNAL_H */