diff options
| author | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-07-31 21:58:01 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-07-31 21:58:01 -0700 |
| commit | 50ebdf7960d5e162d2e985e6e3de7ac9c36eff17 (patch) | |
| tree | 9707b2a93217a7795491f5f0306069ca27fd2a17 /fs | |
| parent | a9ae3e34951d8f719190ce50c991b3ec815c7d0d (diff) | |
| parent | 495f02bab67c1967c5b2935c5651ca014964bc90 (diff) | |
Merge bk://ldm.bkbits.net/linux-2.5-driverfs
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/block_dev.c | 4 | ||||
| -rw-r--r-- | fs/coda/psdev.c | 6 | ||||
| -rw-r--r-- | fs/devfs/base.c | 76 | ||||
| -rw-r--r-- | fs/devices.c | 5 | ||||
| -rw-r--r-- | fs/nfs/dir.c | 9 | ||||
| -rw-r--r-- | fs/nfs/nfs2xdr.c | 2 | ||||
| -rw-r--r-- | fs/nfs/nfs3xdr.c | 2 |
7 files changed, 26 insertions, 78 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index 093eafdfe7b3..62c973eeb278 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -453,6 +453,8 @@ struct block_device_operations * get_blkfops(unsigned int major) int register_blkdev(unsigned int major, const char * name, struct block_device_operations *bdops) { + if (devfs_only()) + return 0; if (major == 0) { for (major = MAX_BLKDEV-1; major > 0; major--) { if (blkdevs[major].bdops == NULL) { @@ -474,6 +476,8 @@ int register_blkdev(unsigned int major, const char * name, struct block_device_o int unregister_blkdev(unsigned int major, const char * name) { + if (devfs_only()) + return 0; if (major >= MAX_BLKDEV) return -EINVAL; if (!blkdevs[major].bdops) diff --git a/fs/coda/psdev.c b/fs/coda/psdev.c index 7929ce018c96..10e45309f7dd 100644 --- a/fs/coda/psdev.c +++ b/fs/coda/psdev.c @@ -366,7 +366,7 @@ static devfs_handle_t devfs_handle; static int init_coda_psdev(void) { - if(devfs_register_chrdev(CODA_PSDEV_MAJOR,"coda_psdev", + if(register_chrdev(CODA_PSDEV_MAJOR,"coda_psdev", &coda_psdev_fops)) { printk(KERN_ERR "coda_psdev: unable to get major %d\n", CODA_PSDEV_MAJOR); @@ -411,7 +411,7 @@ static int __init init_coda(void) return 0; out: devfs_unregister(devfs_handle); - devfs_unregister_chrdev(CODA_PSDEV_MAJOR,"coda_psdev"); + unregister_chrdev(CODA_PSDEV_MAJOR,"coda_psdev"); coda_sysctl_clean(); out1: coda_destroy_inodecache(); @@ -428,7 +428,7 @@ static void __exit exit_coda(void) printk("coda: failed to unregister filesystem\n"); } devfs_unregister(devfs_handle); - devfs_unregister_chrdev(CODA_PSDEV_MAJOR, "coda_psdev"); + unregister_chrdev(CODA_PSDEV_MAJOR, "coda_psdev"); coda_sysctl_clean(); coda_destroy_inodecache(); } diff --git a/fs/devfs/base.c b/fs/devfs/base.c index 0e563abb6802..7731d36ef133 100644 --- a/fs/devfs/base.c +++ b/fs/devfs/base.c @@ -2228,75 +2228,17 @@ const char *devfs_get_name (devfs_handle_t de, unsigned int *namelen) /** - * devfs_register_chrdev - Optionally register a conventional character driver. - * @major: The major number for the driver. - * @name: The name of the driver (as seen in /proc/devices). - * @fops: The &file_operations structure pointer. + * devfs_only - returns if "devfs=only" is a boot option * - * This function will register a character driver provided the "devfs=only" - * option was not provided at boot time. - * Returns 0 on success, else a negative error code on failure. + * If "devfs=only" this function will return 1, otherwise 0 is returned. */ - -int devfs_register_chrdev (unsigned int major, const char *name, - struct file_operations *fops) -{ - if (boot_options & OPTION_ONLY) return 0; - return register_chrdev (major, name, fops); -} /* End Function devfs_register_chrdev */ - - -/** - * devfs_register_blkdev - Optionally register a conventional block driver. - * @major: The major number for the driver. - * @name: The name of the driver (as seen in /proc/devices). - * @bdops: The &block_device_operations structure pointer. - * - * This function will register a block driver provided the "devfs=only" - * option was not provided at boot time. - * Returns 0 on success, else a negative error code on failure. - */ - -int devfs_register_blkdev (unsigned int major, const char *name, - struct block_device_operations *bdops) +int devfs_only (void) { - if (boot_options & OPTION_ONLY) return 0; - return register_blkdev (major, name, bdops); -} /* End Function devfs_register_blkdev */ - - -/** - * devfs_unregister_chrdev - Optionally unregister a conventional character driver. - * @major: The major number for the driver. - * @name: The name of the driver (as seen in /proc/devices). - * - * This function will unregister a character driver provided the "devfs=only" - * option was not provided at boot time. - * Returns 0 on success, else a negative error code on failure. - */ - -int devfs_unregister_chrdev (unsigned int major, const char *name) -{ - if (boot_options & OPTION_ONLY) return 0; - return unregister_chrdev (major, name); -} /* End Function devfs_unregister_chrdev */ - - -/** - * devfs_unregister_blkdev - Optionally unregister a conventional block driver. - * @major: The major number for the driver. - * @name: The name of the driver (as seen in /proc/devices). - * - * This function will unregister a block driver provided the "devfs=only" - * option was not provided at boot time. - * Returns 0 on success, else a negative error code on failure. - */ + if (boot_options & OPTION_ONLY) + return 1; + return 0; +} -int devfs_unregister_blkdev (unsigned int major, const char *name) -{ - if (boot_options & OPTION_ONLY) return 0; - return unregister_blkdev (major, name); -} /* End Function devfs_unregister_blkdev */ /** * devfs_setup - Process kernel boot options. @@ -2385,10 +2327,6 @@ EXPORT_SYMBOL(devfs_get_next_sibling); EXPORT_SYMBOL(devfs_auto_unregister); EXPORT_SYMBOL(devfs_get_unregister_slave); EXPORT_SYMBOL(devfs_get_name); -EXPORT_SYMBOL(devfs_register_chrdev); -EXPORT_SYMBOL(devfs_register_blkdev); -EXPORT_SYMBOL(devfs_unregister_chrdev); -EXPORT_SYMBOL(devfs_unregister_blkdev); /** diff --git a/fs/devices.c b/fs/devices.c index 0447d805a77e..69874923b79f 100644 --- a/fs/devices.c +++ b/fs/devices.c @@ -19,6 +19,7 @@ #include <linux/errno.h> #include <linux/module.h> #include <linux/smp_lock.h> +#include <linux/devfs_fs_kernel.h> #ifdef CONFIG_KMOD #include <linux/kmod.h> @@ -97,6 +98,8 @@ static struct file_operations * get_chrfops(unsigned int major, unsigned int min int register_chrdev(unsigned int major, const char * name, struct file_operations *fops) { + if (devfs_only()) + return 0; if (major == 0) { write_lock(&chrdevs_lock); for (major = MAX_CHRDEV-1; major > 0; major--) { @@ -125,6 +128,8 @@ int register_chrdev(unsigned int major, const char * name, struct file_operation int unregister_chrdev(unsigned int major, const char * name) { + if (devfs_only()) + return 0; if (major >= MAX_CHRDEV) return -EINVAL; write_lock(&chrdevs_lock); diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 42f58d5f061a..bba0eb57f54a 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -198,7 +198,7 @@ int find_dirent_page(nfs_readdir_descriptor_t *desc) dfprintk(VFS, "NFS: find_dirent_page() searching directory page %ld\n", desc->page_index); - page = read_cache_page(&inode->i_data, desc->page_index, + page = read_cache_page(inode->i_mapping, desc->page_index, (filler_t *)nfs_readdir_filler, desc); if (IS_ERR(page)) { status = PTR_ERR(page); @@ -566,7 +566,6 @@ static int nfs_lookup_revalidate(struct dentry * dentry, int flags) goto out_valid; shrink_dcache_parent(dentry); } - d_drop(dentry); unlock_kernel(); dput(parent); return 0; @@ -639,7 +638,7 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry) nfs_renew_times(dentry); error = 0; } - goto out; + goto out_unlock; } error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, &fhandle, &fattr); @@ -655,8 +654,10 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry) } nfs_renew_times(dentry); } +out_unlock: unlock_kernel(); out: + BUG_ON(error > 0); return ERR_PTR(error); } @@ -712,7 +713,7 @@ int nfs_cached_lookup(struct inode *dir, struct dentry *dentry, desc.page_index = 0; desc.plus = 1; - for(;(page = find_get_page(&dir->i_data, desc.page_index)); desc.page_index++) { + for(;(page = find_get_page(dir->i_mapping, desc.page_index)); desc.page_index++) { res = -EIO; if (PageUptodate(page)) { diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index 5e083b6b3bca..4883b923d5f1 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c @@ -420,9 +420,9 @@ nfs_xdr_readdirres(struct rpc_rqst *req, u32 *p, void *dummy) kunmap(*page); return nr; short_pkt: - kunmap(*page); printk(KERN_NOTICE "NFS: short packet in readdir reply!\n"); entry[0] = entry[1] = 0; + kunmap(*page); return nr; err_unmap: kunmap(*page); diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c index 784720607bf8..4ebce82ad8e0 100644 --- a/fs/nfs/nfs3xdr.c +++ b/fs/nfs/nfs3xdr.c @@ -574,10 +574,10 @@ nfs3_xdr_readdirres(struct rpc_rqst *req, u32 *p, struct nfs3_readdirres *res) kunmap(*page); return nr; short_pkt: - kunmap(*page); printk(KERN_NOTICE "NFS: short packet in readdir reply!\n"); /* truncate listing */ entry[0] = entry[1] = 0; + kunmap(*page); return nr; err_unmap: kunmap(*page); |
