linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Mapping range locking and related stuff
@ 2013-09-27 20:42 Jan Kara
  2013-09-27 23:32 ` Dave Chinner
  0 siblings, 1 reply; 3+ messages in thread
From: Jan Kara @ 2013-09-27 20:42 UTC (permalink / raw)
  To: dchinner; +Cc: linux-fsdevel, linux-mm

  Hello,

  so recently I've spent some time rummaging in get_user_pages(), fault
code etc. The use of mmap_sem is really messy in some places (like V4L
drivers, infiniband,...). It is held over a deep & wide call chains and
it's not clear what's protected by it, just in the middle of that is a call
to get_user_pages(). Anyway that's mostly a side note.

The main issue I found is with the range locking itself. Consider someone
doing:
  fd = open("foo", O_RDWR);
  base = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  write(fd, base, 4096);

The write() is an interesting way to do nothing but if the mapping range
lock will be acquired early (like in generic_file_aio_write()), then this
would deadlock because generic_perform_write() will try to fault in
destination buffer and that will try to get the range lock for the same
range again.

Prefaulting buffer before we get the range lock isn't really an option
since the write(2) can be rather large. So we really either have to lock
page faults differently or use per page locking as I originally wanted.
I'm still thinking what would be the best solution for this. Ideas are
welcome.

								Honza

-- 
Jan Kara <jack@suse.cz>
SUSE Labs, CR

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-09-30 16:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-27 20:42 Mapping range locking and related stuff Jan Kara
2013-09-27 23:32 ` Dave Chinner
2013-09-30 16:25   ` Jan Kara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).