diff options
| author | Andrew Morton <akpm@digeo.com> | 2002-11-04 18:17:43 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-11-04 18:17:43 -0800 |
| commit | 4ccf7a32642b709056a6d60d87b56f3b72815c42 (patch) | |
| tree | d9e297665244dfcd7ee8150d88cdeac844995ee9 /kernel | |
| parent | db01fdce0da7060ef86f496279acc676bee9e31c (diff) | |
[PATCH] `event' removal: core kernel
Patch from Manfred Spraul
f_version and i_version are used by filesystems to check if it can
reuse the f_pos position across readdir calls without validation.
Right now f_version and i_version are modified by
f_version = ++event;
i_version = ++event;
if (f_version != i_version) goto revalidate
and event is a global, exported variable.
But that's not needed,
f_version = 0;
i_version++;
if (f_version != i_version) goto revalidate
works too, without the ugly 'event' variable.
I got an ok from viro, and I had notified the fs maintainers, no
complaints either
- block_dev.c, block_llseek updates f_version to '++event'.
grep showed that no device driver uses f_version, this is dead
code copied from the default llseek implementation.
- the llseek implementations and get_empty_flip set f_version
to '++event'
This is not dead code, but
filp->f_version = 0
achieves the same effect:
f_version is used by the readdir() implementation of several
filesystems to skip the revalidation of f_pos at the beginning
of a readdir call: If llseek was not called and the filesystem
did not change since the last readdir call, then the value in
f_pos can be trusted.
The implementation (for example in ext2) is
inode->i_version = ++event;
in all operations that change a directory
At the beginning of file_operation->readdir():
if(inode->i_version != flip->f_version)
revalidate();
filp->f_version = inode->i_version;
There are other users of f_version, but none of them use the
default llseek implementation (e.g. fs/pipe.c)
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions
