Whamcloud - gitweb
LU-2800 autoconf: remove LC_BI_HW_SEGMENTS test
[fs/lustre-release.git] / lustre / osd-ldiskfs / osd_io.c
index 529c8f9..a217bb3 100644 (file)
 /* ext_depth() */
 #include <ldiskfs/ldiskfs_extents.h>
 
-#ifndef HAVE_PAGE_CONSTANT
-#define mapping_cap_page_constant_write(mapping) 0
-#define SetPageConstant(page) do {} while (0)
-#define ClearPageConstant(page) do {} while (0)
-#endif
-
-#ifndef HAS_GENERIC_ERROR_REMOVE_PAGE
-int generic_error_remove_page(struct address_space *mapping, struct page *page)
-{
-        if (mapping == NULL)
-                return -EINVAL;
-
-        if (mapping != page->mapping)
-                return -EIO;
-        /*
-         * Only punch for normal data pages for now.
-         * Handling other types like directories would need more auditing.
-         */
-        if (!S_ISREG(mapping->host->i_mode))
-                return -EIO;
-
-        if (page_mapped(page)) {
-                unmap_mapping_range(mapping,
-                                    (loff_t)page->index << PAGE_CACHE_SHIFT,
-                                    PAGE_CACHE_SIZE, 0);
-        }
-        truncate_complete_page(mapping, page);
-        return 0;
-}
-#endif
-
 static int __osd_init_iobuf(struct osd_device *d, struct osd_iobuf *iobuf,
                            int rw, int line, int pages)
 {
@@ -102,15 +71,15 @@ static int __osd_init_iobuf(struct osd_device *d, struct osd_iobuf *iobuf,
                 iobuf->dr_init_at);
        LASSERT(pages <= PTLRPC_MAX_BRW_PAGES);
 
-        cfs_waitq_init(&iobuf->dr_wait);
-        cfs_atomic_set(&iobuf->dr_numreqs, 0);
-        iobuf->dr_npages = 0;
-        iobuf->dr_error = 0;
-        iobuf->dr_dev = d;
-        iobuf->dr_frags = 0;
-        iobuf->dr_elapsed = 0;
-        /* must be counted before, so assert */
-        iobuf->dr_rw = rw;
+       init_waitqueue_head(&iobuf->dr_wait);
+       cfs_atomic_set(&iobuf->dr_numreqs, 0);
+       iobuf->dr_npages = 0;
+       iobuf->dr_error = 0;
+       iobuf->dr_dev = d;
+       iobuf->dr_frags = 0;
+       iobuf->dr_elapsed = 0;
+       /* must be counted before, so assert */
+       iobuf->dr_rw = rw;
        iobuf->dr_init_at = line;
 
        blocks = pages * (PAGE_CACHE_SIZE >> osd_sb(d)->s_blocksize_bits);
@@ -215,18 +184,9 @@ static int dio_complete_routine(struct bio *bio, unsigned int done, int error)
                         if (likely(error == 0))
                                 SetPageUptodate(bvl->bv_page);
                         LASSERT(PageLocked(bvl->bv_page));
-                        ClearPageConstant(bvl->bv_page);
                 }
                 cfs_atomic_dec(&iobuf->dr_dev->od_r_in_flight);
         } else {
-                struct page *p = iobuf->dr_pages[0];
-                if (p->mapping) {
-                        if (mapping_cap_page_constant_write(p->mapping)) {
-                                bio_for_each_segment(bvl, bio, i) {
-                                        ClearPageConstant(bvl->bv_page);
-                                }
-                        }
-                }
                 cfs_atomic_dec(&iobuf->dr_dev->od_w_in_flight);
         }
 
@@ -246,7 +206,7 @@ static int dio_complete_routine(struct bio *bio, unsigned int done, int error)
                iobuf->dr_elapsed_valid = 1;
        }
        if (cfs_atomic_dec_and_test(&iobuf->dr_numreqs))
-               cfs_waitq_signal(&iobuf->dr_wait);
+               wake_up(&iobuf->dr_wait);
 
         /* Completed bios used to be chained off iobuf->dr_bios and freed in
          * filter_clear_dreq().  It was then possible to exhaust the biovec-256
@@ -357,15 +317,6 @@ static int osd_do_bio(struct osd_device *osd, struct inode *inode,
                                 sector_bits))
                                 nblocks++;
 
-                        /* I only set the page to be constant only if it
-                         * is mapped to a contiguous underlying disk block(s).
-                         * It will then make sure the corresponding device
-                         * cache of raid5 will be overwritten by this page.
-                         * - jay */
-                        if (iobuf->dr_rw && (nblocks == blocks_per_page) &&
-                            mapping_cap_page_constant_write(inode->i_mapping))
-                                SetPageConstant(page);
-
                         if (bio != NULL &&
                             can_be_merged(bio, sector) &&
                             bio_add_page(bio, page,
@@ -384,8 +335,7 @@ static int osd_do_bio(struct osd_device *osd, struct inode *inode,
                                        bio->bi_size >> 9, queue_max_sectors(q),
                                        bio_phys_segments(q, bio),
                                        queue_max_phys_segments(q),
-                                       bio_hw_segments(q, bio),
-                                       queue_max_hw_segments(q));
+                                      0, queue_max_hw_segments(q));
 
                                 record_start_io(iobuf, bio->bi_size);
                                 osd_submit_bio(iobuf->dr_rw, bio);
@@ -427,7 +377,7 @@ static int osd_do_bio(struct osd_device *osd, struct inode *inode,
          * parallel and wait for IO completion once transaction is stopped
          * see osd_trans_stop() for more details -bzzz */
         if (iobuf->dr_rw == 0) {
-                cfs_wait_event(iobuf->dr_wait,
+               wait_event(iobuf->dr_wait,
                                cfs_atomic_read(&iobuf->dr_numreqs) == 0);
         }
 
@@ -597,8 +547,8 @@ static int osd_write_prep(const struct lu_env *env, struct dt_object *dt,
         if (isize > osd->od_readcache_max_filesize)
                 cache = 0;
 
-        cfs_gettimeofday(&start);
-        for (i = 0; i < npages; i++) {
+       do_gettimeofday(&start);
+       for (i = 0; i < npages; i++) {
 
                 if (cache == 0)
                         generic_error_remove_page(inode->i_mapping,
@@ -628,11 +578,11 @@ static int osd_write_prep(const struct lu_env *env, struct dt_object *dt,
                         if (off)
                                memset(p + off, 0, PAGE_CACHE_SIZE - off);
                         kunmap(lnb[i].page);
-                }
-        }
-        cfs_gettimeofday(&end);
-        timediff = cfs_timeval_sub(&end, &start, NULL);
-        lprocfs_counter_add(osd->od_stats, LPROC_OSD_GET_PAGE, timediff);
+               }
+       }
+       do_gettimeofday(&end);
+       timediff = cfs_timeval_sub(&end, &start, NULL);
+       lprocfs_counter_add(osd->od_stats, LPROC_OSD_GET_PAGE, timediff);
 
         if (iobuf->dr_npages) {
                rc = osd->od_fsops->fs_map_inode_pages(inode, iobuf->dr_pages,
@@ -895,8 +845,8 @@ static int osd_read_prep(const struct lu_env *env, struct dt_object *dt,
        if (i_size_read(inode) > osd->od_readcache_max_filesize)
                cache = 0;
 
-        cfs_gettimeofday(&start);
-        for (i = 0; i < npages; i++) {
+       do_gettimeofday(&start);
+       for (i = 0; i < npages; i++) {
 
                if (i_size_read(inode) <= lnb[i].lnb_file_offset)
                         /* If there's no more data, abort early.
@@ -919,12 +869,12 @@ static int osd_read_prep(const struct lu_env *env, struct dt_object *dt,
                                             LPROC_OSD_CACHE_MISS, 1);
                         osd_iobuf_add_page(iobuf, lnb[i].page);
                 }
-                if (cache == 0)
-                        generic_error_remove_page(inode->i_mapping,lnb[i].page);
-        }
-        cfs_gettimeofday(&end);
-        timediff = cfs_timeval_sub(&end, &start, NULL);
-        lprocfs_counter_add(osd->od_stats, LPROC_OSD_GET_PAGE, timediff);
+               if (cache == 0)
+                       generic_error_remove_page(inode->i_mapping,lnb[i].page);
+       }
+       do_gettimeofday(&end);
+       timediff = cfs_timeval_sub(&end, &start, NULL);
+       lprocfs_counter_add(osd->od_stats, LPROC_OSD_GET_PAGE, timediff);
 
         if (iobuf->dr_npages) {
                rc = osd->od_fsops->fs_map_inode_pages(inode, iobuf->dr_pages,