From: Axel Kittenberger <Axel.Kittenberger@maxxio.at>
To: linux-kernel@vger.kernel.org
Cc: Marcelo Tosatti <marcelo@conectiva.com.br>
Subject: Patch, forward release() return values to the close() call
Date: Thu, 21 Mar 2002 08:47:36 +0100 [thread overview]
Message-ID: <200203210747.IAA25949@merlin.gams.co.at> (raw)
Here goes my liitle patchy, once again :o)
Whats it's about?
When close()ing an charcter device one expects the return value of the
charcter drivers release() call to be forwarded to the close() called in
userspace. However thats not the case, the kernel swallows the release()
value, and always returns 0 to the userspace's close(). (tha char drivers
release() function is called in fput() as it would have a void return value)
It may sound weired at first but there are actually device drivers than can
fail on close(), in my case it's a driver to program a LCA, the userspace
application signals end of data by closing the device, the driver finalizes
the download, and the LCA reports if it has accepted it's new program, if not
close() should return a non-zero value, indicating the operation did not
complete successfully.
----
diff -r -u linux-2.4.18-orig/fs/file_table.c linux-2.4.18/fs/file_table.c
--- linux-2.4.18-orig/fs/file_table.c Mon Sep 17 22:16:30 2001
+++ linux-2.4.18/fs/file_table.c Wed Mar 20 16:35:34 2002
@@ -97,11 +97,12 @@
return 0;
}
-void fput(struct file * file)
+int fput(struct file * file)
{
struct dentry * dentry = file->f_dentry;
struct vfsmount * mnt = file->f_vfsmnt;
struct inode * inode = dentry->d_inode;
+ int retval = 0;
if (atomic_dec_and_test(&file->f_count)) {
locks_remove_flock(file);
@@ -110,7 +111,7 @@
free_kiovec(1, &file->f_iobuf);
if (file->f_op && file->f_op->release)
- file->f_op->release(inode, file);
+ retval = file->f_op->release(inode, file);
fops_put(file->f_op);
if (file->f_mode & FMODE_WRITE)
put_write_access(inode);
@@ -124,6 +125,7 @@
dput(dentry);
mntput(mnt);
}
+ return retval;
}
struct file * fget(unsigned int fd)
diff -r -u linux-2.4.18-orig/fs/open.c linux-2.4.18/fs/open.c
--- linux-2.4.18-orig/fs/open.c Fri Oct 12 22:48:42 2001
+++ linux-2.4.18/fs/open.c Wed Mar 20 16:34:12 2002
@@ -835,7 +835,10 @@
}
fcntl_dirnotify(0, filp, 0);
locks_remove_posix(filp, id);
- fput(filp);
+ if (retval == 0)
+ retval = fput(filp);
+ else
+ fput(filp);
return retval;
}
diff -r -u linux-2.4.18-orig/include/linux/file.h
linux-2.4.18/include/linux/file.h
--- linux-2.4.18-orig/include/linux/file.h Wed Aug 23 20:22:26 2000
+++ linux-2.4.18/include/linux/file.h Wed Mar 20 16:32:36 2002
@@ -5,7 +5,7 @@
#ifndef __LINUX_FILE_H
#define __LINUX_FILE_H
-extern void FASTCALL(fput(struct file *));
+extern int FASTCALL(fput(struct file *));
extern struct file * FASTCALL(fget(unsigned int fd));
static inline int get_close_on_exec(unsigned int fd)
next reply other threads:[~2002-03-21 7:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-03-21 7:47 Axel Kittenberger [this message]
2002-03-21 8:13 ` Jeff Garzik
2002-03-21 16:32 ` David Brown
2002-03-22 7:58 ` Axel Kittenberger
2002-03-22 13:51 ` David Brown
2002-03-25 9:50 ` Axel Kittenberger
2002-03-25 13:33 ` David Brown
2002-03-26 8:52 ` Axel Kittenberger
2002-03-21 8:21 ` Jeff Garzik
2002-03-21 8:27 ` Jeff Garzik
2002-03-21 9:10 ` Oliver Neukum
2002-03-21 9:18 ` Jeff Garzik
2002-03-21 10:14 ` Oliver.Neukum
[not found] <mailman.1016697001.29134.linux-kernel2news@redhat.com>
[not found] ` <200203211845.g2LIjTu22218@devserv.devel.redhat.com>
2002-03-22 8:06 ` Axel Kittenberger
2002-03-22 8:53 ` Pete Zaitcev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200203210747.IAA25949@merlin.gams.co.at \
--to=axel.kittenberger@maxxio.at \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo@conectiva.com.br \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®