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

Commit 9361401e authored by David Howells's avatar David Howells Committed by Jens Axboe
Browse files

[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: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent d366e40a
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
#
# Block layer core configuration
#
config BLOCK
       bool "Enable the block layer"
       default y
       help
	 This permits the block layer to be removed from the kernel if it's not
	 needed (on some embedded devices for example).  If this option is
	 disabled, then blockdev files will become unusable and some
	 filesystems (such as ext3) will become unavailable.

	 This option will also disable SCSI character devices and USB storage
	 since they make use of various block layer definitions and
	 facilities.

	 Say Y here unless you know you really don't want to mount disks and
	 suchlike.

if BLOCK

#XXX - it makes sense to enable this only for 32-bit subarch's, not for x86_64
#for instance.
config LBD
@@ -33,4 +51,6 @@ config LSF

	  If unsure, say Y.

endif

source block/Kconfig.iosched
+3 −0
Original line number Diff line number Diff line
if BLOCK

menu "IO Schedulers"

@@ -67,3 +68,5 @@ config DEFAULT_IOSCHED
	default "noop" if DEFAULT_NOOP

endmenu

endif
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
# Makefile for the kernel block layer
#

obj-y	:= elevator.o ll_rw_blk.o ioctl.o genhd.o scsi_ioctl.o
obj-$(CONFIG_BLOCK) := elevator.o ll_rw_blk.o ioctl.o genhd.o scsi_ioctl.o

obj-$(CONFIG_IOSCHED_NOOP)	+= noop-iosched.o
obj-$(CONFIG_IOSCHED_AS)	+= as-iosched.o
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@
# Block device driver configuration
#

if BLOCK

menu "Block devices"

config BLK_DEV_FD
@@ -468,3 +470,5 @@ config ATA_OVER_ETH
	devices like the Coraid EtherDrive (R) Storage Blade.

endmenu

endif
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
#

menu "Old CD-ROM drivers (not SCSI, not IDE)"
	depends on ISA
	depends on ISA && BLOCK

config CD_NO_IDESCSI
	bool "Support non-SCSI/IDE/ATAPI CDROM drives"
Loading