summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@penguin.transmeta.com>2002-07-31 21:58:01 -0700
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-07-31 21:58:01 -0700
commit50ebdf7960d5e162d2e985e6e3de7ac9c36eff17 (patch)
tree9707b2a93217a7795491f5f0306069ca27fd2a17 /fs
parenta9ae3e34951d8f719190ce50c991b3ec815c7d0d (diff)
parent495f02bab67c1967c5b2935c5651ca014964bc90 (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.c4
-rw-r--r--fs/coda/psdev.c6
-rw-r--r--fs/devfs/base.c76
-rw-r--r--fs/devices.c5
-rw-r--r--fs/nfs/dir.c9
-rw-r--r--fs/nfs/nfs2xdr.c2
-rw-r--r--fs/nfs/nfs3xdr.c2
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);