diff options
Diffstat (limited to 'fs/mpage.c')
| -rw-r--r-- | fs/mpage.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/fs/mpage.c b/fs/mpage.c index 37bb77c1302c..c991faec70b9 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -468,6 +468,16 @@ static void clean_buffers(struct page *page, unsigned first_unmapped)  		try_to_free_buffers(page);  } +/* + * For situations where we want to clean all buffers attached to a page. + * We don't need to calculate how many buffers are attached to the page, + * we just need to specify a number larger than the maximum number of buffers. + */ +void clean_page_buffers(struct page *page) +{ +	clean_buffers(page, ~0U); +} +  static int __mpage_writepage(struct page *page, struct writeback_control *wbc,  		      void *data)  { @@ -605,10 +615,8 @@ alloc_new:  	if (bio == NULL) {  		if (first_unmapped == blocks_per_page) {  			if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9), -								page, wbc)) { -				clean_buffers(page, first_unmapped); +								page, wbc))  				goto out; -			}  		}  		bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9),  				BIO_MAX_PAGES, GFP_NOFS|__GFP_HIGH);  | 
