Skip to content

Commit

Permalink
[PATCH] BLOCK: Make it possible to disable the block layer [try torva…
Browse files Browse the repository at this point in the history
…lds#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>
  • Loading branch information
dhowells authored and Jens Axboe committed Sep 30, 2006
1 parent d366e40 commit 9361401
Show file tree
Hide file tree
Showing 44 changed files with 308 additions and 63 deletions.
20 changes: 20 additions & 0 deletions block/Kconfig
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
#
# 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
Expand Down Expand Up @@ -33,4 +51,6 @@ config LSF

If unsure, say Y.

endif

source block/Kconfig.iosched
3 changes: 3 additions & 0 deletions block/Kconfig.iosched
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
if BLOCK

menu "IO Schedulers"

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

endmenu

endif
2 changes: 1 addition & 1 deletion block/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions drivers/block/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# Block device driver configuration
#

if BLOCK

menu "Block devices"

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

endmenu

endif
2 changes: 1 addition & 1 deletion drivers/cdrom/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions drivers/char/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1006,6 +1006,7 @@ config GPIO_VR41XX

config RAW_DRIVER
tristate "RAW driver (/dev/raw/rawN) (OBSOLETE)"
depends on BLOCK
help
The raw driver permits block devices to be bound to /dev/raw/rawN.
Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O.
Expand Down
4 changes: 4 additions & 0 deletions drivers/char/random.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,7 @@ void add_interrupt_randomness(int irq)
add_timer_randomness(irq_timer_state[irq], 0x100 + irq);
}

#ifdef CONFIG_BLOCK
void add_disk_randomness(struct gendisk *disk)
{
if (!disk || !disk->random)
Expand All @@ -667,6 +668,7 @@ void add_disk_randomness(struct gendisk *disk)
}

EXPORT_SYMBOL(add_disk_randomness);
#endif

#define EXTRACT_SIZE 10

Expand Down Expand Up @@ -918,6 +920,7 @@ void rand_initialize_irq(int irq)
}
}

#ifdef CONFIG_BLOCK
void rand_initialize_disk(struct gendisk *disk)
{
struct timer_rand_state *state;
Expand All @@ -932,6 +935,7 @@ void rand_initialize_disk(struct gendisk *disk)
disk->random = state;
}
}
#endif

static ssize_t
random_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos)
Expand Down
4 changes: 4 additions & 0 deletions drivers/ide/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
# Andre Hedrick <andre@linux-ide.org>
#

if BLOCK

menu "ATA/ATAPI/MFM/RLL support"

config IDE
Expand Down Expand Up @@ -1082,3 +1084,5 @@ config BLK_DEV_HD
endif

endmenu

endif
3 changes: 3 additions & 0 deletions drivers/md/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# Block device driver configuration
#

if BLOCK

menu "Multi-device support (RAID and LVM)"

config MD
Expand Down Expand Up @@ -251,3 +253,4 @@ config DM_MULTIPATH_EMC

endmenu

endif
2 changes: 1 addition & 1 deletion drivers/message/i2o/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ config I2O_BUS

config I2O_BLOCK
tristate "I2O Block OSM"
depends on I2O
depends on I2O && BLOCK
---help---
Include support for the I2O Block OSM. The Block OSM presents disk
and other structured block devices to the operating system. If you
Expand Down
2 changes: 1 addition & 1 deletion drivers/mmc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ config MMC_DEBUG

config MMC_BLOCK
tristate "MMC block device driver"
depends on MMC
depends on MMC && BLOCK
default y
help
Say Y here to enable the MMC block device driver support.
Expand Down
3 changes: 2 additions & 1 deletion drivers/mmc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
obj-$(CONFIG_MMC_OMAP) += omap.o
obj-$(CONFIG_MMC_AT91RM9200) += at91_mci.o

mmc_core-y := mmc.o mmc_queue.o mmc_sysfs.o
mmc_core-y := mmc.o mmc_sysfs.o
mmc_core-$(CONFIG_BLOCK) += mmc_queue.o

ifeq ($(CONFIG_MMC_DEBUG),y)
EXTRA_CFLAGS += -DDEBUG
Expand Down
12 changes: 6 additions & 6 deletions drivers/mtd/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ config MTD_CHAR

config MTD_BLOCK
tristate "Caching block device access to MTD devices"
depends on MTD
depends on MTD && BLOCK
---help---
Although most flash chips have an erase size too large to be useful
as block devices, it is possible to use MTD devices which are based
Expand All @@ -188,7 +188,7 @@ config MTD_BLOCK

config MTD_BLOCK_RO
tristate "Readonly block device access to MTD devices"
depends on MTD_BLOCK!=y && MTD
depends on MTD_BLOCK!=y && MTD && BLOCK
help
This allows you to mount read-only file systems (such as cramfs)
from an MTD device, without the overhead (and danger) of the caching
Expand All @@ -199,7 +199,7 @@ config MTD_BLOCK_RO

config FTL
tristate "FTL (Flash Translation Layer) support"
depends on MTD
depends on MTD && BLOCK
---help---
This provides support for the original Flash Translation Layer which
is part of the PCMCIA specification. It uses a kind of pseudo-
Expand All @@ -215,7 +215,7 @@ config FTL

config NFTL
tristate "NFTL (NAND Flash Translation Layer) support"
depends on MTD
depends on MTD && BLOCK
---help---
This provides support for the NAND Flash Translation Layer which is
used on M-Systems' DiskOnChip devices. It uses a kind of pseudo-
Expand All @@ -238,7 +238,7 @@ config NFTL_RW

config INFTL
tristate "INFTL (Inverse NAND Flash Translation Layer) support"
depends on MTD
depends on MTD && BLOCK
---help---
This provides support for the Inverse NAND Flash Translation
Layer which is used on M-Systems' newer DiskOnChip devices. It
Expand All @@ -255,7 +255,7 @@ config INFTL

config RFD_FTL
tristate "Resident Flash Disk (Flash Translation Layer) support"
depends on MTD
depends on MTD && BLOCK
---help---
This provides support for the flash translation layer known
as the Resident Flash Disk (RFD), as used by the Embedded BIOS
Expand Down
2 changes: 1 addition & 1 deletion drivers/mtd/devices/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ config MTDRAM_ABS_POS

config MTD_BLOCK2MTD
tristate "MTD using block device"
depends on MTD
depends on MTD && BLOCK
help
This driver allows a block device to appear as an MTD. It would
generally be used in the following cases:
Expand Down
2 changes: 1 addition & 1 deletion drivers/s390/block/Kconfig
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
if S390
if S390 && BLOCK

comment "S/390 block device drivers"
depends on S390
Expand Down
2 changes: 2 additions & 0 deletions drivers/scsi/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ menu "SCSI device support"
config RAID_ATTRS
tristate "RAID Transport Class"
default n
depends on BLOCK
---help---
Provides RAID

config SCSI
tristate "SCSI device support"
depends on BLOCK
---help---
If you want to use a SCSI hard disk, SCSI tape drive, SCSI CD-ROM or
any other SCSI device under Linux, say Y and make sure that you know
Expand Down
Loading

0 comments on commit 9361401

Please sign in to comment.