diff -Nur linux-2.6.0.devfs.1/fs/devfs/base.c linux-2.6.0.devfs.2/fs/devfs/base.c --- linux-2.6.0.devfs.1/fs/devfs/base.c 2003-12-28 13:28:56.000000000 +0800 +++ linux-2.6.0.devfs.2/fs/devfs/base.c 2003-12-28 01:05:20.000000000 +0800 @@ -756,8 +756,15 @@ typedef struct devfs_entry *devfs_handle_t; +struct devfs_options { + char *name; + unsigned int mask; + unsigned int *opt; +}; + + struct directory_type { - rwlock_t lock; /* Lock for searching(R)/updating(W) */ + rwlock_t lock; /* Lock for searching(R)/updating(W) */ struct devfs_entry *first; struct devfs_entry *last; unsigned char no_more_additions:1; @@ -816,8 +823,8 @@ static struct devfs_entry *root_entry; struct devfsd_buf_entry { - struct devfs_entry *de; /* The name is generated with this */ - unsigned short type; /* The type of event */ + struct devfs_entry *de; /* The name is generated with this */ + unsigned short type; /* The type of event */ umode_t mode; uid_t uid; gid_t gid; @@ -827,7 +834,7 @@ /* This structure is for the mounted devfs */ struct fs_info { struct super_block *sb; - spinlock_t devfsd_buffer_lock; /* Lock when inserting/deleting events */ + spinlock_t devfsd_buffer_lock; /* Lock when inserting/deleting events */ struct devfsd_buf_entry *devfsd_first_event; struct devfsd_buf_entry *devfsd_last_event; volatile int devfsd_sleeping; @@ -837,8 +844,8 @@ struct devfsd_notify_struct *devfsd_info; volatile unsigned long devfsd_event_mask; atomic_t devfsd_overrun_count; - wait_queue_head_t devfsd_wait_queue; /* Wake devfsd on input */ - wait_queue_head_t revalidate_wait_queue; /* Wake when devfsd sleeps */ + wait_queue_head_t devfsd_wait_queue; /* Wake devfsd on input */ + wait_queue_head_t revalidate_wait_queue; /* Wake when devfsd sleeps */ }; static struct fs_info fs_info = {.devfsd_buffer_lock = SPIN_LOCK_UNLOCKED}; @@ -994,7 +1001,8 @@ if (name && (namelen < 1)) namelen = strlen(name); - if ((new = kmalloc(sizeof *new + namelen, GFP_KERNEL)) == NULL) + new = kmalloc(sizeof *new + namelen, GFP_KERNEL); + if (!new) return NULL; memset(new, 0, sizeof *new + namelen); /* Will set '\0' on name */ @@ -1095,11 +1103,12 @@ struct devfs_entry *new; static spinlock_t root_lock = SPIN_LOCK_UNLOCKED; - /* Always ensure the root is created */ + /* Always ensure the root is created */ if (root_entry) return root_entry; - if ((new = _devfs_alloc_entry(NULL, 0, MODE_DIR)) == NULL) + new = _devfs_alloc_entry(NULL, 0, MODE_DIR); + if (!new) return NULL; spin_lock(&root_lock); @@ -1111,8 +1120,9 @@ root_entry = new; spin_unlock(&root_lock); - /* And create the entry for ".devfsd" */ - if ((new = _devfs_alloc_entry(".devfsd", 0, S_IFCHR | S_IRUSR | S_IWUSR)) == NULL) + /* And create the entry for ".devfsd" */ + new = _devfs_alloc_entry(".devfsd", 0, S_IFCHR | S_IRUSR | S_IWUSR); + if (!new) return NULL; new->u.cdev.dev = devfs_alloc_devnum(S_IFCHR | S_IRUSR | S_IWUSR); @@ -1120,7 +1130,8 @@ _devfs_append_entry(root_entry, new, NULL); #ifdef CONFIG_DEVFS_DEBUG - if ((new = _devfs_alloc_entry(".stat", 0, S_IFCHR | S_IRUGO | S_IWUGO)) == NULL) + new = _devfs_alloc_entry(".stat", 0, S_IFCHR | S_IRUGO | S_IWUGO); + if (!new) return NULL; new->u.cdev.dev = devfs_alloc_devnum(S_IFCHR | S_IRUGO | S_IWUGO); @@ -1175,10 +1186,10 @@ { int next_pos = 0; - if (dir == NULL) + if (!dir) dir = _devfs_get_root_entry(); - if (dir == NULL) + if (!dir) return NULL; devfs_get(dir); @@ -1189,7 +1200,8 @@ for (; namelen > 0; name += next_pos, namelen -= next_pos) { struct devfs_entry *de, *old = NULL; - if ((de = _devfs_descend(dir, name, namelen, &next_pos)) == NULL) { + de = _devfs_descend(dir, name, namelen, &next_pos); + if (!de) { de = _devfs_alloc_entry(name, next_pos, MODE_DIR); devfs_get(de); @@ -1230,12 +1242,14 @@ struct devfs_entry *de; namelen = strlen(name); - if ((*dir = _devfs_make_parent_for_leaf(*dir, name, namelen, &leaf_pos)) == NULL) { + *dir = _devfs_make_parent_for_leaf(*dir, name, namelen, &leaf_pos); + if (!(*dir)) { PRINTK("(%s): could not create parent path\n", name); return NULL; } - if ((de = _devfs_alloc_entry(name + leaf_pos, namelen - leaf_pos, mode)) == NULL) { + de = _devfs_alloc_entry(name + leaf_pos, namelen - leaf_pos, mode); + if (!de) { PRINTK("(%s): could not allocate entry\n", name); devfs_put(*dir); return NULL; @@ -1250,10 +1264,10 @@ { int next_pos = 0; - if (dir == NULL) + if (!dir) dir = _devfs_get_root_entry(); - if (dir == NULL) + if (!dir) return NULL; devfs_get(dir); @@ -1265,7 +1279,8 @@ return NULL; } - if ((de = _devfs_descend(dir, name, namelen, &next_pos)) == NULL) { + de = _devfs_descend(dir, name, namelen, &next_pos); + if (!de) { devfs_put(dir); return NULL; } @@ -1333,7 +1348,7 @@ static struct devfs_entry * get_devfs_entry_from_vfs_inode(struct inode *inode) { - if (inode == NULL) + if (!inode) return NULL; VERIFY_ENTRY((struct devfs_entry *) inode->u.generic_ip); @@ -1360,7 +1375,7 @@ spin_unlock(&dcache_lock); /* Forcefully remove the inode */ - if (dentry->d_inode != NULL) + if (dentry->d_inode) dentry->d_inode->i_nlink = 0; d_drop(dentry); @@ -1378,21 +1393,21 @@ struct task_struct *p = current; if (p == fs_info->devfsd_task) - return (TRUE); + return TRUE; if (process_group(p) == fs_info->devfsd_pgrp) - return (TRUE); + return TRUE; read_lock(&tasklist_lock); for (; p != &init_task; p = p->real_parent) { if (p == fs_info->devfsd_task) { read_unlock(&tasklist_lock); - return (TRUE); + return TRUE; } } read_unlock(&tasklist_lock); - return (FALSE); + return FALSE; } /** @@ -1417,13 +1432,13 @@ DECLARE_WAITQUEUE(wait, current); if (fs_info->devfsd_task == NULL) - return (TRUE); + return TRUE; if (devfsd_queue_empty(fs_info) && fs_info->devfsd_sleeping) return TRUE; if (is_devfsd_or_child(fs_info)) - return (FALSE); + return FALSE; set_current_state(TASK_UNINTERRUPTIBLE); add_wait_queue(&fs_info->revalidate_wait_queue, &wait); @@ -1435,7 +1450,7 @@ remove_wait_queue(&fs_info->revalidate_wait_queue, &wait); __set_current_state(TASK_RUNNING); - return (TRUE); + return TRUE; } /** @@ -1458,11 +1473,12 @@ struct devfs_entry *curr; if (!(fs_info->devfsd_event_mask & (1 << type))) - return (FALSE); + return FALSE; - if ((entry = kmem_cache_alloc(devfsd_buf_cache, SLAB_KERNEL)) == NULL) { + entry = kmem_cache_alloc(devfsd_buf_cache, SLAB_KERNEL); + if (!entry) { atomic_inc(&fs_info->devfsd_overrun_count); - return (FALSE); + return FALSE; } for (curr = de; curr != NULL; curr = curr->parent) @@ -1487,7 +1503,7 @@ wake_up_interruptible(&fs_info->devfsd_wait_queue); - return (TRUE); + return TRUE; } /** @@ -1602,7 +1618,7 @@ * @de: The entry to unhook. * * Returns %TRUE if the entry was unhooked, else %FALSE if it was - * previously unhooked. The caller must have a write lock on the + * previously unhooked. The caller must have a write lock on thei * parent directory. */ static int _devfs_unhook(struct devfs_entry *de) @@ -1614,12 +1630,12 @@ parent = de->parent; - if (de->prev == NULL) + if (!de->prev) parent->u.dir.first = de->next; else de->prev->next = de->next; - if (de->next == NULL) + if (!de->next) parent->u.dir.last = de->prev; else de->next->prev = de->prev; @@ -1690,27 +1706,29 @@ char *newlink; struct devfs_entry *de; - if (handle != NULL) + if (handle) *handle = NULL; - if (name == NULL) { + if (!name) { PRINTK("(): NULL name pointer\n"); return -EINVAL; } - if (link == NULL) { + if (!link) { PRINTK("(%s): NULL link pointer\n", name); return -EINVAL; } linklength = strlen(link); - if ((newlink = kmalloc(linklength + 1, GFP_KERNEL)) == NULL) + newlink = kmalloc(linklength + 1, GFP_KERNEL); + if (!newlink) return -ENOMEM; memcpy(newlink, link, linklength); newlink[linklength] = '\0'; - if ((de = _devfs_prepare_leaf(&dir, name, S_IFLNK | S_IRUGO | S_IXUGO)) == NULL) { + de = _devfs_prepare_leaf(&dir, name, S_IFLNK | S_IRUGO | S_IXUGO); + if (!de) { PRINTK("(%s): could not prepare leaf\n", name); kfree(newlink); return -ENOTDIR; @@ -1720,7 +1738,8 @@ de->u.symlink.linkname = newlink; de->u.symlink.length = linklength; - if ((err = _devfs_append_entry(dir, de, NULL)) != 0) { + err = _devfs_append_entry(dir, de, NULL); + if (err) { PRINTK("(%s): could not append to parent, err: %d\n", name, err); devfs_put(dir); @@ -1735,7 +1754,7 @@ spin_unlock(&stat_lock); #endif - if (handle != NULL) + if (handle) *handle = de; return 0; @@ -1866,7 +1885,7 @@ path[buflen - 1] = '\0'; /* Don't prepend root */ - if (de->parent == NULL) + if (!de->parent) return buflen - 1; pos = buflen - de->namelen - 1; @@ -1922,11 +1941,7 @@ static int __init devfs_setup(char *str) { - static struct { - char *name; - unsigned int mask; - unsigned int *opt; - } devfs_options_tab[] __initdata = { + static struct devfs_options devfs_options_tab[] __initdata = { #ifdef CONFIG_DEVFS_DEBUG {"dall", DEBUG_ALL, &devfs_debug_init}, {"dmod", DEBUG_MODULE_LOAD, &devfs_debug_init}, @@ -2042,15 +2057,15 @@ struct fs_info *fs_info = inode->i_sb->s_fs_info; de = get_devfs_entry_from_vfs_inode(inode); - if (de == NULL) + if (!de) return -ENODEV; retval = inode_change_ok(inode, iattr); - if (retval != 0) + if (retval) return retval; retval = inode_setattr(inode, iattr); - if (retval != 0) + if (retval) return retval; DPRINTK(DEBUG_I_CHANGE, "(%d): VFS inode: %p devfs_entry: %p\n", @@ -2071,8 +2086,8 @@ de->inode.mtime = inode->i_mtime; de->inode.ctime = inode->i_ctime; - if ((iattr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) && - !is_devfsd_or_child(fs_info)) + if (!is_devfsd_or_child(fs_info) && + (iattr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))) devfsd_notify_de(de, DEVFSD_NOTIFY_CHANGE, inode->i_mode, inode->i_uid, inode->i_gid, fs_info); @@ -2102,7 +2117,8 @@ if (de->prev == de) return NULL; /* Quick check to see if unhooked */ - if ((inode = new_inode(sb)) == NULL) { + inode = new_inode(sb); + if (!inode) { PRINTK("(%s): new_inode() failed, de: %p\n", de->name, de); return NULL; } @@ -2136,11 +2152,11 @@ if (S_ISCHR(de->mode)) { inode->i_rdev = de->u.cdev.dev; - } else if (S_ISBLK(de->mode)) + } else if (S_ISBLK(de->mode)) { init_special_inode(inode, de->mode, de->u.bdev.dev); - else if (S_ISFIFO(de->mode)) + } else if (S_ISFIFO(de->mode)) { inode->i_fop = &def_fifo_fops; - else if (S_ISDIR(de->mode)) { + } else if (S_ISDIR(de->mode)) { inode->i_op = &devfs_dir_iops; inode->i_fop = &devfs_dir_fops; } else if (S_ISLNK(de->mode)) { @@ -2246,7 +2262,7 @@ struct file_operations *ops; de = get_devfs_entry_from_vfs_inode(inode); - if (de == NULL) + if (!de) return -ENODEV; if (S_ISDIR(de->mode)) @@ -2261,7 +2277,9 @@ if (file->f_op) { lock_kernel(); - err = file->f_op->open ? (*file->f_op->open) (inode, file) : 0; + err = 0; + if (file->f_op->open) + err = file->f_op->open(inode, file); unlock_kernel(); } else err = chrdev_open(inode, file); @@ -2344,7 +2362,7 @@ dentry->d_op = &devfs_dops; /* Unhash dentry if negative (has no inode) */ - if (inode == NULL) { + if (!inode) { DPRINTK(DEBUG_D_DELETE, "(%p): dropping negative dentry\n", dentry); return 1; @@ -2380,13 +2398,13 @@ if (dentry->d_inode) return 1; - if (de == NULL) { + if (!de) { read_lock(&parent->u.dir.lock); de = _devfs_search_dir(parent, dentry->d_name.name, dentry->d_name.len); read_unlock(&parent->u.dir.lock); - if (de == NULL) + if (!de) return 1; lookup_info->de = de; @@ -2409,7 +2427,7 @@ return 1; } - if (lookup_info == NULL) + if (!lookup_info) return 1; read_lock(&parent->u.dir.lock); @@ -2470,7 +2488,8 @@ init_waitqueue_head(&lookup_info.wait_queue); dentry->d_fsdata = &lookup_info; - if (de == NULL) { + if (!de) { + int status; /* * Try with devfsd. For any kind of failure, leave a negative * dentry so someone else can deal with it (in the case where @@ -2478,8 +2497,10 @@ * before hashing the dentry, so that the devfsd queue is * filled before revalidates can start */ - if (try_modload(parent, fs_info, - dentry->d_name.name, dentry->d_name.len, &tmp) < 0) { + status = try_modload(parent, fs_info, + dentry->d_name.name, dentry->d_name.len, + &tmp); + if (status < 0) { /* Lookup event was not queued to devfsd */ d_add(dentry, NULL); return NULL; @@ -2507,12 +2528,12 @@ if (dentry->d_inode) goto out; - if (de == NULL) { + if (!de) { read_lock(&parent->u.dir.lock); de = _devfs_search_dir(parent, dentry->d_name.name, dentry->d_name.len); read_unlock(&parent->u.dir.lock); - if (de == NULL) + if (!de) goto out; /* OK, there's an entry now, but no VFS inode yet */ } @@ -2554,7 +2575,7 @@ DPRINTK(DEBUG_I_UNLINK, "(%s): de: %p\n", dentry->d_name.name, de); - if (de == NULL) + if (!de) return -ENOENT; if (!de->vfs_deletable) @@ -2586,7 +2607,7 @@ /* First try to get the devfs entry for this directory */ parent = get_devfs_entry_from_vfs_inode(dir); - if (parent == NULL) + if (!parent) return -ENOENT; err = devfs_do_symlink(parent, dentry->d_name.name, symname, &de); @@ -2605,7 +2626,8 @@ de->inode.mtime = CURRENT_TIME; de->inode.ctime = CURRENT_TIME; - if ((inode = _devfs_get_vfs_inode(dir->i_sb, de, dentry)) == NULL) + inode = _devfs_get_vfs_inode(dir->i_sb, de, dentry); + if (!inode) return -ENOMEM; DPRINTK(DEBUG_DISABLED, @@ -2631,7 +2653,7 @@ /* VFS doesn't pass S_IFMT part */ mode = (mode & ~S_IFMT) | S_IFDIR; parent = get_devfs_entry_from_vfs_inode(dir); - if (parent == NULL) + if (!parent) return -ENOENT; de = _devfs_alloc_entry(dentry->d_name.name, dentry->d_name.len, mode); @@ -2640,7 +2662,8 @@ de->vfs_deletable = TRUE; - if ((err = _devfs_append_entry(parent, de, NULL)) != 0) + err = _devfs_append_entry(parent, de, NULL); + if (err) return err; de->inode.uid = current->euid; @@ -2649,7 +2672,8 @@ de->inode.mtime = CURRENT_TIME; de->inode.ctime = CURRENT_TIME; - if ((inode = _devfs_get_vfs_inode(dir->i_sb, de, dentry)) == NULL) + inode = _devfs_get_vfs_inode(dir->i_sb, de, dentry); + if (!inode) return -ENOMEM; DPRINTK(DEBUG_DISABLED, @@ -2676,7 +2700,7 @@ return -EINVAL; de = get_devfs_entry_from_vfs_inode(inode); - if (de == NULL) + if (!de) return -ENOENT; if (!S_ISDIR(de->mode)) @@ -2727,7 +2751,7 @@ dentry->d_name.name, mode, MAJOR(rdev), MINOR(rdev)); parent = get_devfs_entry_from_vfs_inode(dir); - if (parent == NULL) + if (!parent) return -ENOENT; de = _devfs_alloc_entry(dentry->d_name.name, dentry->d_name.len, mode); @@ -2749,7 +2773,8 @@ de->inode.mtime = CURRENT_TIME; de->inode.ctime = CURRENT_TIME; - if ((inode = _devfs_get_vfs_inode(dir->i_sb, de, dentry)) == NULL) + inode = _devfs_get_vfs_inode(dir->i_sb, de, dentry); + if (!inode) return -ENOMEM; DPRINTK(DEBUG_I_MKNOD, ": new VFS inode(%u): %p dentry: %p\n", @@ -2816,7 +2841,7 @@ { struct inode *root_inode = NULL; - if (_devfs_get_root_entry() == NULL) + if (!_devfs_get_root_entry()) goto out_no_root; atomic_set(&fs_info.devfsd_overrun_count, 0); @@ -2829,7 +2854,8 @@ sb->s_magic = DEVFS_SUPER_MAGIC; sb->s_op = &devfs_sops; - if ((root_inode = _devfs_get_vfs_inode(sb, root_entry, NULL)) == NULL) + root_inode = _devfs_get_vfs_inode(sb, root_entry, NULL); + if (!root_inode) goto out_no_root; sb->s_root = d_alloc_root(root_inode); @@ -2955,6 +2981,8 @@ } if ((rpos >= devname_offset) && (len > 0)) { + void *to; + /* Copy the name */ tlen = info->namelen + 1; @@ -2963,7 +2991,8 @@ else done = TRUE; - if (copy_to_user(buf, info->devname + pos + rpos - devname_offset, tlen)) { + to = info->devname + pos + rpos - devname_offset; + if (copy_to_user(buf, to, tlen)) { return -EFAULT; } @@ -2977,7 +3006,7 @@ spin_lock(&fs_info->devfsd_buffer_lock); fs_info->devfsd_first_event = entry->next; - if (entry->next == NULL) + if (!entry->next) fs_info->devfsd_last_event = NULL; spin_unlock(&fs_info->devfsd_buffer_lock); @@ -3177,7 +3206,7 @@ return; err = do_mount("none", "/dev", "devfs", 0, ""); - if (err == 0) + if (!err) printk(KERN_INFO "Mounted devfs on /dev\n"); else PRINTK("(): unable to mount devfs, err: %d\n", err);