From dfe2d20b618e2e08336d3e5f031a9997433d67bf Mon Sep 17 00:00:00 2001 From: green Date: Fri, 8 Apr 2005 07:21:54 +0000 Subject: [PATCH] b=4982 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 | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lustre/obdfilter/filter_io_26.c b/lustre/obdfilter/filter_io_26.c index e477545..ba68a36 100644 --- a/lustre/obdfilter/filter_io_26.c +++ b/lustre/obdfilter/filter_io_26.c @@ -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)); } -- 1.8.3.1