[PATCH] Remove f_error field from struct file
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>
This commit is contained in:
Родитель
280dedb8d6
Коммит
45778ca819
|
@ -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) {
|
||||
|
|
16
fs/open.c
16
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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче