Thread (12 messages) 12 messages, 6 authors, 2013-02-25

Re: [RFC][PATCH] vfs: always protect diretory file->fpos with inode mutex

From: Li Zefan <hidden>
Date: 2013-02-20 01:49:36
Also in: linux-fsdevel, lkml

On 2013/2/19 20:59, Jan Kara wrote:
On Tue 19-02-13 19:47:30, Li Zefan wrote:
quoted
On 2013/2/19 17:19, Jan Kara wrote:
quoted
On Tue 19-02-13 09:22:40, Li Zefan wrote:
quoted
There's a long long-standing bug...As long as I don't know when it dates
from.

I've written and attached a simple program to reproduce this bug, and it can
immediately trigger the bug in my box. It uses two threads, one keeps calling
read(), and the other calling readdir(), both on the same directory fd.
  So the fact that read() or even write() to fd opened O_RDONLY has *any*
effect on f_pos looks really unexpected to me. I think we really should
have there:
	if (ret >= 0)
		file_pos_write(...);
I thought about this. The problem is then we have to check every fop->write()
to see if any of them can return -errno with file->f_pos changed and fix them,
though it's do-able.
  But returning error and advancing f_pos would be a bug - specification
says write() returns the number of bytes written or -1 and f_pos should be
advanced by the number of bytes written.
Oh, I had an illusion that vfs saves f_pos and calls write() and restore f_pos
if write() fails.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help