[PATCH] Fix spurious ETXTBSY errors due to late release of struct file
authorTrond Myklebust <trond.myklebust@fys.uio.no>
Tue, 5 Feb 2002 09:24:18 +0000 (01:24 -0800)
committerTrond Myklebust <trond.myklebust@fys.uio.no>
Tue, 5 Feb 2002 09:24:18 +0000 (01:24 -0800)
commitb67b3c161c25bbfc47216112a4081a17410cb0bb
tree36705f38291ad9821523aca5c59f2c03a23ce1df
parent0d86f2eccb75791d8862cb88f8cd5bde56bcd0c3
[PATCH] Fix spurious ETXTBSY errors due to late release of struct file

  The following patch should fix a problem of ETXTBSY sometimes
occurring if one tries to run a file straight after compilation.

The problem is that both NFS read and write requests can currently
hold a count on the struct file. This is done partly so as to be able
to pass along the RPC credential (which is cached in the struct file),
and partly so that asynchronous writes can report any errors via the
file->f_error mechanism.

The problem is that both the read and write requests may persist even
after file close() occurs. For O_RDONLY files, this is not a problem,
but for O_WRONLY, and O_RDWR files, the fact that the struct file is
not released until the last call to nfs_release_request() means that
inode->i_writecount does not necessarily get cleared upon file
close().

The following patch fixes both these issues.

  - NFS read requests no longer hold the struct file. They take a
    count on the the RPC credential itself.

  - NFS write requests still hold the struct file, since they want to
    report errors to sys_close() using the file->f_error mechanism.
    However they are made to release the page, credential, and file
    structures as soon as the write is completed instead of following
    the current practice of waiting for the last nfs_page request
    release.
fs/nfs/pagelist.c
fs/nfs/read.c
fs/nfs/write.c
include/linux/nfs_fs.h
include/linux/nfs_page.h