Whamcloud - gitweb
LU-5396 llite: make some functions static
[fs/lustre-release.git] / lustre / llite / llite_internal.h
index 204c42e..25b92b8 100644 (file)
@@ -182,49 +182,41 @@ struct ll_inode_info {
                /* for directory */
                struct {
                        /* serialize normal readdir and statahead-readdir. */
-                       struct mutex                    d_readdir_mutex;
+                       struct mutex                    lli_readdir_mutex;
 
                        /* metadata statahead */
                        /* since parent-child threads can share the same @file
                         * struct, "opendir_key" is the token when dir close for
                         * case of parent exit before child -- it is me should
                         * cleanup the dir readahead. */
-                       void                           *d_opendir_key;
-                       struct ll_statahead_info       *d_sai;
+                       void                           *lli_opendir_key;
+                       struct ll_statahead_info       *lli_sai;
                        /* protect statahead stuff. */
-                       spinlock_t                      d_sa_lock;
+                       spinlock_t                      lli_sa_lock;
                        /* "opendir_pid" is the token when lookup/revalid
                         * -- I am the owner of dir statahead. */
-                       pid_t                           d_opendir_pid;
+                       pid_t                           lli_opendir_pid;
                        /* stat will try to access statahead entries or start
                         * statahead if this flag is set, and this flag will be
                         * set upon dir open, and cleared when dir is closed,
                         * statahead hit ratio is too low, or start statahead
                         * thread failed. */
-                       unsigned int                    d_sa_enabled:1;
+                       unsigned int                    lli_sa_enabled:1;
+                       /* generation for statahead */
+                       unsigned int                    lli_sa_generation;
                        /* directory stripe information */
-                       struct lmv_stripe_md            *d_lsm_md;
+                       struct lmv_stripe_md            *lli_lsm_md;
                        /* striped directory size */
-                       loff_t                          d_stripe_size;
+                       loff_t                          lli_stripe_dir_size;
                        /* striped directory nlink */
-                       __u64                           d_stripe_nlink;
-               } d;
-
-#define lli_readdir_mutex       u.d.d_readdir_mutex
-#define lli_opendir_key         u.d.d_opendir_key
-#define lli_sai                 u.d.d_sai
-#define lli_sa_lock             u.d.d_sa_lock
-#define lli_sa_enabled         u.d.d_sa_enabled
-#define lli_opendir_pid         u.d.d_opendir_pid
-#define lli_lsm_md             u.d.d_lsm_md
-#define lli_stripe_dir_size    u.d.d_stripe_size
-#define lli_stripe_dir_nlink   u.d.d_stripe_nlink
+                       __u64                           lli_stripe_dir_nlink;
+               };
 
                /* for non-directory */
                struct {
-                       struct mutex                    f_size_mutex;
-                       char                            *f_symlink_name;
-                       __u64                           f_maxbytes;
+                       struct mutex                    lli_size_mutex;
+                       char                           *lli_symlink_name;
+                       __u64                           lli_maxbytes;
                        /*
                         * struct rw_semaphore {
                         *    signed long       count;     // align d.d_def_acl
@@ -232,16 +224,16 @@ struct ll_inode_info {
                         *    struct list_head wait_list;
                         * }
                         */
-                       struct rw_semaphore             f_trunc_sem;
-                       struct range_lock_tree          f_write_tree;
+                       struct rw_semaphore             lli_trunc_sem;
+                       struct range_lock_tree          lli_write_tree;
 
-                       struct rw_semaphore             f_glimpse_sem;
-                       cfs_time_t                      f_glimpse_time;
-                       struct list_head                        f_agl_list;
-                       __u64                           f_agl_index;
+                       struct rw_semaphore             lli_glimpse_sem;
+                       cfs_time_t                      lli_glimpse_time;
+                       struct list_head                lli_agl_list;
+                       __u64                           lli_agl_index;
 
                        /* for writepage() only to communicate to fsync */
-                       int                             f_async_rc;
+                       int                             lli_async_rc;
 
                        /*
                         * whenever a process try to read/write the file, the
@@ -251,22 +243,9 @@ struct ll_inode_info {
                         * so the read/write statistics for jobid will not be
                         * accurate if the file is shared by different jobs.
                         */
-                       char                     f_jobid[LUSTRE_JOBID_SIZE];
-               } f;
-
-#define lli_size_mutex          u.f.f_size_mutex
-#define lli_symlink_name        u.f.f_symlink_name
-#define lli_maxbytes            u.f.f_maxbytes
-#define lli_trunc_sem           u.f.f_trunc_sem
-#define lli_write_tree          u.f.f_write_tree
-#define lli_glimpse_sem        u.f.f_glimpse_sem
-#define lli_glimpse_time       u.f.f_glimpse_time
-#define lli_agl_list           u.f.f_agl_list
-#define lli_agl_index          u.f.f_agl_index
-#define lli_async_rc           u.f.f_async_rc
-#define lli_jobid              u.f.f_jobid
-
-       } u;
+                       char                    lli_jobid[LUSTRE_JOBID_SIZE];
+               };
+       };
 
         /* XXX: For following frequent used members, although they maybe special
          *      used for non-directory object, it is some time-wasting to check
@@ -447,7 +426,7 @@ enum stats_track_type {
        "nolck",        \
        "checksum",     \
        "flock",        \
-       "xattr",        \
+       "user_xattr",   \
        "acl",          \
        "???",          \
        "rmt_client",   \
@@ -463,7 +442,7 @@ enum stats_track_type {
        "verbose",      \
        "layout",       \
        "user_fid2path",\
-       "xattr",        \
+       "xattr_cache",  \
        "norootsquash", \
 }
 
@@ -812,8 +791,6 @@ void ll_release_page(struct inode *inode, struct page *page, bool remove);
 /* llite/namei.c */
 extern const struct inode_operations ll_special_inode_operations;
 
