|
@@ -1605,38 +1605,6 @@ void create_empty_buffers(struct page *page,
|
|
|
}
|
|
|
EXPORT_SYMBOL(create_empty_buffers);
|
|
|
|
|
|
-/*
|
|
|
- * We are taking a block for data and we don't want any output from any
|
|
|
- * buffer-cache aliases starting from return from that function and
|
|
|
- * until the moment when something will explicitly mark the buffer
|
|
|
- * dirty (hopefully that will not happen until we will free that block ;-)
|
|
|
- * We don't even need to mark it not-uptodate - nobody can expect
|
|
|
- * anything from a newly allocated buffer anyway. We used to used
|
|
|
- * unmap_buffer() for such invalidation, but that was wrong. We definitely
|
|
|
- * don't want to mark the alias unmapped, for example - it would confuse
|
|
|
- * anyone who might pick it with bread() afterwards...
|
|
|
- *
|
|
|
- * Also.. Note that bforget() doesn't lock the buffer. So there can
|
|
|
- * be writeout I/O going on against recently-freed buffers. We don't
|
|
|
- * wait on that I/O in bforget() - it's more efficient to wait on the I/O
|
|
|
- * only if we really need to. That happens here.
|
|
|
- */
|
|
|
-void unmap_underlying_metadata(struct block_device *bdev, sector_t block)
|
|
|
-{
|
|
|
- struct buffer_head *old_bh;
|
|
|
-
|
|
|
- might_sleep();
|
|
|
-
|
|
|
- old_bh = __find_get_block_slow(bdev, block);
|
|
|
- if (old_bh) {
|
|
|
- clear_buffer_dirty(old_bh);
|
|
|
- wait_on_buffer(old_bh);
|
|
|
- clear_buffer_req(old_bh);
|
|
|
- __brelse(old_bh);
|
|
|
- }
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(unmap_underlying_metadata);
|
|
|
-
|
|
|
/**
|
|
|
* clean_bdev_aliases: clean a range of buffers in block device
|
|
|
* @bdev: Block device to clean buffers in
|