[PATCH] BLOCK: Make it possible to disable the block layer [try #6]
authorDavid Howells <dhowells@redhat.com>
Sat, 30 Sep 2006 18:45:40 +0000 (20:45 +0200)
committerJens Axboe <axboe@nelson.home.kernel.dk>
Sat, 30 Sep 2006 18:52:31 +0000 (20:52 +0200)
commit9361401eb7619c033e2394e4f9f6d410d6719ac7
tree04b94a71f2366988c17740d1c16cfbdec41d5d2e
parentd366e40a1cabd453be6e2609caa7e12f9ca17b1f
[PATCH] BLOCK: Make it possible to disable the block layer [try #6]

Make it possible to disable the block layer.  Not all embedded devices require
it, some can make do with just JFFS2, NFS, ramfs, etc - none of which require
the block layer to be present.

This patch does the following:

 (*) Introduces CONFIG_BLOCK to disable the block layer, buffering and blockdev
     support.

 (*) Adds dependencies on CONFIG_BLOCK to any configuration item that controls
     an item that uses the block layer.  This includes:

     (*) Block I/O tracing.

     (*) Disk partition code.

     (*) All filesystems that are block based, eg: Ext3, ReiserFS, ISOFS.

     (*) The SCSI layer.  As far as I can tell, even SCSI chardevs use the
       block layer to do scheduling.  Some drivers that use SCSI facilities -
       such as USB storage - end up disabled indirectly from this.

     (*) Various block-based device drivers, such as IDE and the old CDROM
       drivers.

     (*) MTD blockdev handling and FTL.

     (*) JFFS - which uses set_bdev_super(), something it could avoid doing by
       taking a leaf out of JFFS2's book.

 (*) Makes most of the contents of linux/blkdev.h, linux/buffer_head.h and
     linux/elevator.h contingent on CONFIG_BLOCK being set.  sector_div() is,
     however, still used in places, and so is still available.

 (*) Also made contingent are the contents of linux/mpage.h, linux/genhd.h and
     parts of linux/fs.h.

 (*) Makes a number of files in fs/ contingent on CONFIG_BLOCK.

 (*) Makes mm/bounce.c (bounce buffering) contingent on CONFIG_BLOCK.

 (*) set_page_dirty() doesn't call __set_page_dirty_buffers() if CONFIG_BLOCK
     is not enabled.

 (*) fs/no-block.c is created to hold out-of-line stubs and things that are
     required when CONFIG_BLOCK is not set:

     (*) Default blockdev file operations (to give error ENODEV on opening).

 (*) Makes some /proc changes:

     (*) /proc/devices does not list any blockdevs.

     (*) /proc/diskstats and /proc/partitions are contingent on CONFIG_BLOCK.

 (*) Makes some compat ioctl handling contingent on CONFIG_BLOCK.

 (*) If CONFIG_BLOCK is not defined, makes sys_quotactl() return -ENODEV if
     given command other than Q_SYNC or if a special device is specified.

 (*) In init/do_mounts.c, no reference is made to the blockdev routines if
     CONFIG_BLOCK is not defined.  This does not prohibit NFS roots or JFFS2.

 (*) The bdflush, ioprio_set and ioprio_get syscalls can now be absent (return
     error ENOSYS by way of cond_syscall if so).

 (*) The seclvl_bd_claim() and seclvl_bd_release() security calls do nothing if
     CONFIG_BLOCK is not set, since they can't then happen.

Signed-Off-By: David Howells <dhowells@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
44 files changed:
block/Kconfig
block/Kconfig.iosched
block/Makefile
drivers/block/Kconfig
drivers/cdrom/Kconfig
drivers/char/Kconfig
drivers/char/random.c
drivers/ide/Kconfig
drivers/md/Kconfig
drivers/message/i2o/Kconfig
drivers/mmc/Kconfig
drivers/mmc/Makefile
drivers/mtd/Kconfig
drivers/mtd/devices/Kconfig
drivers/s390/block/Kconfig
drivers/scsi/Kconfig
fs/Kconfig
fs/Makefile
fs/compat_ioctl.c
fs/internal.h
fs/no-block.c [new file with mode: 0644]
fs/partitions/Makefile
fs/proc/proc_misc.c
fs/quota.c
fs/super.c
fs/xfs/Kconfig
include/linux/blkdev.h
include/linux/buffer_head.h
include/linux/compat_ioctl.h
include/linux/elevator.h
include/linux/fs.h
include/linux/genhd.h
include/linux/mpage.h
include/linux/raid/md.h
include/linux/raid/md_k.h
include/scsi/scsi_tcq.h
init/Kconfig
init/do_mounts.c
kernel/sys_ni.c
mm/Makefile
mm/filemap.c
mm/migrate.c
mm/page-writeback.c
mm/truncate.c