* [patch 3/10] Allow truncate to discard unmapped buffers
@ 2002-05-05 20:54 Andrew Morton
0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2002-05-05 20:54 UTC (permalink / raw)
To: Linus Torvalds; +Cc: lkml
The buffer state "uptodate, dirty, unmapped" is legal. It occurs when
a mapped page with attached buffers which is over a hole is dirtied.
So discard_buffer() needs to be able to discard those buffers as well;
otherwise the page ends up clean, with dirty buffers and is unfreeable.
=====================================
--- 2.5.13/fs/buffer.c~truncate-leak Sun May 5 13:32:00 2002
+++ 2.5.13-akpm/fs/buffer.c Sun May 5 13:32:37 2002
@@ -1091,17 +1091,15 @@ EXPORT_SYMBOL(set_bh_page);
/*
* Called when truncating a buffer on a page completely.
*/
-static void discard_buffer(struct buffer_head * bh)
+static /* inline */ void discard_buffer(struct buffer_head * bh)
{
- if (buffer_mapped(bh)) {
- clear_buffer_dirty(bh);
- lock_buffer(bh);
- bh->b_bdev = NULL;
- clear_buffer_mapped(bh);
- clear_buffer_req(bh);
- clear_buffer_new(bh);
- unlock_buffer(bh);
- }
+ lock_buffer(bh);
+ clear_buffer_dirty(bh);
+ bh->b_bdev = NULL;
+ clear_buffer_mapped(bh);
+ clear_buffer_req(bh);
+ clear_buffer_new(bh);
+ unlock_buffer(bh);
}
/**
--- 2.5.13/fs/jbd/transaction.c~truncate-leak Sun May 5 13:32:00 2002
+++ 2.5.13-akpm/fs/jbd/transaction.c Sun May 5 13:32:37 2002
@@ -1587,7 +1587,7 @@ static int __journal_try_to_free_buffer(
goto out;
}
- if (!buffer_uptodate(bh))
+ if (!buffer_uptodate(bh)) /* AKPM: why? */
goto out;
if (jh->b_next_transaction != 0)
@@ -1775,9 +1775,6 @@ static int journal_unmap_buffer(journal_
BUFFER_TRACE(bh, "entry");
- if (!buffer_mapped(bh))
- return 1;
-
/* It is safe to proceed here without the
* journal_datalist_spinlock because the buffers cannot be
* stolen by try_to_free_buffers as long as we are holding the
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2002-05-05 20:52 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-05-05 20:54 [patch 3/10] Allow truncate to discard unmapped buffers Andrew Morton
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.