summaryrefslogtreecommitdiff
path: root/fs/devfs/base.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 20:19:17 -0800
committerLinus Torvalds <torvalds@athlon.transmeta.com>2002-02-04 20:19:17 -0800
commite2f6721a0a1b07612c0682d8240d3e9bc0a445a4 (patch)
treeaa6410ac8fc965f7d695031fa4c467347138c485 /fs/devfs/base.c
parent269f8f707739116e68aee38d78d0cfb3d896b856 (diff)
v2.4.9.14 -> v2.4.9.15
- Jan Harkes: make Coda work with arbitrary host filesystems, not just filesystems that use generic_file_read/write - Al Viro: block device cleanups - Hugh Dickins: swap device lock fixes - fix swap readahead race - me, Andrea: more reference bit cleanups
Diffstat (limited to 'fs/devfs/base.c')
-rw-r--r--fs/devfs/base.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/devfs/base.c b/fs/devfs/base.c
index 58aedeca1907..974379d14d4d 100644
--- a/fs/devfs/base.c
+++ b/fs/devfs/base.c
@@ -2291,9 +2291,16 @@ static int devfs_statfs (struct super_block *sb, struct statfs *buf)
return 0;
} /* End Function devfs_statfs */
+static void devfs_clear_inode(struct inode *inode)
+{
+ if (S_ISBLK(inode->i_mode))
+ bdput(inode->i_bdev);
+}
+
static struct super_operations devfs_sops =
{
put_inode: force_delete,
+ clear_inode: devfs_clear_inode,
statfs: devfs_statfs,
};
@@ -2351,9 +2358,7 @@ static struct inode *get_vfs_inode (struct super_block *sb,
{
inode->i_rdev = MKDEV (de->u.fcb.u.device.major,
de->u.fcb.u.device.minor);
- inode->i_bdev = bdget ( kdev_t_to_nr (inode->i_rdev) );
- inode->i_mapping->a_ops = &def_blk_aops;
- if (inode->i_bdev)
+ if (bd_acquire(inode) == 0)
{
if (!inode->i_bdev->bd_op && de->u.fcb.ops)
inode->i_bdev->bd_op = de->u.fcb.ops;