]> git.hungrycats.org Git - linux/commitdiff
[PATCH] remove regular file support from devfs
authorChristoph Hellwig <hch@sgi.com>
Tue, 11 Mar 2003 03:54:58 +0000 (19:54 -0800)
committerChristoph Hellwig <hch@sgi.com>
Tue, 11 Mar 2003 03:54:58 +0000 (19:54 -0800)
It's the _device_ filesystem, so regular files are grossly misplaced
here.  Fortauntely only one driver actually tries to use it (microcode)
and it's works fine with  a regular miscdevice as well.

arch/i386/kernel/microcode.c
fs/devfs/base.c
include/linux/devfs_fs_kernel.h

index 0d51b9dc9144197ff26ce7c754bc813b693155ff..8c5414a00be8fa41f488b45d49a9896fe181fea4 100644 (file)
@@ -372,7 +372,6 @@ static ssize_t microcode_write(struct file *file, const char *buf, size_t len, l
                ret = (ssize_t)len;
        }
 out_fsize:
-       devfs_set_file_size(devfs_handle, mc_fsize);
        vfree(microcode);
 out_unlock:
        up_write(&microcode_rwsem);
@@ -388,7 +387,6 @@ static int microcode_ioctl(struct inode *inode, struct file *file,
                        if (mc_applied) {
                                int bytes = NR_CPUS * sizeof(struct microcode);
 
-                               devfs_set_file_size(devfs_handle, 0);
                                kfree(mc_applied);
                                mc_applied = NULL;
                                printk(KERN_INFO "microcode: freed %d bytes\n", bytes);
index aa1f326d0ef2db70b03a30665d940b1426640e58..c87c23f3fa01af6ee6e6087ae25011b931bcae6d 100644 (file)
@@ -762,12 +762,6 @@ struct directory_type
     unsigned char no_more_additions:1;
 };
 
-struct file_type
-{
-    struct file_operations *ops;
-    unsigned long size;
-};
-
 struct bdev_type
 {
     struct block_device_operations *ops;
@@ -809,7 +803,6 @@ struct devfs_entry
     union 
     {
        struct directory_type dir;
-       struct file_type file;
        struct bdev_type bdev;
        struct cdev_type cdev;
        struct symlink_type symlink;
@@ -1506,8 +1499,6 @@ devfs_handle_t devfs_register (devfs_handle_t dir, const char *name,
        de->u.cdev.autogen = devnum != 0;
        de->u.bdev.ops = ops;
        if (flags & DEVFS_FL_REMOVABLE) de->u.bdev.removable = TRUE;
-    } else if ( S_ISREG (mode) ) {
-       de->u.file.ops = ops;
     } else {
        PRINTK ("(%s): illegal mode: %x\n", name, mode);
        devfs_put (de);
@@ -1810,18 +1801,9 @@ int devfs_generate_path (devfs_handle_t de, char *path, int buflen)
 
 static struct file_operations *devfs_get_ops (devfs_handle_t de)
 {
-    struct module *owner;
-    struct file_operations *ops;
+    struct file_operations *ops = de->u.cdev.ops;
+    struct module *owner = ops->owner;
 
-    if (de == NULL) return NULL;
-    VERIFY_ENTRY (de);
-    if (S_ISCHR (de->mode))
-       ops = de->u.cdev.ops;
-    else
-       ops = de->u.file.ops;
-    if (!ops)
-       return NULL;
-    owner = ops->owner;
     read_lock (&de->parent->u.dir.lock);  /*  Prevent module from unloading  */
     if ( (de->next == de) || !try_module_get (owner) )
     {   /*  Entry is already unhooked or module is unloading  */
@@ -1832,28 +1814,6 @@ static struct file_operations *devfs_get_ops (devfs_handle_t de)
     return ops;
 }   /*  End Function devfs_get_ops  */
 
-/**
- *     devfs_set_file_size - Set the file size for a devfs regular file.
- *     @de: The handle to the device entry.
- *     @size: The new file size.
- *
- *     Returns 0 on success, else a negative error code.
- */
-
-int devfs_set_file_size (devfs_handle_t de, unsigned long size)
-{
-    if (de == NULL) return -EINVAL;
-    VERIFY_ENTRY (de);
-    if ( !S_ISREG (de->mode) ) return -EINVAL;
-    if (de->u.file.size == size) return 0;
-    de->u.file.size = size;
-    if (de->inode.dentry == NULL) return 0;
-    if (de->inode.dentry->d_inode == NULL) return 0;
-    de->inode.dentry->d_inode->i_size = size;
-    return 0;
-}   /*  End Function devfs_set_file_size  */
-
-
 /**
  *     devfs_setup - Process kernel boot options.
  *     @str: The boot options after the "devfs=".
@@ -2164,11 +2124,8 @@ static struct inode *_devfs_get_vfs_inode (struct super_block *sb,
        if (bd_acquire (inode) != 0)
                PRINTK ("(%d): no block device from bdget()\n",(int)inode->i_ino);
     }
-    else if ( S_ISFIFO (de->mode) ) inode->i_fop = &def_fifo_fops;
-    else if ( S_ISREG (de->mode) )
-    {
-       inode->i_size = de->u.file.size;
-    }
+    else if ( S_ISFIFO (de->mode) )
+       inode->i_fop = &def_fifo_fops;
     else if ( S_ISDIR (de->mode) )
     {
        inode->i_op = &devfs_dir_iops;
@@ -2281,15 +2238,6 @@ static int devfs_open (struct inode *inode, struct file *file)
        }
        else
            err = chrdev_open (inode, file);
-    } else if (S_ISREG(inode->i_mode)) {
-       ops = devfs_get_ops (de);  /*  Now have module refcount  */
-       file->f_op = ops;
-       if (file->f_op)
-       {
-           lock_kernel ();
-           err = file->f_op->open ? (*file->f_op->open) (inode, file) : 0;
-           unlock_kernel ();
-       }
     }
     return err;
 }   /*  End Function devfs_open  */
index 6666bfc7c79dbf6dccf91cc7fda39e5bfdf80c12..12a37faf1c886ce08c931243cf02a8964e05cf55 100644 (file)
@@ -49,7 +49,6 @@ extern int devfs_mk_symlink (devfs_handle_t dir, const char *name,
 extern devfs_handle_t devfs_mk_dir (devfs_handle_t dir, const char *name,
                                    void *info);
 extern int devfs_generate_path (devfs_handle_t de, char *path, int buflen);
-extern int devfs_set_file_size (devfs_handle_t de, unsigned long size);
 extern int devfs_register_tape (devfs_handle_t de);
 extern void devfs_unregister_tape(int num);
 extern int devfs_alloc_unique_number (struct unique_numspace *space);
@@ -104,10 +103,6 @@ static inline int devfs_generate_path (devfs_handle_t de, char *path,
 {
     return -ENOSYS;
 }
-static inline int devfs_set_file_size (devfs_handle_t de, unsigned long size)
-{
-    return -ENOSYS;
-}
 static inline int devfs_register_tape (devfs_handle_t de)
 {
     return -1;