Whamcloud - gitweb
LU-5971 llite: remove struct ll_ra_read 47/13347/2
authorJohn L. Hammond <john.hammond@intel.com>
Mon, 12 Jan 2015 14:26:17 +0000 (08:26 -0600)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 16 Jan 2015 03:27:36 +0000 (03:27 +0000)
Remove the unused function ll_ra_read_get(). This makes the struct
ll_ra_read members lrr_reader and lrr_linkage and the struct
ll_readahead_state member ras_read_beads unnecessary so remove them.
In struct vvp_io replace the struct ll_ra_read cui_bead member with
cui_ra_start and cui_ra_count.

Signed-off-by: John L. Hammond <john.hammond@intel.com>
Change-Id: Id54ad063d917fb9e13a6708a87c940450c4af506
Reviewed-on: http://review.whamcloud.com/13347
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bobi Jam <bobijam@hotmail.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/llite/llite_internal.h
lustre/llite/rw.c
lustre/llite/vvp_io.c

index f9e0086..4ebbee7 100644 (file)
@@ -567,13 +567,6 @@ struct ll_sb_info {
 
 #define LL_DEFAULT_MAX_RW_CHUNK      (32 * 1024 * 1024)
 
 
 #define LL_DEFAULT_MAX_RW_CHUNK      (32 * 1024 * 1024)
 
-struct ll_ra_read {
-        pgoff_t             lrr_start;
-        pgoff_t             lrr_count;
-        struct task_struct *lrr_reader;
-       struct list_head          lrr_linkage;
-};
-
 /*
  * per file-descriptor read-ahead data.
  */
 /*
  * per file-descriptor read-ahead data.
  */
@@ -632,12 +625,6 @@ struct ll_readahead_state {
          */
         unsigned long   ras_request_index;
         /*
          */
         unsigned long   ras_request_index;
         /*
-         * list of struct ll_ra_read's one per read(2) call current in
-         * progress against this file descriptor. Used by read-ahead code,
-         * protected by ->ras_lock.
-         */
-       struct list_head      ras_read_beads;
-        /*
          * The following 3 items are used for detecting the stride I/O
          * mode.
          * In stride I/O mode,
          * The following 3 items are used for detecting the stride I/O
          * mode.
          * In stride I/O mode,
@@ -706,9 +693,7 @@ static inline int ll_need_32bit_api(struct ll_sb_info *sbi)
 #endif
 }
 
 #endif
 }
 
-void ll_ra_read_in(struct file *f, struct ll_ra_read *rar);
-void ll_ra_read_ex(struct file *f, struct ll_ra_read *rar);
-struct ll_ra_read *ll_ra_read_get(struct file *f);
+void ll_ras_enter(struct file *f);
 
 /* llite/lproc_llite.c */
 #ifdef LPROCFS
 
 /* llite/lproc_llite.c */
 #ifdef LPROCFS
@@ -1034,14 +1019,12 @@ struct vvp_io {
                         } fault;
                 } fault;
         } u;
                         } fault;
                 } fault;
         } u;
-        /**
-         * Read-ahead state used by read and page-fault IO contexts.
-         */
-        struct ll_ra_read    cui_bead;
-        /**
-         * Set when cui_bead has been initialized.
-         */
-        int                  cui_ra_window_set;
+
+       /* Readahead state. */
+       pgoff_t cui_ra_start;
+       pgoff_t cui_ra_count;
+       /* Set when cui_ra_{start,count} have been initialized. */
+       bool    cui_ra_valid;
 };
 
 /**
 };
 
 /**
index 4e032fb..f51793a 100644 (file)
@@ -179,65 +179,18 @@ static int index_in_window(unsigned long index, unsigned long point,
         return start <= index && index <= end;
 }
 
         return start <= index && index <= end;
 }
 
-static struct ll_readahead_state *ll_ras_get(struct file *f)
+void ll_ras_enter(struct file *f)
 {
 {
-        struct ll_file_data       *fd;
-
-        fd = LUSTRE_FPRIVATE(f);
-        return &fd->fd_ras;
-}
-
-void ll_ra_read_in(struct file *f, struct ll_ra_read *rar)
-{
-       struct ll_readahead_state *ras;
-
-       ras = ll_ras_get(f);
+       struct ll_file_data *fd = LUSTRE_FPRIVATE(f);
+       struct ll_readahead_state *ras = &fd->fd_ras;
 
        spin_lock(&ras->ras_lock);
        ras->ras_requests++;
        ras->ras_request_index = 0;
        ras->ras_consecutive_requests++;
 
        spin_lock(&ras->ras_lock);
        ras->ras_requests++;
        ras->ras_request_index = 0;
        ras->ras_consecutive_requests++;
-       rar->lrr_reader = current;
-
-       list_add(&rar->lrr_linkage, &ras->ras_read_beads);
        spin_unlock(&ras->ras_lock);
 }
 
        spin_unlock(&ras->ras_lock);
 }
 
-void ll_ra_read_ex(struct file *f, struct ll_ra_read *rar)
-{
-       struct ll_readahead_state *ras;
-
-       ras = ll_ras_get(f);
-
-       spin_lock(&ras->ras_lock);
-       list_del_init(&rar->lrr_linkage);
-       spin_unlock(&ras->ras_lock);
-}
-
-static struct ll_ra_read *ll_ra_read_get_locked(struct ll_readahead_state *ras)
-{
-        struct ll_ra_read *scan;
-
-       list_for_each_entry(scan, &ras->ras_read_beads, lrr_linkage) {
-                if (scan->lrr_reader == current)
-                        return scan;
-        }
-        return NULL;
-}
-
-struct ll_ra_read *ll_ra_read_get(struct file *f)
-{
-       struct ll_readahead_state *ras;
-       struct ll_ra_read         *bead;
-
-       ras = ll_ras_get(f);
-
-       spin_lock(&ras->ras_lock);
-       bead = ll_ra_read_get_locked(ras);
-       spin_unlock(&ras->ras_lock);
-       return bead;
-}
-
 static int cl_read_ahead_page(const struct lu_env *env, struct cl_io *io,
                              struct cl_page_list *queue, struct cl_page *page,
                              struct cl_object *clob, pgoff_t *max_index)
 static int cl_read_ahead_page(const struct lu_env *env, struct cl_io *io,
                              struct cl_page_list *queue, struct cl_page *page,
                              struct cl_object *clob, pgoff_t *max_index)
@@ -503,7 +456,6 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
        unsigned long start = 0, end = 0, reserved;
        unsigned long ra_end, len, mlen = 0;
        struct inode *inode;
        unsigned long start = 0, end = 0, reserved;
        unsigned long ra_end, len, mlen = 0;
        struct inode *inode;
-       struct ll_ra_read *bead;
        struct ra_io_arg *ria = &vti->vti_ria;
        struct cl_object *clob;
        int ret = 0;
        struct ra_io_arg *ria = &vti->vti_ria;
        struct cl_object *clob;
        int ret = 0;
@@ -528,17 +480,15 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
        }
 
        spin_lock(&ras->ras_lock);
        }
 
        spin_lock(&ras->ras_lock);
-        if (vio->cui_ra_window_set)
-                bead = &vio->cui_bead;
-        else
-                bead = NULL;
 
 
-        /* Enlarge the RA window to encompass the full read */
-        if (bead != NULL && ras->ras_window_start + ras->ras_window_len <
-            bead->lrr_start + bead->lrr_count) {
-                ras->ras_window_len = bead->lrr_start + bead->lrr_count -
-                                      ras->ras_window_start;
-        }
+       /* Enlarge the RA window to encompass the full read */
+       if (vio->cui_ra_valid &&
+           ras->ras_window_start + ras->ras_window_len <
+           vio->cui_ra_start + vio->cui_ra_count) {
+               ras->ras_window_len = vio->cui_ra_start + vio->cui_ra_count -
+                       ras->ras_window_start;
+       }
+
        /* Reserve a part of the read-ahead window that we'll be issuing */
        if (ras->ras_window_len > 0) {
                /*
        /* Reserve a part of the read-ahead window that we'll be issuing */
        if (ras->ras_window_len > 0) {
                /*
@@ -605,15 +555,15 @@ int ll_readahead(const struct lu_env *env, struct cl_io *io,
        CDEBUG(D_READA, DFID": ria: %lu/%lu, bead: %lu/%lu, hit: %d\n",
               PFID(lu_object_fid(&clob->co_lu)),
               ria->ria_start, ria->ria_end,
        CDEBUG(D_READA, DFID": ria: %lu/%lu, bead: %lu/%lu, hit: %d\n",
               PFID(lu_object_fid(&clob->co_lu)),
               ria->ria_start, ria->ria_end,
-              bead == NULL ? 0 : bead->lrr_start,
-              bead == NULL ? 0 : bead->lrr_count,
+              vio->cui_ra_valid ? vio->cui_ra_start : 0,
+              vio->cui_ra_valid ? vio->cui_ra_count : 0,
               hit);
 
        /* at least to extend the readahead window to cover current read */
               hit);
 
        /* at least to extend the readahead window to cover current read */
-       if (!hit && bead != NULL &&
-           bead->lrr_start + bead->lrr_count > ria->ria_start) {
+       if (!hit && vio->cui_ra_valid &&
+           vio->cui_ra_start + vio->cui_ra_count > ria->ria_start) {
                /* to the end of current read window. */
                /* to the end of current read window. */
-               mlen = bead->lrr_start + bead->lrr_count - ria->ria_start;
+               mlen = vio->cui_ra_start + vio->cui_ra_count - ria->ria_start;
                /* trim to RPC boundary */
                start = ria->ria_start & (PTLRPC_MAX_BRW_PAGES - 1);
                mlen = min(mlen, PTLRPC_MAX_BRW_PAGES - start);
                /* trim to RPC boundary */
                start = ria->ria_start & (PTLRPC_MAX_BRW_PAGES - 1);
                mlen = min(mlen, PTLRPC_MAX_BRW_PAGES - start);
@@ -693,7 +643,6 @@ void ll_readahead_init(struct inode *inode, struct ll_readahead_state *ras)
        spin_lock_init(&ras->ras_lock);
        ras_reset(inode, ras, 0);
        ras->ras_requests = 0;
        spin_lock_init(&ras->ras_lock);
        ras_reset(inode, ras, 0);
        ras->ras_requests = 0;
-       INIT_LIST_HEAD(&ras->ras_read_beads);
 }
 
 /*
 }
 
 /*
index 88ccaa5..dc4e294 100644 (file)
@@ -505,7 +505,6 @@ static int vvp_io_read_start(const struct lu_env *env,
         struct cl_io      *io    = ios->cis_io;
         struct cl_object  *obj   = io->ci_obj;
        struct inode      *inode = vvp_object_inode(obj);
         struct cl_io      *io    = ios->cis_io;
         struct cl_object  *obj   = io->ci_obj;
        struct inode      *inode = vvp_object_inode(obj);
-        struct ll_ra_read *bead  = &vio->cui_bead;
         struct file       *file  = cio->cui_fd->fd_file;
 
         int     result;
         struct file       *file  = cio->cui_fd->fd_file;
 
         int     result;
@@ -534,13 +533,13 @@ static int vvp_io_read_start(const struct lu_env *env,
         /* turn off the kernel's read-ahead */
         cio->cui_fd->fd_file->f_ra.ra_pages = 0;
 
         /* turn off the kernel's read-ahead */
         cio->cui_fd->fd_file->f_ra.ra_pages = 0;
 
-        /* initialize read-ahead window once per syscall */
-        if (!vio->cui_ra_window_set) {
-                vio->cui_ra_window_set = 1;
-                bead->lrr_start = cl_index(obj, pos);
-               bead->lrr_count = cl_index(obj, tot + PAGE_CACHE_SIZE - 1);
-                ll_ra_read_in(file, bead);
-        }
+       /* initialize read-ahead window once per syscall */
+       if (!vio->cui_ra_valid) {
+               vio->cui_ra_valid = true;
+               vio->cui_ra_start = cl_index(obj, pos);
+               vio->cui_ra_count = cl_index(obj, tot + PAGE_CACHE_SIZE - 1);
+               ll_ras_enter(file);
+       }
 
         /* BUG: 5972 */
         file_accessed(file);
 
         /* BUG: 5972 */
         file_accessed(file);
@@ -578,17 +577,6 @@ out:
        return result;
 }
 
        return result;
 }
 
