From: Maneesh Soni <maneesh@in.ibm.com>
To: Greg KH <greg@kroah.com>
Cc: Andrew Morton <akpm@osdl.org>,
Alan Stern <stern@rowland.harvard.edu>,
Kernel development list <linux-kernel@vger.kernel.org>,
Patrick Mochel <mochel@digitalimplant.org>,
Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
Subject: Re: Inconsistency in sysfs behavior?
Date: Fri, 9 Jan 2004 10:26:52 +0530 [thread overview]
Message-ID: <20040109045652.GA16301@in.ibm.com> (raw)
In-Reply-To: <20040108201920.GB16183@kroah.com>
On Thu, Jan 08, 2004 at 12:19:20PM -0800, Greg KH wrote:
> On Thu, Jan 08, 2004 at 04:02:42PM +0530, Maneesh Soni wrote:
> >
> > The problem is that we have live references to the kobject dentry but
> > kobject is gone. Problems can occur if kobject is accessed
> > through dentry->d_fsdata field. The fix I did was to take a ref. to the
> > kobject while linking the dentry with the kobject in create_dir(). This
> > ref. can be released when dentry ref. count goes to zero, that is when
> > dentry is being freed, through dentry->d_op->d_iput() call. With this
> > patch we can have a kobject alive during the life time of the corresponding
> > dentry.
> >
> > Please comment.
>
> This is the patch already in the -mm tree, right? I think it's already
> in Pat's pending queue of patches to send off (we're a bit hampered by
> the weather right now in this part of the world...)
>
No, it is not in the -mm tree. IIRC, I have not seen similar patch earlier.
If patch looks good, I request Andrew to include. It applies to -rc2-mm1 also.
Re-attached for Andrew.
Thanks
Maneesh
o The following pins the kobject when sysfs assigns dentry and inode to
the kobject. This ensures that kobject is alive during the life time of
the dentry and inode, and people holding ref. to the dentry can access the
kobject without any problems.
o The ref. taken for the kobject is released through dentry->d_op->d_iput()
call when the dentry ref. count drops to zero and it is being freed. For
this sysfs_dentry_operations is introduced.
fs/sysfs/dir.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletion(-)
diff -puN fs/sysfs/dir.c~sysfs-pin-kobject fs/sysfs/dir.c
--- linux-2.6.1-rc2/fs/sysfs/dir.c~sysfs-pin-kobject 2004-01-08 11:54:37.000000000 +0530
+++ linux-2.6.1-rc2-maneesh/fs/sysfs/dir.c 2004-01-08 15:29:17.000000000 +0530
@@ -20,6 +20,18 @@ static int init_dir(struct inode * inode
return 0;
}
+static void sysfs_d_iput(struct dentry * dentry, struct inode * inode)
+{
+ struct kobject * kobj = dentry->d_fsdata;
+
+ if (kobj)
+ kobject_put(kobj);
+ iput(inode);
+}
+
+static struct dentry_operations sysfs_dentry_operations = {
+ .d_iput = &sysfs_d_iput,
+};
static int create_dir(struct kobject * k, struct dentry * p,
const char * n, struct dentry ** d)
@@ -33,7 +45,8 @@ static int create_dir(struct kobject * k
S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO,
init_dir);
if (!error) {
- (*d)->d_fsdata = k;
+ (*d)->d_op = &sysfs_dentry_operations;
+ (*d)->d_fsdata = kobject_get(k);
p->d_inode->i_nlink++;
}
dput(*d);
_
--
Maneesh Soni
Linux Technology Center,
IBM Software Lab, Bangalore, India
email: maneesh@in.ibm.com
Phone: 91-80-5044999 Fax: 91-80-5268553
T/L : 9243696
prev parent reply other threads:[~2004-01-09 4:52 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-07 15:48 Inconsistency in sysfs behavior? Alan Stern
2004-01-07 17:27 ` Greg KH
2004-01-07 21:50 ` Alan Stern
2004-01-07 21:56 ` Greg KH
2004-01-07 22:24 ` Alan Stern
2004-01-07 22:34 ` Greg KH
2004-01-08 10:32 ` Maneesh Soni
2004-01-08 20:19 ` Greg KH
2004-01-09 4:56 ` Maneesh Soni [this message]
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=20040109045652.GA16301@in.ibm.com \
--to=maneesh@in.ibm.com \
--cc=akpm@osdl.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mochel@digitalimplant.org \
--cc=stern@rowland.harvard.edu \
--cc=viro@parcelfarce.linux.theplanet.co.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.