lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