Whamcloud - gitweb
b=4982
authorgreen <green>
Fri, 8 Apr 2005 07:21:54 +0000 (07:21 +0000)
committergreen <green>
Fri, 8 Apr 2005 07:21:54 +0000 (07:21 +0000)
r=adilger
Flush pagecache on ost before doing directio writes, or else we might end up
with stale data being written to disk later.

lustre/obdfilter/filter_io_26.c

index e477545..ba68a36 100644 (file)
@@ -346,25 +346,22 @@ int filter_do_bio(struct obd_device *obd, struct inode *inode,
         RETURN(rc);
 }
 
-static void filter_clear_page_cache(struct inode *inode, struct bio *iobuf)
+static void filter_clear_page_cache(struct inode *inode, struct dio_request *iobuf)
 {
-#if 0
         struct page *page;
         int i;
 
-        for (i = 0; i < iobuf->nr_pages ; i++) {
+        for (i = 0; i < iobuf->dr_npages ; i++) {
                 page = find_lock_page(inode->i_mapping,
-                                      iobuf->maplist[i]->index);
+                                      iobuf->dr_pages[i]->index);
                 if (page == NULL)
                         continue;
-                if (page->mapping != NULL) {
-                        block_invalidatepage(page, 0);
-                        truncate_complete_page(page);
-                }
+                if (page->mapping != NULL)
+                        ll_truncate_complete_page(page);
+
                 unlock_page(page);
                 page_cache_release(page);
         }
-#endif
 }
 
 static int filter_quota_enforcement(struct obd_device *obd,
@@ -522,7 +519,7 @@ remap:
 
         /* be careful to call this after fsync_inode_data_buffers has waited
          * for IO to complete before we evict it from the cache */
-        filter_clear_page_cache(inode, iobuf);
+        filter_clear_page_cache(inode, dreq);
 
         RETURN(filter_do_bio(obd, inode, dreq, rw));
 }