]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/sysfs/inode.c
generic: add phys_addr_t for holding physical addresses
[linux-2.6-omap-h63xx.git] / fs / sysfs / inode.c
index 200e1bf6f932e23fe5a458188049008b2157acb5..eb53c632f8564a100d92e4670b8c6764776a3514 100644 (file)
@@ -1,7 +1,11 @@
 /*
- * inode.c - basic inode and dentry operations.
+ * fs/sysfs/inode.c - basic sysfs inode and dentry operations
  *
- * sysfs is Copyright (c) 2001-3 Patrick Mochel
+ * Copyright (c) 2001-3 Patrick Mochel
+ * Copyright (c) 2007 SUSE Linux Products GmbH
+ * Copyright (c) 2007 Tejun Heo <teheo@suse.de>
+ *
+ * This file is released under the GPLv2.
  *
  * Please see Documentation/filesystems/sysfs.txt for more information.
  */
@@ -20,19 +24,24 @@ extern struct super_block * sysfs_sb;
 
 static const struct address_space_operations sysfs_aops = {
        .readpage       = simple_readpage,
-       .prepare_write  = simple_prepare_write,
-       .commit_write   = simple_commit_write
+       .write_begin    = simple_write_begin,
+       .write_end      = simple_write_end,
 };
 
 static struct backing_dev_info sysfs_backing_dev_info = {
        .ra_pages       = 0,    /* No readahead */
-       .capabilities   = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
+       .capabilities   = BDI_CAP_NO_ACCT_AND_WRITEBACK,
 };
 
 static const struct inode_operations sysfs_inode_operations ={
        .setattr        = sysfs_setattr,
 };
 
+int __init sysfs_inode_init(void)
+{
+       return bdi_init(&sysfs_backing_dev_info);
+}
+
 int sysfs_setattr(struct dentry * dentry, struct iattr * iattr)
 {
        struct inode * inode = dentry->d_inode;
@@ -50,6 +59,8 @@ int sysfs_setattr(struct dentry * dentry, struct iattr * iattr)
        if (error)
                return error;
 
+       iattr->ia_valid &= ~ATTR_SIZE; /* ignore size changes */
+
        error = inode_setattr(inode, iattr);
        if (error)
                return error;
@@ -127,7 +138,7 @@ static int sysfs_count_nlink(struct sysfs_dirent *sd)
        struct sysfs_dirent *child;
        int nr = 0;
 
-       for (child = sd->s_children; child; child = child->s_sibling)
+       for (child = sd->s_dir.children; child; child = child->s_sibling)
                if (sysfs_type(child) == SYSFS_DIR)
                        nr++;
 
@@ -157,11 +168,6 @@ static void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode)
 
        /* initialize inode according to type */
        switch (sysfs_type(sd)) {
-       case SYSFS_ROOT:
-               inode->i_op = &sysfs_dir_inode_operations;
-               inode->i_fop = &sysfs_dir_operations;
-               inc_nlink(inode); /* directory, account for "." */
-               break;
        case SYSFS_DIR:
                inode->i_op = &sysfs_dir_inode_operations;
                inode->i_fop = &sysfs_dir_operations;
@@ -172,7 +178,7 @@ static void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode)
                inode->i_fop = &sysfs_file_operations;
                break;
        case SYSFS_KOBJ_BIN_ATTR:
-               bin_attr = sd->s_elem.bin_attr.bin_attr;
+               bin_attr = sd->s_bin_attr.bin_attr;
                inode->i_size = bin_attr->size;
                inode->i_fop = &bin_fops;
                break;
@@ -211,23 +217,6 @@ struct inode * sysfs_get_inode(struct sysfs_dirent *sd)
        return inode;
 }
 
-/**
- *     sysfs_instantiate - instantiate dentry
- *     @dentry: dentry to be instantiated
- *     @inode: inode associated with @sd
- *
- *     Unlock @inode if locked and instantiate @dentry with @inode.
- *
- *     LOCKING:
- *     None.
- */
-void sysfs_instantiate(struct dentry *dentry, struct inode *inode)
-{
-       BUG_ON(!dentry || dentry->d_inode);
-
-       d_instantiate(dentry, inode);
-}
-
 int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name)
 {
        struct sysfs_addrm_cxt acxt;