Re: invalidate the buffer heads of a block device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon 29-09-14 16:24:35, Thanos Makatos wrote:
> I'm looking for ways to achieve _read_ caching of a block device (usually
> iSCSI) that is attached to multiple hosts. The problem is that sometimes there
> will be some writes on that block device in a particular, known host using
> O_DIRECT, and that requires all other hosts to invalidate their buffer caches
> for that block device. I'd prefer to use standard tools/procedures rather than
> hacking things, but if I do have to implement something to solve this problem
> I'd prefer it to be something that can be accepted upstream.
> 
> It looks like that closing the block device guarantees that the buffer
> cache is invalidated, and I can guarantee that all _my_ processes close
> the block device to achieve this. However, if there is at least one other
> process I don't know of that is keeping an open file handle against that
> block device, the buffer cache won't be invalidated, and that will result
> in corruption. So this solution doesn't seem to work.
  Well, I wouldn't really advice to depend on buffer cache to be flushed
when all openers close the device.

> I had a look at the BLKFLSBUF ioctl, which seems to be designed to do the
> job, except that it doesn't work if a process has memory mapped the block
> device, and AFAIK there's no way to disallow memory mapping of a block
> device. Again, that looks like a deal-breaker.
  Yeah, plus it doesn't work when a page is dirty / under writeback
although that doesn't seem to be an issue for your usecase.

> If the above observations are correct, it seems that I have to either
> extend BLKFLSBUF to some invalidate such memory maps (I'm completely
> ignorant in that field, is it even possible?), or look for other
> solutions.
  Well, you could unmap the pages of block device that are mapped in your
new ioctl but I don't think it's easily possible to disallow userspace to
fault the pages back behind your back. And that could be a problem for you.

> Could some configuration of dm-cache, bcache, or some other component
> solve my problem? posix_fadvise with POSIX_FADV_DONTNEED seems to be just
> a hint to the kernel, there are no guarantees that cached data will be
> discarded.  I've also though of using a virtual block device driver that
> exclusively opens the actual network block device and lets user-space
> applications use the virtualised one so that I have more control and
> enforce things.
  Hum, I'm not aware of any approach which would do what you need.

								Honza
-- 
Jan Kara <jack@xxxxxxx>
SUSE Labs, CR
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux