Whamcloud - gitweb
LU-5010 llite: disable readahead optimization
[fs/lustre-release.git] / lustre / llite / rw.c
index a1d82c3..355d07e 100644 (file)
@@ -80,12 +80,6 @@ void ll_cl_fini(struct ll_cl_context *lcc)
                 cl_page_put(env, page);
         }
 
-        if (io && lcc->lcc_created) {
-                cl_io_end(env, io);
-                cl_io_unlock(env, io);
-                cl_io_iter_fini(env, io);
-                cl_io_fini(env, io);
-        }
         cl_env_put(env, &lcc->lcc_refcheck);
 }
 
@@ -120,15 +114,8 @@ struct ll_cl_context *ll_cl_init(struct file *file, struct page *vmpage)
         cio = ccc_env_io(env);
         io = cio->cui_cl.cis_io;
         lcc->lcc_io = io;
-       if (io == NULL) {
-               struct inode *inode = file->f_dentry->d_inode;
-
-               CERROR("%s: " DFID " no active IO, please file a ticket.\n",
-                      ll_get_fsname(inode->i_sb, NULL, 0),
-                      PFID(ll_inode2fid(inode)));
-               libcfs_debug_dumpstack(NULL);
+       if (io == NULL)
                result = -EIO;
-       }
        if (result == 0 && vmpage != NULL) {
                 struct cl_page   *page;
 
@@ -289,7 +276,7 @@ void ll_ra_read_in(struct file *f, struct ll_ra_read *rar)
        ras->ras_consecutive_requests++;
        rar->lrr_reader = current;
 
-       cfs_list_add(&rar->lrr_linkage, &ras->ras_read_beads);
+       list_add(&rar->lrr_linkage, &ras->ras_read_beads);
        spin_unlock(&ras->ras_lock);
 }
 
@@ -300,7 +287,7 @@ void ll_ra_read_ex(struct file *f, struct ll_ra_read *rar)
        ras = ll_ras_get(f);
 
        spin_lock(&ras->ras_lock);
-       cfs_list_del_init(&rar->lrr_linkage);
+       list_del_init(&rar->lrr_linkage);
        spin_unlock(&ras->ras_lock);
 }
 
@@ -308,7 +295,7 @@ static struct ll_ra_read *ll_ra_read_get_locked(struct ll_readahead_state *ras)
 {
         struct ll_ra_read *scan;
 
-        cfs_list_for_each_entry(scan, &ras->ras_read_beads, lrr_linkage) {
+       list_for_each_entry(scan, &ras->ras_read_beads, lrr_linkage) {
                 if (scan->lrr_reader == current)
                         return scan;
         }
@@ -345,8 +332,11 @@ static int cl_read_ahead_page(const struct lu_env *env, struct cl_io *io,
        if (!cp->cpg_defer_uptodate && !PageUptodate(vmpage)) {
                CDEBUG(D_READA, "page index %lu, max_index: %lu\n",
                       ccc_index(cp), *max_index);
-               if (*max_index == 0 || ccc_index(cp) > *max_index)
-                       rc = cl_page_is_under_lock(env, io, page, max_index);
+               /* Disable the optimization on prefetching maximum readahead
+                * index because there is a race with lock cancellation. This
+                * optimization will be revived later.
+                * if (*max_index == 0 || ccc_index(cp) > *max_index) */
+               rc = cl_page_is_under_lock(env, io, page, max_index);
                if (rc == 0) {
                        cp->cpg_defer_uptodate = 1;
                        cp->cpg_ra_used = 0;
@@ -767,7 +757,7 @@ 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;
-       CFS_INIT_LIST_HEAD(&ras->ras_read_beads);
+       INIT_LIST_HEAD(&ras->ras_read_beads);
 }
 
 /*
@@ -1163,6 +1153,10 @@ int ll_writepages(struct address_space *mapping, struct writeback_control *wbc)
                 * evicted to avoid hitting LBUG when truncate_inode_pages()
                 * is called later on. */
                ignore_layout = 1;
+
+       if (cl_i2info(inode)->lli_clob == NULL)
+               RETURN(0);
+
        result = cl_sync_file_range(inode, start, end, mode, ignore_layout);
        if (result > 0) {
                wbc->nr_to_write -= result;