-int ll_objects_destroy(struct ptlrpc_request *request,
-                       struct inode *dir);
 struct inode *ll_iget(struct super_block *sb, ino_t hash,
                       struct lustre_md *lic);
 int ll_test_inode_by_fid(struct inode *inode, void *opaque);
@@ -959,9 +936,9 @@ int ll_get_max_cookiesize(struct ll_sb_info *sbi, int *max_cookiesize);
 int ll_get_default_cookiesize(struct ll_sb_info *sbi, int *default_cookiesize);
 int ll_process_config(struct lustre_cfg *lcfg);
 struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data,
-                                      struct inode *i1, struct inode *i2,
-                                      const char *name, int namelen,
-                                      int mode, __u32 opc, void *data);
+                                     struct inode *i1, struct inode *i2,
+                                     const char *name, size_t namelen,
+                                     __u32 mode, __u32 opc, void *data);
 void ll_finish_md_op_data(struct md_op_data *op_data);
 int ll_get_obd_name(struct inode *inode, unsigned int cmd, unsigned long arg);
 char *ll_get_fsname(struct super_block *sb, char *buf, int buflen);
@@ -1104,9 +1081,10 @@ struct vvp_thread_info {
         struct ll_cl_context vti_io_ctx;
 };
 
+extern struct lu_context_key vvp_key;
+
 static inline struct vvp_thread_info *vvp_env_info(const struct lu_env *env)
 {
-        extern struct lu_context_key vvp_key;
         struct vvp_thread_info      *info;
 
         info = lu_context_key_get(&env->le_ctx, &vvp_key);
@@ -1128,9 +1106,10 @@ struct vvp_session {
         struct vvp_io         vs_ios;
 };
 
+extern struct lu_context_key vvp_session_key;
+
 static inline struct vvp_session *vvp_env_session(const struct lu_env *env)
 {
-        extern struct lu_context_key vvp_session_key;
         struct vvp_session *ses;
 
         ses = lu_context_key_get(env->le_ses, &vvp_session_key);
@@ -1310,31 +1289,31 @@ void et_fini(struct eacl_table *et);
 
 /* per inode struct, for dir only */
 struct ll_statahead_info {
-       struct inode            *sai_inode;
-       atomic_t                sai_refcount;   /* when access this struct, hold
+       struct dentry          *sai_dentry;
+       atomic_t                sai_refcount;   /* when access this struct, hold
                                                 * refcount */
-       unsigned int            sai_generation; /* generation for statahead */
-       unsigned int            sai_max;        /* max ahead of lookup */
-       __u64                   sai_sent;       /* stat requests sent count */
-       __u64                   sai_replied;    /* stat requests which received
+       unsigned int            sai_max;        /* max ahead of lookup */
+       __u64                   sai_sent;       /* stat requests sent count */
+       __u64                   sai_replied;    /* stat requests which received
                                                 * reply */
-       __u64                   sai_index;      /* index of statahead entry */
-       __u64                   sai_index_wait; /* index of entry which is the
+       __u64                   sai_index;      /* index of statahead entry */
+       __u64                   sai_index_wait; /* index of entry which is the
                                                 * caller is waiting for */
-       __u64                   sai_hit;        /* hit count */
-       __u64                   sai_miss;       /* miss count:
-                                                * for "ls -al" case, it
-                                                * includes hidden dentry miss;
+       __u64                   sai_hit;        /* hit count */
+       __u64                   sai_miss;       /* miss count:
+                                                * for "ls -al" case, includes
+                                                * hidden dentry miss;
                                                 * for "ls -l" case, it does not
                                                 * include hidden dentry miss.
                                                 * "sai_miss_hidden" is used for
                                                 * the later case.
                                                 */
-        unsigned int            sai_consecutive_miss; /* consecutive miss */
-        unsigned int            sai_miss_hidden;/* "ls -al", but first dentry
-                                                 * is not a hidden one */
-        unsigned int            sai_skip_hidden;/* skipped hidden dentry count */
-       unsigned int            sai_ls_all:1,   /* "ls -al", do stat-ahead for
+       unsigned int            sai_consecutive_miss; /* consecutive miss */
+       unsigned int            sai_miss_hidden;/* "ls -al", but first dentry
+                                                * is not a hidden one */
+       unsigned int            sai_skip_hidden;/* skipped hidden dentry count
+                                                */
+       unsigned int            sai_ls_all:1,   /* "ls -al", do stat-ahead for
                                                 * hidden entries */
                                sai_agl_valid:1,/* AGL is valid for the dir */
                                sai_in_readpage:1;/* statahead is in readdir()*/
@@ -1351,8 +1330,7 @@ struct ll_statahead_info {
        atomic_t                sai_cache_count; /* entry count in cache */
 };
 
-int do_statahead_enter(struct inode *dir, struct dentry **dentry,
-                       int only_unplug);
+int ll_statahead(struct inode *dir, struct dentry **dentry, bool unplug);
 void ll_authorize_statahead(struct inode *dir, void *key);
 void ll_deauthorize_statahead(struct inode *dir, void *key);
 
@@ -1368,24 +1346,10 @@ static inline int ll_glimpse_size(struct inode *inode)
        return rc;
 }
 
-static inline void
-ll_statahead_mark(struct inode *dir, struct dentry *dentry)
-{
-       struct ll_inode_info     *lli = ll_i2info(dir);
-       struct ll_statahead_info *sai = lli->lli_sai;
-       struct ll_dentry_data    *ldd = ll_d2d(dentry);
-
-       /* not the same process, don't mark */
-       if (lli->lli_opendir_pid != current_pid())
-               return;
-
-       LASSERT(ldd != NULL);
-       if (sai != NULL)
-               ldd->lld_sa_generation = sai->sai_generation;
-}
-
+/* dentry may statahead when statahead is enabled and current process has opened
+ * parent directory, and this dentry hasn't accessed statahead cache before */
 static inline bool
-dentry_need_statahead(struct inode *dir, struct dentry *dentry)
+dentry_may_statahead(struct inode *dir, struct dentry *dentry)
 {
        struct ll_inode_info  *lli;
        struct ll_dentry_data *ldd;
@@ -1406,38 +1370,27 @@ dentry_need_statahead(struct inode *dir, struct dentry *dentry)
        if (lli->lli_opendir_pid != current_pid())
                return false;
 
-       ldd = ll_d2d(dentry);
        /*
-        * When stats a dentry, the system trigger more than once "revalidate"
-        * or "lookup", for "getattr", for "getxattr", and maybe for others.
-        * Under patchless client mode, the operation intent is not accurate,
-        * which maybe misguide the statahead thread. For example:
-        * The "revalidate" call for "getattr" and "getxattr" of a dentry maybe
-        * have the same operation intent -- "IT_GETATTR".
-        * In fact, one dentry should has only one chance to interact with the
-        * statahead thread, otherwise the statahead windows will be confused.
+        * When stating a dentry, kernel may trigger 'revalidate' or 'lookup'
+        * multiple times, eg. for 'getattr', 'getxattr' and etc.
+        * For patchless client, lookup intent is not accurate, which may
+        * misguide statahead. For example:
+        * The 'revalidate' call for 'getattr' and 'getxattr' of a dentry will
+        * have the same intent -- IT_GETATTR, while one dentry should access
+        * statahead cache once, otherwise statahead windows is messed up.
         * The solution is as following:
-        * Assign "lld_sa_generation" with "sai_generation" when a dentry
-        * "IT_GETATTR" for the first time, and the subsequent "IT_GETATTR"
-        * will bypass interacting with statahead thread for checking:
-        * "lld_sa_generation == lli_sai->sai_generation"
+        * Assign 'lld_sa_generation' with 'lli_sa_generation' when a dentry
+        * IT_GETATTR for the first time, and subsequent IT_GETATTR will
+        * bypass interacting with statahead cache by checking
+        * 'lld_sa_generation == lli->lli_sa_generation'.
         */
-       if (ldd && lli->lli_sai &&
-           ldd->lld_sa_generation == lli->lli_sai->sai_generation)
+       ldd = ll_d2d(dentry);
+       if (ldd != NULL && ldd->lld_sa_generation == lli->lli_sa_generation)
                return false;
 
        return true;
 }
 
-static inline int
-ll_statahead_enter(struct inode *dir, struct dentry **dentryp, int only_unplug)
-{
-       if (!dentry_need_statahead(dir, *dentryp))
-               return -EAGAIN;
-
-       return do_statahead_enter(dir, dentryp, only_unplug);
-}
-
 /* llite ioctl register support rountine */
 enum llioc_iter {
         LLIOC_CONT = 0,