-static void vvp_io_read_fini(const struct lu_env *env, const struct cl_io_slice *ios)
-{
-       struct vvp_io *vio = cl2vvp_io(env, ios);
-       struct ccc_io *cio = cl2ccc_io(env, ios);
-
-       if (vio->cui_ra_window_set)
-               ll_ra_read_ex(cio->cui_fd->fd_file, &vio->cui_bead);
-
-       vvp_io_fini(env, ios);
-}
-
 static int vvp_io_commit_sync(const struct lu_env *env, struct cl_io *io,
                              struct cl_page_list *plist, int from, int to)
 {
 static int vvp_io_commit_sync(const struct lu_env *env, struct cl_io *io,
                              struct cl_page_list *plist, int from, int to)
 {
@@ -1111,13 +1099,13 @@ static int vvp_io_read_page(const struct lu_env *env,
 }
 
 static const struct cl_io_operations vvp_io_ops = {
 }
 
 static const struct cl_io_operations vvp_io_ops = {
-        .op = {
-                [CIT_READ] = {
-                        .cio_fini      = vvp_io_read_fini,
-                        .cio_lock      = vvp_io_read_lock,
-                        .cio_start     = vvp_io_read_start,
-                        .cio_advance   = ccc_io_advance
-                },
+       .op = {
+               [CIT_READ] = {
+                       .cio_fini       = vvp_io_fini,
+                       .cio_lock       = vvp_io_read_lock,
+                       .cio_start      = vvp_io_read_start,
+                       .cio_advance    = ccc_io_advance,
+               },
                 [CIT_WRITE] = {
                        .cio_fini      = vvp_io_fini,
                        .cio_iter_init = vvp_io_write_iter_init,
                 [CIT_WRITE] = {
                        .cio_fini      = vvp_io_fini,
                        .cio_iter_init = vvp_io_write_iter_init,
@@ -1170,7 +1158,7 @@ int vvp_io_init(const struct lu_env *env, struct cl_object *obj,
 
         CL_IO_SLICE_CLEAN(cio, cui_cl);
         cl_io_slice_add(io, &cio->cui_cl, obj, &vvp_io_ops);
 
         CL_IO_SLICE_CLEAN(cio, cui_cl);
         cl_io_slice_add(io, &cio->cui_cl, obj, &vvp_io_ops);
-        vio->cui_ra_window_set = 0;
+       vio->cui_ra_valid = false;
        result = 0;
        if (io->ci_type == CIT_READ || io->ci_type == CIT_WRITE) {
                size_t count;
        result = 0;
        if (io->ci_type == CIT_READ || io->ci_type == CIT_WRITE) {
                size_t count;