[PATCH] Remove f_error field from struct file
authorChristoph Lameter <christoph@graphe.net>
Thu, 23 Jun 2005 07:10:17 +0000 (00:10 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 23 Jun 2005 16:45:33 +0000 (09:45 -0700)
The following patch removes the f_error field and all checks of f_error.

Trond said:

  f_error was introduced for NFS, and made sense when we were guaranteed
  always to have a file pointer around when write errors occurred.  Since
  then, we have (for various reasons) had to introduce the nfs_open_context in
  order to track the file read/write state, and it made sense to move our
  f_error tracking there too.

Signed-off-by: Christoph Lameter <christoph@lameter.com>
Acked-by: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/nfs/direct.c
fs/open.c
include/linux/fs.h
mm/filemap.c

index d6a30c844de303b60b1ac1302cd44ac413bb6023..6537f2c4ae44bf86aeef1fe0750206de04d81c33 100644 (file)
@@ -751,11 +751,6 @@ nfs_file_direct_write(struct kiocb *iocb, const char __user *buf, size_t count,
        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 2ebb72c1a876e22d3e164add4092e809cff1ed87..5dd411b084bfb23ac4b5b3b4ee0333925c12190c 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -981,23 +981,15 @@ asmlinkage long sys_creat(const char __user * pathname, int mode)
  */
 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 9b1278e21279a3fc300cc562b1510c1ad45c6154..517bf4966bf523b688e0480870dec0c23e6abae2 100644 (file)
@@ -581,7 +581,6 @@ struct file {
        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 4a2fee2cb62bad714491e1e910406ecd66dc2557..a3598b542a318609362248886027b5aabe48ba64 100644 (file)
@@ -1827,12 +1827,6 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i
         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)