Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6d7bccc2 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

BKL: remove BKL from freevxfs



All uses of the BKL in freevxfs were the result of a pushdown into
code that doesn't really need it. As Christoph points out, this
is a read-only file system, which eliminates most of the races in
readdir/lookup.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Cc: Christoph Hellwig <hch@infradead.org>
parent 073c2141
Loading
Loading
Loading
Loading
+2 −12
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@
#include <linux/highmem.h>
#include <linux/kernel.h>
#include <linux/pagemap.h>
#include <linux/smp_lock.h>

#include "vxfs.h"
#include "vxfs_dir.h"
@@ -212,16 +211,12 @@ vxfs_lookup(struct inode *dip, struct dentry *dp, struct nameidata *nd)
	if (dp->d_name.len > VXFS_NAMELEN)
		return ERR_PTR(-ENAMETOOLONG);
				 
	lock_kernel();
	ino = vxfs_inode_by_name(dip, dp);
	if (ino) {
		ip = vxfs_iget(dip->i_sb, ino);
		if (IS_ERR(ip)) {
			unlock_kernel();
		if (IS_ERR(ip))
			return ERR_CAST(ip);
	}
	}
	unlock_kernel();
	d_add(dp, ip);
	return NULL;
}
@@ -248,8 +243,6 @@ vxfs_readdir(struct file *fp, void *retp, filldir_t filler)
	u_long			page, npages, block, pblocks, nblocks, offset;
	loff_t			pos;

	lock_kernel();

	switch ((long)fp->f_pos) {
	case 0:
		if (filler(retp, ".", 1, fp->f_pos, ip->i_ino, DT_DIR) < 0)
@@ -265,10 +258,8 @@ vxfs_readdir(struct file *fp, void *retp, filldir_t filler)

	pos = fp->f_pos - 2;
	
	if (pos > VXFS_DIRROUND(ip->i_size)) {
		unlock_kernel();
	if (pos > VXFS_DIRROUND(ip->i_size))
		return 0;
	}

	npages = dir_pages(ip);
	nblocks = dir_blocks(ip);
@@ -327,6 +318,5 @@ vxfs_readdir(struct file *fp, void *retp, filldir_t filler)
done:
	fp->f_pos = ((page << PAGE_CACHE_SHIFT) | offset) + 2;
out:
	unlock_kernel();
	return 0;
}
+0 −10
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@
#include <linux/buffer_head.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>
#include <linux/stat.h>
#include <linux/vfs.h>
#include <linux/mount.h>
@@ -81,16 +80,12 @@ vxfs_put_super(struct super_block *sbp)
{
	struct vxfs_sb_info	*infp = VXFS_SBI(sbp);

	lock_kernel();

	vxfs_put_fake_inode(infp->vsi_fship);
	vxfs_put_fake_inode(infp->vsi_ilist);
	vxfs_put_fake_inode(infp->vsi_stilist);

	brelse(infp->vsi_bp);
	kfree(infp);

	unlock_kernel();
}

/**
@@ -159,14 +154,11 @@ static int vxfs_fill_super(struct super_block *sbp, void *dp, int silent)
	struct inode *root;
	int ret = -EINVAL;

	lock_kernel();

	sbp->s_flags |= MS_RDONLY;

	infp = kzalloc(sizeof(*infp), GFP_KERNEL);
	if (!infp) {
		printk(KERN_WARNING "vxfs: unable to allocate incore superblock\n");
		unlock_kernel();
		return -ENOMEM;
	}

@@ -239,7 +231,6 @@ static int vxfs_fill_super(struct super_block *sbp, void *dp, int silent)
		goto out_free_ilist;
	}

	unlock_kernel();
	return 0;
	
out_free_ilist:
@@ -249,7 +240,6 @@ static int vxfs_fill_super(struct super_block *sbp, void *dp, int silent)
out:
	brelse(bp);
	kfree(infp);
	unlock_kernel();
	return ret;
}