[PATCH 00/20] BKL pushdown from do_new_mount() to the filesystems (v3)

Jan Blunck
2009-11-18T09:24:54Z

During the realtime preemption mini-summit we discussed the entire removal of
the big kernel lock. I've started working on this for some filesystems. My plan
is to push the BKL down to the implementations first and remove it from there
later.

This series is pushing the BKL from do_new_mount() down to the filesystems.
If the filesystem wasn't using the BKL at all before, it gets removed instead.
If removing is trivial (e.g. because it is obviously already protected by an
existing lock) it gets removed by a follow up patch in the series.

Later on in the series the big kernel lock is removed from EXT2. Instead, a new
lock that protects the modification of some of the superblocks fields is
introduced.

Version 2 of the series addressed the feedback from Matthew Wilcox and I tried
to be more verbose about why I think it is safe to remove the BKL. In most
cases there is no shared resource accessed anyway or the superblock s_umount
rwsemaphore is used so it is trivially safe to remove the big kernel lock.

Version 3 of the series addressed the feedback from Christoph Hellwig and Arnd
Bergmann to not push down the BKL to filesystems that don't use it anyway. I've
changed the ext2 s_lock usage in ext2_sync_super() to address Jan Kara's
comments.

If all affected maintainers acknowledge their parts of the patches it should
get merged through one of the bkl branches in the tip tree.

Jan Blunck (20):
JFS: Free sbi memory in error path
AFFS: Free sbi memory in error path
BKL: Explicitly add BKL around get_sb/fill_super
BKL: Remove outdated comment and include
BKL: Remove BKL from Amiga FFS
BKL: Remove BKL from BFS
BKL: Remove BKL from CifsFS
BKL: Remove BKL from ext3 fill_super()
BKL: Remove BKL from ext3_put_super() and ext3_remount()
BKL: Remove BKL from ext4 filesystem
BKL: Remove BKL from exofs
BKL: Remove BKL from HFS
BKL: Remove BKL from HFS+
BKL: Remove BKL from JFS
BKL: Remove BKL from NILFS2
BKL: Remove BKL from NTFS
BKL: Remove BKL from cgroup
BKL: Remove BKL from do_new_mount()
ext2: Add ext2_sb_info s_lock spinlock
BKL: Remove BKL from ext2 filesystem

drivers/isdn/capi/capifs.c | 10 ++++++-
drivers/usb/core/inode.c | 5 +++
drivers/usb/gadget/inode.c | 12 +++++++-
fs/adfs/super.c | 8 +++++-
fs/affs/super.c | 17 ++++--------
fs/afs/super.c | 5 +++
fs/bfs/inode.c | 8 +----
fs/cifs/cifsfs.c | 9 ++----
fs/coda/inode.c | 8 +++++-
fs/ecryptfs/main.c | 4 +++
fs/exofs/super.c | 1 -
fs/ext2/inode.c | 5 +--
fs/ext2/super.c | 60 ++++++++++++++++++++++++++++++--------------
fs/ext3/super.c | 12 ---------
fs/ext4/super.c | 11 --------
fs/fat/namei_msdos.c | 7 ++++-
fs/fat/namei_vfat.c | 7 ++++-
fs/freevxfs/vxfs_super.c | 7 ++++-
fs/hfs/super.c | 6 +---
fs/hfsplus/super.c | 5 ---
fs/hpfs/super.c | 8 +++++-
fs/isofs/inode.c | 8 +++++-
fs/jffs2/super.c | 11 ++++++-
fs/jfs/super.c | 23 ++++------------
fs/namespace.c | 2 -
fs/ncpfs/inode.c | 8 +++++-
fs/nfs/super.c | 24 +++++++++++++++++
fs/nilfs2/ioctl.c | 1 -
fs/nilfs2/super.c | 10 -------
fs/ntfs/super.c | 24 +----------------
fs/ocfs2/dlm/dlmfs.c | 9 ++++++-
fs/ocfs2/super.c | 5 +++
fs/qnx4/inode.c | 8 +++++-
fs/reiserfs/super.c | 4 +++
fs/smbfs/inode.c | 5 +++
fs/squashfs/super.c | 6 ++++
fs/super.c | 3 --
fs/udf/super.c | 8 +++++-
fs/ufs/super.c | 5 +++
include/linux/ext2_fs_sb.h | 6 ++++
kernel/cgroup.c | 4 ---
41 files changed, 234 insertions(+), 155 deletions(-)