To my surpise I found that the f_error field defined for struct file is
never set to any error value. Its just checked in a couple of places. But
why check if it never becomes != 0?
The following patch removes the f_error field and all checks of f_error.
Signed-off-by: Christoph Lameter <[email protected]>
Index: linux-2.6.12-rc5/fs/nfs/direct.c
===================================================================
--- linux-2.6.12-rc5.orig/fs/nfs/direct.c 2005-06-06 20:43:34.000000000 +0000
+++ linux-2.6.12-rc5/fs/nfs/direct.c 2005-06-06 20:43:51.000000000 +0000
@@ -751,11 +751,6 @@
retval = -EFAULT;
if (!access_ok(VERIFY_READ, iov.iov_base, iov.iov_len))
goto out;
- if (file->f_error) {
- retval = file->f_error;
- file->f_error = 0;
- goto out;
- }
retval = -EFBIG;
if (limit != RLIM_INFINITY) {
if (pos >= limit) {
Index: linux-2.6.12-rc5/include/linux/fs.h
===================================================================
--- linux-2.6.12-rc5.orig/include/linux/fs.h 2005-06-06 20:43:34.000000000 +0000
+++ linux-2.6.12-rc5/include/linux/fs.h 2005-06-06 20:43:51.000000000 +0000
@@ -581,7 +581,6 @@
atomic_t f_count;
unsigned int f_flags;
mode_t f_mode;
- int f_error;
loff_t f_pos;
struct fown_struct f_owner;
unsigned int f_uid, f_gid;
Index: linux-2.6.12-rc5/fs/open.c
===================================================================
--- linux-2.6.12-rc5.orig/fs/open.c 2005-06-06 20:43:34.000000000 +0000
+++ linux-2.6.12-rc5/fs/open.c 2005-06-06 20:43:51.000000000 +0000
@@ -980,23 +980,15 @@
*/
int filp_close(struct file *filp, fl_owner_t id)
{
- int retval;
-
- /* Report and clear outstanding errors */
- retval = filp->f_error;
- if (retval)
- filp->f_error = 0;
+ int retval = 0;
if (!file_count(filp)) {
printk(KERN_ERR "VFS: Close: file count is 0\n");
- return retval;
+ return 0;
}
- if (filp->f_op && filp->f_op->flush) {
- int err = filp->f_op->flush(filp);
- if (!retval)
- retval = err;
- }
+ if (filp->f_op && filp->f_op->flush)
+ retval = filp->f_op->flush(filp);
dnotify_flush(filp, id);
locks_remove_posix(filp, id);
Index: linux-2.6.12-rc5/mm/filemap.c
===================================================================
--- linux-2.6.12-rc5.orig/mm/filemap.c 2005-06-06 20:43:34.000000000 +0000
+++ linux-2.6.12-rc5/mm/filemap.c 2005-06-06 20:43:51.000000000 +0000
@@ -1827,12 +1827,6 @@
if (unlikely(*pos < 0))
return -EINVAL;
- if (unlikely(file->f_error)) {
- int err = file->f_error;
- file->f_error = 0;
- return err;
- }
-
if (!isblk) {
/* FIXME: this is for backwards compatibility with 2.4 */
if (file->f_flags & O_APPEND)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]