From: Maneesh Soni <maneesh@in.ibm.com>
To: linux-hotplug@vger.kernel.org
Subject: [patch 3/3] sysfs-iattr: set inode attributes
Date: Tue, 31 May 2005 05:21:52 +0000 [thread overview]
Message-ID: <20050531050952.GD3631@in.ibm.com> (raw)
o Following patch sets the attributes for newly allocated inodes for sysfs
objects. If the object has non-default attributes, inode attributes are
set as saved in sysfs_dirent->s_iattr, pointer to struct iattr.
Signed-off-by: Maneesh Soni <maneesh@in.ibm.com>
---
linux-2.6.12-rc5-mm1-maneesh/fs/sysfs/inode.c | 37 +++++++++++++++++++++-----
linux-2.6.12-rc5-mm1-maneesh/fs/sysfs/mount.c | 4 ++
linux-2.6.12-rc5-mm1-maneesh/fs/sysfs/sysfs.h | 2 -
3 files changed, 35 insertions(+), 8 deletions(-)
diff -puN fs/sysfs/inode.c~sysfs-iattr-set-inode-attrs fs/sysfs/inode.c
--- linux-2.6.12-rc5-mm1/fs/sysfs/inode.c~sysfs-iattr-set-inode-attrs 2005-05-31 09:14:53.446456320 +0530
+++ linux-2.6.12-rc5-mm1-maneesh/fs/sysfs/inode.c 2005-05-31 09:18:50.981345528 +0530
@@ -91,18 +91,42 @@ int sysfs_setattr(struct dentry * dentry
return error;
}
-struct inode * sysfs_new_inode(mode_t mode)
+static inline void set_default_inode_attr(struct inode * inode, mode_t mode)
+{
+ inode->i_mode = mode;
+ inode->i_uid = 0;
+ inode->i_gid = 0;
+ inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+}
+
+static inline void set_inode_attr(struct inode * inode, struct iattr * iattr)
+{
+ inode->i_mode = iattr->ia_mode;
+ inode->i_uid = iattr->ia_uid;
+ inode->i_gid = iattr->ia_gid;
+ inode->i_atime = iattr->ia_atime;
+ inode->i_mtime = iattr->ia_mtime;
+ inode->i_ctime = iattr->ia_ctime;
+}
+
+struct inode * sysfs_new_inode(mode_t mode, struct sysfs_dirent * sd)
{
struct inode * inode = new_inode(sysfs_sb);
if (inode) {
- inode->i_mode = mode;
- inode->i_uid = 0;
- inode->i_gid = 0;
inode->i_blksize = PAGE_CACHE_SIZE;
inode->i_blocks = 0;
- inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
inode->i_mapping->a_ops = &sysfs_aops;
inode->i_mapping->backing_dev_info = &sysfs_backing_dev_info;
+ inode->i_op = &sysfs_inode_operations;
+
+ if (sd->s_iattr) {
+ /* sysfs_dirent has non-default attributes
+ * get them for the new inode from persistent copy
+ * in sysfs_dirent
+ */
+ set_inode_attr(inode, sd->s_iattr);
+ } else
+ set_default_inode_attr(inode, mode);
}
return inode;
}
@@ -113,7 +137,8 @@ int sysfs_create(struct dentry * dentry,
struct inode * inode = NULL;
if (dentry) {
if (!dentry->d_inode) {
- if ((inode = sysfs_new_inode(mode))) {
+ struct sysfs_dirent * sd = dentry->d_fsdata;
+ if ((inode = sysfs_new_inode(mode, sd))) {
if (dentry->d_parent && dentry->d_parent->d_inode) {
struct inode *p_inode = dentry->d_parent->d_inode;
p_inode->i_mtime = p_inode->i_ctime = CURRENT_TIME;
diff -puN fs/sysfs/mount.c~sysfs-iattr-set-inode-attrs fs/sysfs/mount.c
--- linux-2.6.12-rc5-mm1/fs/sysfs/mount.c~sysfs-iattr-set-inode-attrs 2005-05-31 09:14:58.405702400 +0530
+++ linux-2.6.12-rc5-mm1-maneesh/fs/sysfs/mount.c 2005-05-31 09:19:28.347664984 +0530
@@ -28,6 +28,7 @@ static struct sysfs_dirent sysfs_root =
.s_children = LIST_HEAD_INIT(sysfs_root.s_children),
.s_element = NULL,
.s_type = SYSFS_ROOT,
+ .s_iattr = NULL,
};
static int sysfs_fill_super(struct super_block *sb, void *data, int silent)
@@ -42,7 +43,8 @@ static int sysfs_fill_super(struct super
sb->s_time_gran = 1;
sysfs_sb = sb;
- inode = sysfs_new_inode(S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO);
+ inode = sysfs_new_inode(S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO,
+ &sysfs_root);
if (inode) {
inode->i_op = &sysfs_dir_inode_operations;
inode->i_fop = &sysfs_dir_operations;
diff -puN fs/sysfs/sysfs.h~sysfs-iattr-set-inode-attrs fs/sysfs/sysfs.h
--- linux-2.6.12-rc5-mm1/fs/sysfs/sysfs.h~sysfs-iattr-set-inode-attrs 2005-05-31 09:15:03.195974168 +0530
+++ linux-2.6.12-rc5-mm1-maneesh/fs/sysfs/sysfs.h 2005-05-31 09:19:53.200886720 +0530
@@ -2,7 +2,7 @@
extern struct vfsmount * sysfs_mount;
extern kmem_cache_t *sysfs_dir_cachep;
-extern struct inode * sysfs_new_inode(mode_t mode);
+extern struct inode * sysfs_new_inode(mode_t mode, struct sysfs_dirent *);
extern int sysfs_create(struct dentry *, int mode, int (*init)(struct inode *));
extern int sysfs_make_dirent(struct sysfs_dirent *, struct dentry *, void *,
_
--
Maneesh Soni
Linux Technology Center,
IBM India Software Labs,
Bangalore, India
email: maneesh@in.ibm.com
Phone: 91-80-25044990
-------------------------------------------------------
This SF.Net email is sponsored by Yahoo.
Introducing Yahoo! Search Developer Network - Create apps using Yahoo!
Search APIs Find out how you can build Yahoo! directly into your own
Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
reply other threads:[~2005-05-31 5:21 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20050531050952.GD3631@in.ibm.com \
--to=maneesh@in.ibm.com \
--cc=linux-hotplug@vger.kernel.org \
/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.