[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <38b2ab8a0902190307p214a6928v2f66b8ad5e9564e6@mail.gmail.com>
Date: Thu, 19 Feb 2009 12:07:42 +0100
From: Francis Moreau <francis.moro@...il.com>
To: Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: Question regarding concurrent accesses through block device and fs
[ Resend to LKLM, hopping to get a wider audience ;) and to Andrew Morton since
he wrote that part of the code, I think ]
Hello,
I have a question regarding the page cache/buffer heads behaviour when
some blocks are accessed through a regular file and through the block
dev hosting this file.
First it looks like when accessing some blocks through a block device,
the same mechanisms are used as when reading a file through a file
system: the page cache is used.
That means that a block could be mapped by several buffers at the same
time.
I don't see any issues to this (if we agree that the behaviour is undefined
in that case) but looking at __block_prepare_write(), it seems that we don't
want this to happen since it does:
[...]
if (buffer_new(bh)) {
unmap_underlying_metadata(bh->b_bdev, bh->b_blocknr);
[...]
}
where unmap_underlying_metadata() unmaps the blockdev buffer
which maps b_blocknr block.
This code seems to catch only the case where the buffer is new (I don't
see why only this case is treated).
Also this call seems unneeded if __block_prepare_write() is called
when writing through the block dev since we already know that the buffer
doesn't exist (we are here to create it).
I already read the comment of the function unmap_underlying_metadata()
but I failed to understand it...
Could anybody tell me what is the actual policy ?
thanks
--
Francis
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists