[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>
This commit is contained in:
parent
d366e40a1c
commit
9361401eb7
|
@ -1,6 +1,24 @@
|
||||||
#
|
#
|
||||||
# Block layer core configuration
|
# 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
|
#XXX - it makes sense to enable this only for 32-bit subarch's, not for x86_64
|
||||||
#for instance.
|
#for instance.
|
||||||
config LBD
|
config LBD
|
||||||
|
@ -33,4 +51,6 @@ config LSF
|
||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
source block/Kconfig.iosched
|
source block/Kconfig.iosched
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
if BLOCK
|
||||||
|
|
||||||
menu "IO Schedulers"
|
menu "IO Schedulers"
|
||||||
|
|
||||||
|
@ -67,3 +68,5 @@ config DEFAULT_IOSCHED
|
||||||
default "noop" if DEFAULT_NOOP
|
default "noop" if DEFAULT_NOOP
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# Makefile for the kernel block layer
|
# 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_NOOP) += noop-iosched.o
|
||||||
obj-$(CONFIG_IOSCHED_AS) += as-iosched.o
|
obj-$(CONFIG_IOSCHED_AS) += as-iosched.o
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
# Block device driver configuration
|
# Block device driver configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if BLOCK
|
||||||
|
|
||||||
menu "Block devices"
|
menu "Block devices"
|
||||||
|
|
||||||
config BLK_DEV_FD
|
config BLK_DEV_FD
|
||||||
|
@ -468,3 +470,5 @@ config ATA_OVER_ETH
|
||||||
devices like the Coraid EtherDrive (R) Storage Blade.
|
devices like the Coraid EtherDrive (R) Storage Blade.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
menu "Old CD-ROM drivers (not SCSI, not IDE)"
|
menu "Old CD-ROM drivers (not SCSI, not IDE)"
|
||||||
depends on ISA
|
depends on ISA && BLOCK
|
||||||
|
|
||||||
config CD_NO_IDESCSI
|
config CD_NO_IDESCSI
|
||||||
bool "Support non-SCSI/IDE/ATAPI CDROM drives"
|
bool "Support non-SCSI/IDE/ATAPI CDROM drives"
|
||||||
|
|
|
@ -1006,6 +1006,7 @@ config GPIO_VR41XX
|
||||||
|
|
||||||
config RAW_DRIVER
|
config RAW_DRIVER
|
||||||
tristate "RAW driver (/dev/raw/rawN) (OBSOLETE)"
|
tristate "RAW driver (/dev/raw/rawN) (OBSOLETE)"
|
||||||
|
depends on BLOCK
|
||||||
help
|
help
|
||||||
The raw driver permits block devices to be bound to /dev/raw/rawN.
|
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.
|
Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O.
|
||||||
|
|
|
@ -655,6 +655,7 @@ void add_interrupt_randomness(int irq)
|
||||||
add_timer_randomness(irq_timer_state[irq], 0x100 + irq);
|
add_timer_randomness(irq_timer_state[irq], 0x100 + irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
void add_disk_randomness(struct gendisk *disk)
|
void add_disk_randomness(struct gendisk *disk)
|
||||||
{
|
{
|
||||||
if (!disk || !disk->random)
|
if (!disk || !disk->random)
|
||||||
|
@ -667,6 +668,7 @@ void add_disk_randomness(struct gendisk *disk)
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(add_disk_randomness);
|
EXPORT_SYMBOL(add_disk_randomness);
|
||||||
|
#endif
|
||||||
|
|
||||||
#define EXTRACT_SIZE 10
|
#define EXTRACT_SIZE 10
|
||||||
|
|
||||||
|
@ -918,6 +920,7 @@ void rand_initialize_irq(int irq)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
void rand_initialize_disk(struct gendisk *disk)
|
void rand_initialize_disk(struct gendisk *disk)
|
||||||
{
|
{
|
||||||
struct timer_rand_state *state;
|
struct timer_rand_state *state;
|
||||||
|
@ -932,6 +935,7 @@ void rand_initialize_disk(struct gendisk *disk)
|
||||||
disk->random = state;
|
disk->random = state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
random_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos)
|
random_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos)
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
# Andre Hedrick <andre@linux-ide.org>
|
# Andre Hedrick <andre@linux-ide.org>
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if BLOCK
|
||||||
|
|
||||||
menu "ATA/ATAPI/MFM/RLL support"
|
menu "ATA/ATAPI/MFM/RLL support"
|
||||||
|
|
||||||
config IDE
|
config IDE
|
||||||
|
@ -1082,3 +1084,5 @@ config BLK_DEV_HD
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
# Block device driver configuration
|
# Block device driver configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
|
if BLOCK
|
||||||
|
|
||||||
menu "Multi-device support (RAID and LVM)"
|
menu "Multi-device support (RAID and LVM)"
|
||||||
|
|
||||||
config MD
|
config MD
|
||||||
|
@ -251,3 +253,4 @@ config DM_MULTIPATH_EMC
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
|
@ -88,7 +88,7 @@ config I2O_BUS
|
||||||
|
|
||||||
config I2O_BLOCK
|
config I2O_BLOCK
|
||||||
tristate "I2O Block OSM"
|
tristate "I2O Block OSM"
|
||||||
depends on I2O
|
depends on I2O && BLOCK
|
||||||
---help---
|
---help---
|
||||||
Include support for the I2O Block OSM. The Block OSM presents disk
|
Include support for the I2O Block OSM. The Block OSM presents disk
|
||||||
and other structured block devices to the operating system. If you
|
and other structured block devices to the operating system. If you
|
||||||
|
|
|
@ -21,7 +21,7 @@ config MMC_DEBUG
|
||||||
|
|
||||||
config MMC_BLOCK
|
config MMC_BLOCK
|
||||||
tristate "MMC block device driver"
|
tristate "MMC block device driver"
|
||||||
depends on MMC
|
depends on MMC && BLOCK
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here to enable the MMC block device driver support.
|
Say Y here to enable the MMC block device driver support.
|
||||||
|
|
|
@ -24,7 +24,8 @@ obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
|
||||||
obj-$(CONFIG_MMC_OMAP) += omap.o
|
obj-$(CONFIG_MMC_OMAP) += omap.o
|
||||||
obj-$(CONFIG_MMC_AT91RM9200) += at91_mci.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)
|
ifeq ($(CONFIG_MMC_DEBUG),y)
|
||||||
EXTRA_CFLAGS += -DDEBUG
|
EXTRA_CFLAGS += -DDEBUG
|
||||||
|
|
|
@ -166,7 +166,7 @@ config MTD_CHAR
|
||||||
|
|
||||||
config MTD_BLOCK
|
config MTD_BLOCK
|
||||||
tristate "Caching block device access to MTD devices"
|
tristate "Caching block device access to MTD devices"
|
||||||
depends on MTD
|
depends on MTD && BLOCK
|
||||||
---help---
|
---help---
|
||||||
Although most flash chips have an erase size too large to be useful
|
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
|
as block devices, it is possible to use MTD devices which are based
|
||||||
|
@ -188,7 +188,7 @@ config MTD_BLOCK
|
||||||
|
|
||||||
config MTD_BLOCK_RO
|
config MTD_BLOCK_RO
|
||||||
tristate "Readonly block device access to MTD devices"
|
tristate "Readonly block device access to MTD devices"
|
||||||
depends on MTD_BLOCK!=y && MTD
|
depends on MTD_BLOCK!=y && MTD && BLOCK
|
||||||
help
|
help
|
||||||
This allows you to mount read-only file systems (such as cramfs)
|
This allows you to mount read-only file systems (such as cramfs)
|
||||||
from an MTD device, without the overhead (and danger) of the caching
|
from an MTD device, without the overhead (and danger) of the caching
|
||||||
|
@ -199,7 +199,7 @@ config MTD_BLOCK_RO
|
||||||
|
|
||||||
config FTL
|
config FTL
|
||||||
tristate "FTL (Flash Translation Layer) support"
|
tristate "FTL (Flash Translation Layer) support"
|
||||||
depends on MTD
|
depends on MTD && BLOCK
|
||||||
---help---
|
---help---
|
||||||
This provides support for the original Flash Translation Layer which
|
This provides support for the original Flash Translation Layer which
|
||||||
is part of the PCMCIA specification. It uses a kind of pseudo-
|
is part of the PCMCIA specification. It uses a kind of pseudo-
|
||||||
|
@ -215,7 +215,7 @@ config FTL
|
||||||
|
|
||||||
config NFTL
|
config NFTL
|
||||||
tristate "NFTL (NAND Flash Translation Layer) support"
|
tristate "NFTL (NAND Flash Translation Layer) support"
|
||||||
depends on MTD
|
depends on MTD && BLOCK
|
||||||
---help---
|
---help---
|
||||||
This provides support for the NAND Flash Translation Layer which is
|
This provides support for the NAND Flash Translation Layer which is
|
||||||
used on M-Systems' DiskOnChip devices. It uses a kind of pseudo-
|
used on M-Systems' DiskOnChip devices. It uses a kind of pseudo-
|
||||||
|
@ -238,7 +238,7 @@ config NFTL_RW
|
||||||
|
|
||||||
config INFTL
|
config INFTL
|
||||||
tristate "INFTL (Inverse NAND Flash Translation Layer) support"
|
tristate "INFTL (Inverse NAND Flash Translation Layer) support"
|
||||||
depends on MTD
|
depends on MTD && BLOCK
|
||||||
---help---
|
---help---
|
||||||
This provides support for the Inverse NAND Flash Translation
|
This provides support for the Inverse NAND Flash Translation
|
||||||
Layer which is used on M-Systems' newer DiskOnChip devices. It
|
Layer which is used on M-Systems' newer DiskOnChip devices. It
|
||||||
|
@ -255,7 +255,7 @@ config INFTL
|
||||||
|
|
||||||
config RFD_FTL
|
config RFD_FTL
|
||||||
tristate "Resident Flash Disk (Flash Translation Layer) support"
|
tristate "Resident Flash Disk (Flash Translation Layer) support"
|
||||||
depends on MTD
|
depends on MTD && BLOCK
|
||||||
---help---
|
---help---
|
||||||
This provides support for the flash translation layer known
|
This provides support for the flash translation layer known
|
||||||
as the Resident Flash Disk (RFD), as used by the Embedded BIOS
|
as the Resident Flash Disk (RFD), as used by the Embedded BIOS
|
||||||
|
|
|
@ -136,7 +136,7 @@ config MTDRAM_ABS_POS
|
||||||
|
|
||||||
config MTD_BLOCK2MTD
|
config MTD_BLOCK2MTD
|
||||||
tristate "MTD using block device"
|
tristate "MTD using block device"
|
||||||
depends on MTD
|
depends on MTD && BLOCK
|
||||||
help
|
help
|
||||||
This driver allows a block device to appear as an MTD. It would
|
This driver allows a block device to appear as an MTD. It would
|
||||||
generally be used in the following cases:
|
generally be used in the following cases:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
if S390
|
if S390 && BLOCK
|
||||||
|
|
||||||
comment "S/390 block device drivers"
|
comment "S/390 block device drivers"
|
||||||
depends on S390
|
depends on S390
|
||||||
|
|
|
@ -3,11 +3,13 @@ menu "SCSI device support"
|
||||||
config RAID_ATTRS
|
config RAID_ATTRS
|
||||||
tristate "RAID Transport Class"
|
tristate "RAID Transport Class"
|
||||||
default n
|
default n
|
||||||
|
depends on BLOCK
|
||||||
---help---
|
---help---
|
||||||
Provides RAID
|
Provides RAID
|
||||||
|
|
||||||
config SCSI
|
config SCSI
|
||||||
tristate "SCSI device support"
|
tristate "SCSI device support"
|
||||||
|
depends on BLOCK
|
||||||
---help---
|
---help---
|
||||||
If you want to use a SCSI hard disk, SCSI tape drive, SCSI CD-ROM or
|
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
|
any other SCSI device under Linux, say Y and make sure that you know
|
||||||
|
|
31
fs/Kconfig
31
fs/Kconfig
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
menu "File systems"
|
menu "File systems"
|
||||||
|
|
||||||
|
if BLOCK
|
||||||
|
|
||||||
config EXT2_FS
|
config EXT2_FS
|
||||||
tristate "Second extended fs support"
|
tristate "Second extended fs support"
|
||||||
help
|
help
|
||||||
|
@ -399,6 +401,8 @@ config ROMFS_FS
|
||||||
If you don't know whether you need it, then you don't need it:
|
If you don't know whether you need it, then you don't need it:
|
||||||
answer N.
|
answer N.
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
config INOTIFY
|
config INOTIFY
|
||||||
bool "Inotify file change notification support"
|
bool "Inotify file change notification support"
|
||||||
default y
|
default y
|
||||||
|
@ -530,6 +534,7 @@ config FUSE_FS
|
||||||
If you want to develop a userspace FS, or if you want to use
|
If you want to develop a userspace FS, or if you want to use
|
||||||
a filesystem based on FUSE, answer Y or M.
|
a filesystem based on FUSE, answer Y or M.
|
||||||
|
|
||||||
|
if BLOCK
|
||||||
menu "CD-ROM/DVD Filesystems"
|
menu "CD-ROM/DVD Filesystems"
|
||||||
|
|
||||||
config ISO9660_FS
|
config ISO9660_FS
|
||||||
|
@ -597,7 +602,9 @@ config UDF_NLS
|
||||||
depends on (UDF_FS=m && NLS) || (UDF_FS=y && NLS=y)
|
depends on (UDF_FS=m && NLS) || (UDF_FS=y && NLS=y)
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
endif
|
||||||
|
|
||||||
|
if BLOCK
|
||||||
menu "DOS/FAT/NT Filesystems"
|
menu "DOS/FAT/NT Filesystems"
|
||||||
|
|
||||||
config FAT_FS
|
config FAT_FS
|
||||||
|
@ -782,6 +789,7 @@ config NTFS_RW
|
||||||
It is perfectly safe to say N here.
|
It is perfectly safe to say N here.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
endif
|
||||||
|
|
||||||
menu "Pseudo filesystems"
|
menu "Pseudo filesystems"
|
||||||
|
|
||||||
|
@ -939,7 +947,7 @@ menu "Miscellaneous filesystems"
|
||||||
|
|
||||||
config ADFS_FS
|
config ADFS_FS
|
||||||
tristate "ADFS file system support (EXPERIMENTAL)"
|
tristate "ADFS file system support (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL
|
depends on BLOCK && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
The Acorn Disc Filing System is the standard file system of the
|
The Acorn Disc Filing System is the standard file system of the
|
||||||
RiscOS operating system which runs on Acorn's ARM-based Risc PC
|
RiscOS operating system which runs on Acorn's ARM-based Risc PC
|
||||||
|
@ -967,7 +975,7 @@ config ADFS_FS_RW
|
||||||
|
|
||||||
config AFFS_FS
|
config AFFS_FS
|
||||||
tristate "Amiga FFS file system support (EXPERIMENTAL)"
|
tristate "Amiga FFS file system support (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL
|
depends on BLOCK && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
The Fast File System (FFS) is the common file system used on hard
|
The Fast File System (FFS) is the common file system used on hard
|
||||||
disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y
|
disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y
|
||||||
|
@ -989,7 +997,7 @@ config AFFS_FS
|
||||||
|
|
||||||
config HFS_FS
|
config HFS_FS
|
||||||
tristate "Apple Macintosh file system support (EXPERIMENTAL)"
|
tristate "Apple Macintosh file system support (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL
|
depends on BLOCK && EXPERIMENTAL
|
||||||
select NLS
|
select NLS
|
||||||
help
|
help
|
||||||
If you say Y here, you will be able to mount Macintosh-formatted
|
If you say Y here, you will be able to mount Macintosh-formatted
|
||||||
|
@ -1002,6 +1010,7 @@ config HFS_FS
|
||||||
|
|
||||||
config HFSPLUS_FS
|
config HFSPLUS_FS
|
||||||
tristate "Apple Extended HFS file system support"
|
tristate "Apple Extended HFS file system support"
|
||||||
|
depends on BLOCK
|
||||||
select NLS
|
select NLS
|
||||||
select NLS_UTF8
|
select NLS_UTF8
|
||||||
help
|
help
|
||||||
|
@ -1015,7 +1024,7 @@ config HFSPLUS_FS
|
||||||
|
|
||||||
config BEFS_FS
|
config BEFS_FS
|
||||||
tristate "BeOS file system (BeFS) support (read only) (EXPERIMENTAL)"
|
tristate "BeOS file system (BeFS) support (read only) (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL
|
depends on BLOCK && EXPERIMENTAL
|
||||||
select NLS
|
select NLS
|
||||||
help
|
help
|
||||||
The BeOS File System (BeFS) is the native file system of Be, Inc's
|
The BeOS File System (BeFS) is the native file system of Be, Inc's
|
||||||
|
@ -1042,7 +1051,7 @@ config BEFS_DEBUG
|
||||||
|
|
||||||
config BFS_FS
|
config BFS_FS
|
||||||
tristate "BFS file system support (EXPERIMENTAL)"
|
tristate "BFS file system support (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL
|
depends on BLOCK && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
Boot File System (BFS) is a file system used under SCO UnixWare to
|
Boot File System (BFS) is a file system used under SCO UnixWare to
|
||||||
allow the bootloader access to the kernel image and other important
|
allow the bootloader access to the kernel image and other important
|
||||||
|
@ -1064,7 +1073,7 @@ config BFS_FS
|
||||||
|
|
||||||
config EFS_FS
|
config EFS_FS
|
||||||
tristate "EFS file system support (read only) (EXPERIMENTAL)"
|
tristate "EFS file system support (read only) (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL
|
depends on BLOCK && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
EFS is an older file system used for non-ISO9660 CD-ROMs and hard
|
EFS is an older file system used for non-ISO9660 CD-ROMs and hard
|
||||||
disk partitions by SGI's IRIX operating system (IRIX 6.0 and newer
|
disk partitions by SGI's IRIX operating system (IRIX 6.0 and newer
|
||||||
|
@ -1079,7 +1088,7 @@ config EFS_FS
|
||||||
|
|
||||||
config JFFS_FS
|
config JFFS_FS
|
||||||
tristate "Journalling Flash File System (JFFS) support"
|
tristate "Journalling Flash File System (JFFS) support"
|
||||||
depends on MTD
|
depends on MTD && BLOCK
|
||||||
help
|
help
|
||||||
JFFS is the Journaling Flash File System developed by Axis
|
JFFS is the Journaling Flash File System developed by Axis
|
||||||
Communications in Sweden, aimed at providing a crash/powerdown-safe
|
Communications in Sweden, aimed at providing a crash/powerdown-safe
|
||||||
|
@ -1264,6 +1273,7 @@ endchoice
|
||||||
|
|
||||||
config CRAMFS
|
config CRAMFS
|
||||||
tristate "Compressed ROM file system support (cramfs)"
|
tristate "Compressed ROM file system support (cramfs)"
|
||||||
|
depends on BLOCK
|
||||||
select ZLIB_INFLATE
|
select ZLIB_INFLATE
|
||||||
help
|
help
|
||||||
Saying Y here includes support for CramFs (Compressed ROM File
|
Saying Y here includes support for CramFs (Compressed ROM File
|
||||||
|
@ -1283,6 +1293,7 @@ config CRAMFS
|
||||||
|
|
||||||
config VXFS_FS
|
config VXFS_FS
|
||||||
tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
|
tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
|
||||||
|
depends on BLOCK
|
||||||
help
|
help
|
||||||
FreeVxFS is a file system driver that support the VERITAS VxFS(TM)
|
FreeVxFS is a file system driver that support the VERITAS VxFS(TM)
|
||||||
file system format. VERITAS VxFS(TM) is the standard file system
|
file system format. VERITAS VxFS(TM) is the standard file system
|
||||||
|
@ -1300,6 +1311,7 @@ config VXFS_FS
|
||||||
|
|
||||||
config HPFS_FS
|
config HPFS_FS
|
||||||
tristate "OS/2 HPFS file system support"
|
tristate "OS/2 HPFS file system support"
|
||||||
|
depends on BLOCK
|
||||||
help
|
help
|
||||||
OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS
|
OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS
|
||||||
is the file system used for organizing files on OS/2 hard disk
|
is the file system used for organizing files on OS/2 hard disk
|
||||||
|
@ -1316,6 +1328,7 @@ config HPFS_FS
|
||||||
|
|
||||||
config QNX4FS_FS
|
config QNX4FS_FS
|
||||||
tristate "QNX4 file system support (read only)"
|
tristate "QNX4 file system support (read only)"
|
||||||
|
depends on BLOCK
|
||||||
help
|
help
|
||||||
This is the file system used by the real-time operating systems
|
This is the file system used by the real-time operating systems
|
||||||
QNX 4 and QNX 6 (the latter is also called QNX RTP).
|
QNX 4 and QNX 6 (the latter is also called QNX RTP).
|
||||||
|
@ -1343,6 +1356,7 @@ config QNX4FS_RW
|
||||||
|
|
||||||
config SYSV_FS
|
config SYSV_FS
|
||||||
tristate "System V/Xenix/V7/Coherent file system support"
|
tristate "System V/Xenix/V7/Coherent file system support"
|
||||||
|
depends on BLOCK
|
||||||
help
|
help
|
||||||
SCO, Xenix and Coherent are commercial Unix systems for Intel
|
SCO, Xenix and Coherent are commercial Unix systems for Intel
|
||||||
machines, and Version 7 was used on the DEC PDP-11. Saying Y
|
machines, and Version 7 was used on the DEC PDP-11. Saying Y
|
||||||
|
@ -1381,6 +1395,7 @@ config SYSV_FS
|
||||||
|
|
||||||
config UFS_FS
|
config UFS_FS
|
||||||
tristate "UFS file system support (read only)"
|
tristate "UFS file system support (read only)"
|
||||||
|
depends on BLOCK
|
||||||
help
|
help
|
||||||
BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD,
|
BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD,
|
||||||
OpenBSD and NeXTstep) use a file system called UFS. Some System V
|
OpenBSD and NeXTstep) use a file system called UFS. Some System V
|
||||||
|
@ -1959,11 +1974,13 @@ config GENERIC_ACL
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
if BLOCK
|
||||||
menu "Partition Types"
|
menu "Partition Types"
|
||||||
|
|
||||||
source "fs/partitions/Kconfig"
|
source "fs/partitions/Kconfig"
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
endif
|
||||||
|
|
||||||
source "fs/nls/Kconfig"
|
source "fs/nls/Kconfig"
|
||||||
|
|
||||||
|
|
14
fs/Makefile
14
fs/Makefile
|
@ -5,12 +5,18 @@
|
||||||
# Rewritten to use lists instead of if-statements.
|
# Rewritten to use lists instead of if-statements.
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y := open.o read_write.o file_table.o buffer.o bio.o super.o \
|
obj-y := open.o read_write.o file_table.o super.o \
|
||||||
block_dev.o char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \
|
char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \
|
||||||
ioctl.o readdir.o select.o fifo.o locks.o dcache.o inode.o \
|
ioctl.o readdir.o select.o fifo.o locks.o dcache.o inode.o \
|
||||||
attr.o bad_inode.o file.o filesystems.o namespace.o aio.o \
|
attr.o bad_inode.o file.o filesystems.o namespace.o aio.o \
|
||||||
seq_file.o xattr.o libfs.o fs-writeback.o mpage.o direct-io.o \
|
seq_file.o xattr.o libfs.o fs-writeback.o \
|
||||||
ioprio.o pnode.o drop_caches.o splice.o sync.o
|
pnode.o drop_caches.o splice.o sync.o
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_BLOCK),y)
|
||||||
|
obj-y += buffer.o bio.o block_dev.o direct-io.o mpage.o ioprio.o
|
||||||
|
else
|
||||||
|
obj-y += no-block.o
|
||||||
|
endif
|
||||||
|
|
||||||
obj-$(CONFIG_INOTIFY) += inotify.o
|
obj-$(CONFIG_INOTIFY) += inotify.o
|
||||||
obj-$(CONFIG_INOTIFY_USER) += inotify_user.o
|
obj-$(CONFIG_INOTIFY_USER) += inotify_user.o
|
||||||
|
|
|
@ -645,6 +645,7 @@ out:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
struct hd_geometry32 {
|
struct hd_geometry32 {
|
||||||
unsigned char heads;
|
unsigned char heads;
|
||||||
unsigned char sectors;
|
unsigned char sectors;
|
||||||
|
@ -869,6 +870,7 @@ static int sg_grt_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
|
|
||||||
struct sock_fprog32 {
|
struct sock_fprog32 {
|
||||||
unsigned short len;
|
unsigned short len;
|
||||||
|
@ -992,6 +994,7 @@ static int ppp_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
struct mtget32 {
|
struct mtget32 {
|
||||||
compat_long_t mt_type;
|
compat_long_t mt_type;
|
||||||
compat_long_t mt_resid;
|
compat_long_t mt_resid;
|
||||||
|
@ -1164,6 +1167,7 @@ static int cdrom_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long ar
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
|
|
||||||
#ifdef CONFIG_VT
|
#ifdef CONFIG_VT
|
||||||
|
|
||||||
|
@ -1491,6 +1495,7 @@ ret_einval(unsigned int fd, unsigned int cmd, unsigned long arg)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
static int broken_blkgetsize(unsigned int fd, unsigned int cmd, unsigned long arg)
|
static int broken_blkgetsize(unsigned int fd, unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
/* The mkswap binary hard codes it to Intel value :-((( */
|
/* The mkswap binary hard codes it to Intel value :-((( */
|
||||||
|
@ -1525,12 +1530,14 @@ static int blkpg_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long ar
|
||||||
|
|
||||||
return sys_ioctl(fd, cmd, (unsigned long)a);
|
return sys_ioctl(fd, cmd, (unsigned long)a);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int ioc_settimeout(unsigned int fd, unsigned int cmd, unsigned long arg)
|
static int ioc_settimeout(unsigned int fd, unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
return rw_long(fd, AUTOFS_IOC_SETTIMEOUT, arg);
|
return rw_long(fd, AUTOFS_IOC_SETTIMEOUT, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
/* Fix sizeof(sizeof()) breakage */
|
/* Fix sizeof(sizeof()) breakage */
|
||||||
#define BLKBSZGET_32 _IOR(0x12,112,int)
|
#define BLKBSZGET_32 _IOR(0x12,112,int)
|
||||||
#define BLKBSZSET_32 _IOW(0x12,113,int)
|
#define BLKBSZSET_32 _IOW(0x12,113,int)
|
||||||
|
@ -1551,6 +1558,7 @@ static int do_blkgetsize64(unsigned int fd, unsigned int cmd,
|
||||||
{
|
{
|
||||||
return sys_ioctl(fd, BLKGETSIZE64, (unsigned long)compat_ptr(arg));
|
return sys_ioctl(fd, BLKGETSIZE64, (unsigned long)compat_ptr(arg));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Bluetooth ioctls */
|
/* Bluetooth ioctls */
|
||||||
#define HCIUARTSETPROTO _IOW('U', 200, int)
|
#define HCIUARTSETPROTO _IOW('U', 200, int)
|
||||||
|
@ -1571,6 +1579,7 @@ static int do_blkgetsize64(unsigned int fd, unsigned int cmd,
|
||||||
#define HIDPGETCONNLIST _IOR('H', 210, int)
|
#define HIDPGETCONNLIST _IOR('H', 210, int)
|
||||||
#define HIDPGETCONNINFO _IOR('H', 211, int)
|
#define HIDPGETCONNINFO _IOR('H', 211, int)
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
struct floppy_struct32 {
|
struct floppy_struct32 {
|
||||||
compat_uint_t size;
|
compat_uint_t size;
|
||||||
compat_uint_t sect;
|
compat_uint_t sect;
|
||||||
|
@ -1895,6 +1904,7 @@ out:
|
||||||
kfree(karg);
|
kfree(karg);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct mtd_oob_buf32 {
|
struct mtd_oob_buf32 {
|
||||||
u_int32_t start;
|
u_int32_t start;
|
||||||
|
@ -1936,6 +1946,7 @@ static int mtd_rw_oob(unsigned int fd, unsigned int cmd, unsigned long arg)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
struct raw32_config_request
|
struct raw32_config_request
|
||||||
{
|
{
|
||||||
compat_int_t raw_minor;
|
compat_int_t raw_minor;
|
||||||
|
@ -2000,6 +2011,7 @@ static int raw_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
|
|
||||||
struct serial_struct32 {
|
struct serial_struct32 {
|
||||||
compat_int_t type;
|
compat_int_t type;
|
||||||
|
@ -2606,6 +2618,7 @@ HANDLE_IOCTL(SIOCBRDELIF, dev_ifsioc)
|
||||||
HANDLE_IOCTL(SIOCRTMSG, ret_einval)
|
HANDLE_IOCTL(SIOCRTMSG, ret_einval)
|
||||||
HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp)
|
HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp)
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo)
|
HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo)
|
||||||
HANDLE_IOCTL(BLKRAGET, w_long)
|
HANDLE_IOCTL(BLKRAGET, w_long)
|
||||||
HANDLE_IOCTL(BLKGETSIZE, w_long)
|
HANDLE_IOCTL(BLKGETSIZE, w_long)
|
||||||
|
@ -2631,14 +2644,17 @@ HANDLE_IOCTL(FDGETFDCSTAT32, fd_ioctl_trans)
|
||||||
HANDLE_IOCTL(FDWERRORGET32, fd_ioctl_trans)
|
HANDLE_IOCTL(FDWERRORGET32, fd_ioctl_trans)
|
||||||
HANDLE_IOCTL(SG_IO,sg_ioctl_trans)
|
HANDLE_IOCTL(SG_IO,sg_ioctl_trans)
|
||||||
HANDLE_IOCTL(SG_GET_REQUEST_TABLE, sg_grt_trans)
|
HANDLE_IOCTL(SG_GET_REQUEST_TABLE, sg_grt_trans)
|
||||||
|
#endif
|
||||||
HANDLE_IOCTL(PPPIOCGIDLE32, ppp_ioctl_trans)
|
HANDLE_IOCTL(PPPIOCGIDLE32, ppp_ioctl_trans)
|
||||||
HANDLE_IOCTL(PPPIOCSCOMPRESS32, ppp_ioctl_trans)
|
HANDLE_IOCTL(PPPIOCSCOMPRESS32, ppp_ioctl_trans)
|
||||||
HANDLE_IOCTL(PPPIOCSPASS32, ppp_sock_fprog_ioctl_trans)
|
HANDLE_IOCTL(PPPIOCSPASS32, ppp_sock_fprog_ioctl_trans)
|
||||||
HANDLE_IOCTL(PPPIOCSACTIVE32, ppp_sock_fprog_ioctl_trans)
|
HANDLE_IOCTL(PPPIOCSACTIVE32, ppp_sock_fprog_ioctl_trans)
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
HANDLE_IOCTL(MTIOCGET32, mt_ioctl_trans)
|
HANDLE_IOCTL(MTIOCGET32, mt_ioctl_trans)
|
||||||
HANDLE_IOCTL(MTIOCPOS32, mt_ioctl_trans)
|
HANDLE_IOCTL(MTIOCPOS32, mt_ioctl_trans)
|
||||||
HANDLE_IOCTL(CDROMREADAUDIO, cdrom_ioctl_trans)
|
HANDLE_IOCTL(CDROMREADAUDIO, cdrom_ioctl_trans)
|
||||||
HANDLE_IOCTL(CDROM_SEND_PACKET, cdrom_ioctl_trans)
|
HANDLE_IOCTL(CDROM_SEND_PACKET, cdrom_ioctl_trans)
|
||||||
|
#endif
|
||||||
#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)
|
#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)
|
||||||
HANDLE_IOCTL(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout)
|
HANDLE_IOCTL(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout)
|
||||||
#ifdef CONFIG_VT
|
#ifdef CONFIG_VT
|
||||||
|
@ -2677,12 +2693,14 @@ HANDLE_IOCTL(SONET_SETFRAMING, do_atm_ioctl)
|
||||||
HANDLE_IOCTL(SONET_GETFRAMING, do_atm_ioctl)
|
HANDLE_IOCTL(SONET_GETFRAMING, do_atm_ioctl)
|
||||||
HANDLE_IOCTL(SONET_GETFRSENSE, do_atm_ioctl)
|
HANDLE_IOCTL(SONET_GETFRSENSE, do_atm_ioctl)
|
||||||
/* block stuff */
|
/* block stuff */
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
HANDLE_IOCTL(BLKBSZGET_32, do_blkbszget)
|
HANDLE_IOCTL(BLKBSZGET_32, do_blkbszget)
|
||||||
HANDLE_IOCTL(BLKBSZSET_32, do_blkbszset)
|
HANDLE_IOCTL(BLKBSZSET_32, do_blkbszset)
|
||||||
HANDLE_IOCTL(BLKGETSIZE64_32, do_blkgetsize64)
|
HANDLE_IOCTL(BLKGETSIZE64_32, do_blkgetsize64)
|
||||||
/* Raw devices */
|
/* Raw devices */
|
||||||
HANDLE_IOCTL(RAW_SETBIND, raw_ioctl)
|
HANDLE_IOCTL(RAW_SETBIND, raw_ioctl)
|
||||||
HANDLE_IOCTL(RAW_GETBIND, raw_ioctl)
|
HANDLE_IOCTL(RAW_GETBIND, raw_ioctl)
|
||||||
|
#endif
|
||||||
/* Serial */
|
/* Serial */
|
||||||
HANDLE_IOCTL(TIOCGSERIAL, serial_struct_ioctl)
|
HANDLE_IOCTL(TIOCGSERIAL, serial_struct_ioctl)
|
||||||
HANDLE_IOCTL(TIOCSSERIAL, serial_struct_ioctl)
|
HANDLE_IOCTL(TIOCSSERIAL, serial_struct_ioctl)
|
||||||
|
|
|
@ -14,10 +14,16 @@
|
||||||
/*
|
/*
|
||||||
* block_dev.c
|
* block_dev.c
|
||||||
*/
|
*/
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
extern struct super_block *blockdev_superblock;
|
extern struct super_block *blockdev_superblock;
|
||||||
extern void __init bdev_cache_init(void);
|
extern void __init bdev_cache_init(void);
|
||||||
|
|
||||||
#define sb_is_blkdev_sb(sb) ((sb) == blockdev_superblock)
|
#define sb_is_blkdev_sb(sb) ((sb) == blockdev_superblock)
|
||||||
|
#else
|
||||||
|
static inline void bdev_cache_init(void) {}
|
||||||
|
|
||||||
|
#define sb_is_blkdev_sb(sb) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* char_dev.c
|
* char_dev.c
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* no-block.c: implementation of routines required for non-BLOCK configuration
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
|
||||||
|
* Written by David Howells (dhowells@redhat.com)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version
|
||||||
|
* 2 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/fs.h>
|
||||||
|
|
||||||
|
static int no_blkdev_open(struct inode * inode, struct file * filp)
|
||||||
|
{
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct file_operations def_blk_fops = {
|
||||||
|
.open = no_blkdev_open,
|
||||||
|
};
|
|
@ -2,7 +2,7 @@
|
||||||
# Makefile for the linux kernel.
|
# Makefile for the linux kernel.
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y := check.o
|
obj-$(CONFIG_BLOCK) := check.o
|
||||||
|
|
||||||
obj-$(CONFIG_ACORN_PARTITION) += acorn.o
|
obj-$(CONFIG_ACORN_PARTITION) += acorn.o
|
||||||
obj-$(CONFIG_AMIGA_PARTITION) += amiga.o
|
obj-$(CONFIG_AMIGA_PARTITION) += amiga.o
|
||||||
|
|
|
@ -277,12 +277,15 @@ static int devinfo_show(struct seq_file *f, void *v)
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
seq_printf(f, "Character devices:\n");
|
seq_printf(f, "Character devices:\n");
|
||||||
chrdev_show(f, i);
|
chrdev_show(f, i);
|
||||||
} else {
|
}
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
else {
|
||||||
i -= CHRDEV_MAJOR_HASH_SIZE;
|
i -= CHRDEV_MAJOR_HASH_SIZE;
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
seq_printf(f, "\nBlock devices:\n");
|
seq_printf(f, "\nBlock devices:\n");
|
||||||
blkdev_show(f, i);
|
blkdev_show(f, i);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,6 +358,7 @@ static int stram_read_proc(char *page, char **start, off_t off,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
extern struct seq_operations partitions_op;
|
extern struct seq_operations partitions_op;
|
||||||
static int partitions_open(struct inode *inode, struct file *file)
|
static int partitions_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
|
@ -378,6 +382,7 @@ static struct file_operations proc_diskstats_operations = {
|
||||||
.llseek = seq_lseek,
|
.llseek = seq_lseek,
|
||||||
.release = seq_release,
|
.release = seq_release,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_MODULES
|
#ifdef CONFIG_MODULES
|
||||||
extern struct seq_operations modules_op;
|
extern struct seq_operations modules_op;
|
||||||
|
@ -695,7 +700,9 @@ void __init proc_misc_init(void)
|
||||||
entry->proc_fops = &proc_kmsg_operations;
|
entry->proc_fops = &proc_kmsg_operations;
|
||||||
create_seq_entry("devices", 0, &proc_devinfo_operations);
|
create_seq_entry("devices", 0, &proc_devinfo_operations);
|
||||||
create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
|
create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
create_seq_entry("partitions", 0, &proc_partitions_operations);
|
create_seq_entry("partitions", 0, &proc_partitions_operations);
|
||||||
|
#endif
|
||||||
create_seq_entry("stat", 0, &proc_stat_operations);
|
create_seq_entry("stat", 0, &proc_stat_operations);
|
||||||
create_seq_entry("interrupts", 0, &proc_interrupts_operations);
|
create_seq_entry("interrupts", 0, &proc_interrupts_operations);
|
||||||
#ifdef CONFIG_SLAB
|
#ifdef CONFIG_SLAB
|
||||||
|
@ -707,7 +714,9 @@ void __init proc_misc_init(void)
|
||||||
create_seq_entry("buddyinfo",S_IRUGO, &fragmentation_file_operations);
|
create_seq_entry("buddyinfo",S_IRUGO, &fragmentation_file_operations);
|
||||||
create_seq_entry("vmstat",S_IRUGO, &proc_vmstat_file_operations);
|
create_seq_entry("vmstat",S_IRUGO, &proc_vmstat_file_operations);
|
||||||
create_seq_entry("zoneinfo",S_IRUGO, &proc_zoneinfo_file_operations);
|
create_seq_entry("zoneinfo",S_IRUGO, &proc_zoneinfo_file_operations);
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
create_seq_entry("diskstats", 0, &proc_diskstats_operations);
|
create_seq_entry("diskstats", 0, &proc_diskstats_operations);
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_MODULES
|
#ifdef CONFIG_MODULES
|
||||||
create_seq_entry("modules", 0, &proc_modules_operations);
|
create_seq_entry("modules", 0, &proc_modules_operations);
|
||||||
#endif
|
#endif
|
||||||
|
|
44
fs/quota.c
44
fs/quota.c
|
@ -337,6 +337,34 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id, void
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* look up a superblock on which quota ops will be performed
|
||||||
|
* - use the name of a block device to find the superblock thereon
|
||||||
|
*/
|
||||||
|
static inline struct super_block *quotactl_block(const char __user *special)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
struct block_device *bdev;
|
||||||
|
struct super_block *sb;
|
||||||
|
char *tmp = getname(special);
|
||||||
|
|
||||||
|
if (IS_ERR(tmp))
|
||||||
|
return ERR_PTR(PTR_ERR(tmp));
|
||||||
|
bdev = lookup_bdev(tmp);
|
||||||
|
putname(tmp);
|
||||||
|
if (IS_ERR(bdev))
|
||||||
|
return ERR_PTR(PTR_ERR(bdev));
|
||||||
|
sb = get_super(bdev);
|
||||||
|
bdput(bdev);
|
||||||
|
if (!sb)
|
||||||
|
return ERR_PTR(-ENODEV);
|
||||||
|
|
||||||
|
return sb;
|
||||||
|
#else
|
||||||
|
return ERR_PTR(-ENODEV);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the system call interface. This communicates with
|
* This is the system call interface. This communicates with
|
||||||
* the user-level programs. Currently this only supports diskquota
|
* the user-level programs. Currently this only supports diskquota
|
||||||
|
@ -347,25 +375,15 @@ asmlinkage long sys_quotactl(unsigned int cmd, const char __user *special, qid_t
|
||||||
{
|
{
|
||||||
uint cmds, type;
|
uint cmds, type;
|
||||||
struct super_block *sb = NULL;
|
struct super_block *sb = NULL;
|
||||||
struct block_device *bdev;
|
|
||||||
char *tmp;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
cmds = cmd >> SUBCMDSHIFT;
|
cmds = cmd >> SUBCMDSHIFT;
|
||||||
type = cmd & SUBCMDMASK;
|
type = cmd & SUBCMDMASK;
|
||||||
|
|
||||||
if (cmds != Q_SYNC || special) {
|
if (cmds != Q_SYNC || special) {
|
||||||
tmp = getname(special);
|
sb = quotactl_block(special);
|
||||||
if (IS_ERR(tmp))
|
if (IS_ERR(sb))
|
||||||
return PTR_ERR(tmp);
|
return PTR_ERR(sb);
|
||||||
bdev = lookup_bdev(tmp);
|
|
||||||
putname(tmp);
|
|
||||||
if (IS_ERR(bdev))
|
|
||||||
return PTR_ERR(bdev);
|
|
||||||
sb = get_super(bdev);
|
|
||||||
bdput(bdev);
|
|
||||||
if (!sb)
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = check_quotactl_valid(sb, type, cmds, id);
|
ret = check_quotactl_valid(sb, type, cmds, id);
|
||||||
|
|
|
@ -571,8 +571,10 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev))
|
if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev))
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
#endif
|
||||||
if (flags & MS_RDONLY)
|
if (flags & MS_RDONLY)
|
||||||
acct_auto_close(sb);
|
acct_auto_close(sb);
|
||||||
shrink_dcache_sb(sb);
|
shrink_dcache_sb(sb);
|
||||||
|
@ -692,6 +694,7 @@ void kill_litter_super(struct super_block *sb)
|
||||||
|
|
||||||
EXPORT_SYMBOL(kill_litter_super);
|
EXPORT_SYMBOL(kill_litter_super);
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
static int set_bdev_super(struct super_block *s, void *data)
|
static int set_bdev_super(struct super_block *s, void *data)
|
||||||
{
|
{
|
||||||
s->s_bdev = data;
|
s->s_bdev = data;
|
||||||
|
@ -787,6 +790,7 @@ void kill_block_super(struct super_block *sb)
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(kill_block_super);
|
EXPORT_SYMBOL(kill_block_super);
|
||||||
|
#endif
|
||||||
|
|
||||||
int get_sb_nodev(struct file_system_type *fs_type,
|
int get_sb_nodev(struct file_system_type *fs_type,
|
||||||
int flags, void *data,
|
int flags, void *data,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
config XFS_FS
|
config XFS_FS
|
||||||
tristate "XFS filesystem support"
|
tristate "XFS filesystem support"
|
||||||
|
depends on BLOCK
|
||||||
help
|
help
|
||||||
XFS is a high performance journaling filesystem which originated
|
XFS is a high performance journaling filesystem which originated
|
||||||
on the SGI IRIX platform. It is completely multi-threaded, can
|
on the SGI IRIX platform. It is completely multi-threaded, can
|
||||||
|
|
|
@ -16,6 +16,22 @@
|
||||||
|
|
||||||
#include <asm/scatterlist.h>
|
#include <asm/scatterlist.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_LBD
|
||||||
|
# include <asm/div64.h>
|
||||||
|
# define sector_div(a, b) do_div(a, b)
|
||||||
|
#else
|
||||||
|
# define sector_div(n, b)( \
|
||||||
|
{ \
|
||||||
|
int _res; \
|
||||||
|
_res = (n) % (b); \
|
||||||
|
(n) /= (b); \
|
||||||
|
_res; \
|
||||||
|
} \
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
||||||
struct scsi_ioctl_command;
|
struct scsi_ioctl_command;
|
||||||
|
|
||||||
struct request_queue;
|
struct request_queue;
|
||||||
|
@ -818,24 +834,30 @@ struct work_struct;
|
||||||
int kblockd_schedule_work(struct work_struct *work);
|
int kblockd_schedule_work(struct work_struct *work);
|
||||||
void kblockd_flush(void);
|
void kblockd_flush(void);
|
||||||
|
|
||||||
#ifdef CONFIG_LBD
|
|
||||||
# include <asm/div64.h>
|
|
||||||
# define sector_div(a, b) do_div(a, b)
|
|
||||||
#else
|
|
||||||
# define sector_div(n, b)( \
|
|
||||||
{ \
|
|
||||||
int _res; \
|
|
||||||
_res = (n) % (b); \
|
|
||||||
(n) /= (b); \
|
|
||||||
_res; \
|
|
||||||
} \
|
|
||||||
)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MODULE_ALIAS_BLOCKDEV(major,minor) \
|
#define MODULE_ALIAS_BLOCKDEV(major,minor) \
|
||||||
MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
|
MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
|
||||||
#define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \
|
#define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \
|
||||||
MODULE_ALIAS("block-major-" __stringify(major) "-*")
|
MODULE_ALIAS("block-major-" __stringify(major) "-*")
|
||||||
|
|
||||||
|
|
||||||
|
#else /* CONFIG_BLOCK */
|
||||||
|
/*
|
||||||
|
* stubs for when the block layer is configured out
|
||||||
|
*/
|
||||||
|
#define buffer_heads_over_limit 0
|
||||||
|
|
||||||
|
static inline long blk_congestion_wait(int rw, long timeout)
|
||||||
|
{
|
||||||
|
return timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long nr_blockdev_pages(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void exit_io_context(void) {}
|
||||||
|
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
||||||
enum bh_state_bits {
|
enum bh_state_bits {
|
||||||
BH_Uptodate, /* Contains valid data */
|
BH_Uptodate, /* Contains valid data */
|
||||||
BH_Dirty, /* Is dirty */
|
BH_Dirty, /* Is dirty */
|
||||||
|
@ -301,4 +303,18 @@ static inline void lock_buffer(struct buffer_head *bh)
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int __set_page_dirty_buffers(struct page *page);
|
extern int __set_page_dirty_buffers(struct page *page);
|
||||||
|
|
||||||
|
#else /* CONFIG_BLOCK */
|
||||||
|
|
||||||
|
static inline void buffer_init(void) {}
|
||||||
|
static inline int try_to_free_buffers(struct page *page) { return 1; }
|
||||||
|
static inline int sync_blockdev(struct block_device *bdev) { return 0; }
|
||||||
|
static inline int inode_has_buffers(struct inode *inode) { return 0; }
|
||||||
|
static inline void invalidate_inode_buffers(struct inode *inode) {}
|
||||||
|
static inline int remove_inode_buffers(struct inode *inode) { return 1; }
|
||||||
|
static inline int sync_mapping_buffers(struct address_space *mapping) { return 0; }
|
||||||
|
static inline void invalidate_bdev(struct block_device *bdev, int destroy_dirty_buffers) {}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
#endif /* _LINUX_BUFFER_HEAD_H */
|
#endif /* _LINUX_BUFFER_HEAD_H */
|
||||||
|
|
|
@ -90,6 +90,7 @@ COMPATIBLE_IOCTL(FDTWADDLE)
|
||||||
COMPATIBLE_IOCTL(FDFMTTRK)
|
COMPATIBLE_IOCTL(FDFMTTRK)
|
||||||
COMPATIBLE_IOCTL(FDRAWCMD)
|
COMPATIBLE_IOCTL(FDRAWCMD)
|
||||||
/* 0x12 */
|
/* 0x12 */
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
COMPATIBLE_IOCTL(BLKRASET)
|
COMPATIBLE_IOCTL(BLKRASET)
|
||||||
COMPATIBLE_IOCTL(BLKROSET)
|
COMPATIBLE_IOCTL(BLKROSET)
|
||||||
COMPATIBLE_IOCTL(BLKROGET)
|
COMPATIBLE_IOCTL(BLKROGET)
|
||||||
|
@ -103,6 +104,7 @@ COMPATIBLE_IOCTL(BLKTRACESETUP)
|
||||||
COMPATIBLE_IOCTL(BLKTRACETEARDOWN)
|
COMPATIBLE_IOCTL(BLKTRACETEARDOWN)
|
||||||
ULONG_IOCTL(BLKRASET)
|
ULONG_IOCTL(BLKRASET)
|
||||||
ULONG_IOCTL(BLKFRASET)
|
ULONG_IOCTL(BLKFRASET)
|
||||||
|
#endif
|
||||||
/* RAID */
|
/* RAID */
|
||||||
COMPATIBLE_IOCTL(RAID_VERSION)
|
COMPATIBLE_IOCTL(RAID_VERSION)
|
||||||
COMPATIBLE_IOCTL(GET_ARRAY_INFO)
|
COMPATIBLE_IOCTL(GET_ARRAY_INFO)
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include <linux/percpu.h>
|
#include <linux/percpu.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
||||||
typedef int (elevator_merge_fn) (request_queue_t *, struct request **,
|
typedef int (elevator_merge_fn) (request_queue_t *, struct request **,
|
||||||
struct bio *);
|
struct bio *);
|
||||||
|
|
||||||
|
@ -203,4 +205,5 @@ enum {
|
||||||
__val; \
|
__val; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1482,6 +1482,7 @@ extern void __init vfs_caches_init(unsigned long);
|
||||||
extern void putname(const char *name);
|
extern void putname(const char *name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
extern int register_blkdev(unsigned int, const char *);
|
extern int register_blkdev(unsigned int, const char *);
|
||||||
extern int unregister_blkdev(unsigned int, const char *);
|
extern int unregister_blkdev(unsigned int, const char *);
|
||||||
extern struct block_device *bdget(dev_t);
|
extern struct block_device *bdget(dev_t);
|
||||||
|
@ -1490,11 +1491,15 @@ extern void bd_forget(struct inode *inode);
|
||||||
extern void bdput(struct block_device *);
|
extern void bdput(struct block_device *);
|
||||||
extern struct block_device *open_by_devnum(dev_t, unsigned);
|
extern struct block_device *open_by_devnum(dev_t, unsigned);
|
||||||
extern struct block_device *open_partition_by_devnum(dev_t, unsigned);
|
extern struct block_device *open_partition_by_devnum(dev_t, unsigned);
|
||||||
extern const struct file_operations def_blk_fops;
|
|
||||||
extern const struct address_space_operations def_blk_aops;
|
extern const struct address_space_operations def_blk_aops;
|
||||||
|
#else
|
||||||
|
static inline void bd_forget(struct inode *inode) {}
|
||||||
|
#endif
|
||||||
|
extern const struct file_operations def_blk_fops;
|
||||||
extern const struct file_operations def_chr_fops;
|
extern const struct file_operations def_chr_fops;
|
||||||
extern const struct file_operations bad_sock_fops;
|
extern const struct file_operations bad_sock_fops;
|
||||||
extern const struct file_operations def_fifo_fops;
|
extern const struct file_operations def_fifo_fops;
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
|
extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
|
||||||
extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long);
|
extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long);
|
||||||
extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
|
extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
|
||||||
|
@ -1510,6 +1515,7 @@ extern void bd_release_from_disk(struct block_device *, struct gendisk *);
|
||||||
#define bd_claim_by_disk(bdev, holder, disk) bd_claim(bdev, holder)
|
#define bd_claim_by_disk(bdev, holder, disk) bd_claim(bdev, holder)
|
||||||
#define bd_release_from_disk(bdev, disk) bd_release(bdev)
|
#define bd_release_from_disk(bdev, disk) bd_release(bdev)
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* fs/char_dev.c */
|
/* fs/char_dev.c */
|
||||||
#define CHRDEV_MAJOR_HASH_SIZE 255
|
#define CHRDEV_MAJOR_HASH_SIZE 255
|
||||||
|
@ -1523,14 +1529,19 @@ extern int chrdev_open(struct inode *, struct file *);
|
||||||
extern void chrdev_show(struct seq_file *,off_t);
|
extern void chrdev_show(struct seq_file *,off_t);
|
||||||
|
|
||||||
/* fs/block_dev.c */
|
/* fs/block_dev.c */
|
||||||
#define BLKDEV_MAJOR_HASH_SIZE 255
|
|
||||||
#define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */
|
#define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
#define BLKDEV_MAJOR_HASH_SIZE 255
|
||||||
extern const char *__bdevname(dev_t, char *buffer);
|
extern const char *__bdevname(dev_t, char *buffer);
|
||||||
extern const char *bdevname(struct block_device *bdev, char *buffer);
|
extern const char *bdevname(struct block_device *bdev, char *buffer);
|
||||||
extern struct block_device *lookup_bdev(const char *);
|
extern struct block_device *lookup_bdev(const char *);
|
||||||
extern struct block_device *open_bdev_excl(const char *, int, void *);
|
extern struct block_device *open_bdev_excl(const char *, int, void *);
|
||||||
extern void close_bdev_excl(struct block_device *);
|
extern void close_bdev_excl(struct block_device *);
|
||||||
extern void blkdev_show(struct seq_file *,off_t);
|
extern void blkdev_show(struct seq_file *,off_t);
|
||||||
|
#else
|
||||||
|
#define BLKDEV_MAJOR_HASH_SIZE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void init_special_inode(struct inode *, umode_t, dev_t);
|
extern void init_special_inode(struct inode *, umode_t, dev_t);
|
||||||
|
|
||||||
|
@ -1544,6 +1555,7 @@ extern const struct file_operations rdwr_fifo_fops;
|
||||||
|
|
||||||
extern int fs_may_remount_ro(struct super_block *);
|
extern int fs_may_remount_ro(struct super_block *);
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
/*
|
/*
|
||||||
* return READ, READA, or WRITE
|
* return READ, READA, or WRITE
|
||||||
*/
|
*/
|
||||||
|
@ -1555,9 +1567,10 @@ extern int fs_may_remount_ro(struct super_block *);
|
||||||
#define bio_data_dir(bio) ((bio)->bi_rw & 1)
|
#define bio_data_dir(bio) ((bio)->bi_rw & 1)
|
||||||
|
|
||||||
extern int check_disk_change(struct block_device *);
|
extern int check_disk_change(struct block_device *);
|
||||||
extern int invalidate_inodes(struct super_block *);
|
|
||||||
extern int __invalidate_device(struct block_device *);
|
extern int __invalidate_device(struct block_device *);
|
||||||
extern int invalidate_partition(struct gendisk *, int);
|
extern int invalidate_partition(struct gendisk *, int);
|
||||||
|
#endif
|
||||||
|
extern int invalidate_inodes(struct super_block *);
|
||||||
unsigned long invalidate_mapping_pages(struct address_space *mapping,
|
unsigned long invalidate_mapping_pages(struct address_space *mapping,
|
||||||
pgoff_t start, pgoff_t end);
|
pgoff_t start, pgoff_t end);
|
||||||
unsigned long invalidate_inode_pages(struct address_space *mapping);
|
unsigned long invalidate_inode_pages(struct address_space *mapping);
|
||||||
|
@ -1590,7 +1603,9 @@ extern void emergency_sync(void);
|
||||||
extern void emergency_remount(void);
|
extern void emergency_remount(void);
|
||||||
extern int do_remount_sb(struct super_block *sb, int flags,
|
extern int do_remount_sb(struct super_block *sb, int flags,
|
||||||
void *data, int force);
|
void *data, int force);
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
extern sector_t bmap(struct inode *, sector_t);
|
extern sector_t bmap(struct inode *, sector_t);
|
||||||
|
#endif
|
||||||
extern int notify_change(struct dentry *, struct iattr *);
|
extern int notify_change(struct dentry *, struct iattr *);
|
||||||
extern int permission(struct inode *, int, struct nameidata *);
|
extern int permission(struct inode *, int, struct nameidata *);
|
||||||
extern int generic_permission(struct inode *, int,
|
extern int generic_permission(struct inode *, int,
|
||||||
|
@ -1673,9 +1688,11 @@ static inline void insert_inode_hash(struct inode *inode) {
|
||||||
extern struct file * get_empty_filp(void);
|
extern struct file * get_empty_filp(void);
|
||||||
extern void file_move(struct file *f, struct list_head *list);
|
extern void file_move(struct file *f, struct list_head *list);
|
||||||
extern void file_kill(struct file *f);
|
extern void file_kill(struct file *f);
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
struct bio;
|
struct bio;
|
||||||
extern void submit_bio(int, struct bio *);
|
extern void submit_bio(int, struct bio *);
|
||||||
extern int bdev_read_only(struct block_device *);
|
extern int bdev_read_only(struct block_device *);
|
||||||
|
#endif
|
||||||
extern int set_blocksize(struct block_device *, int);
|
extern int set_blocksize(struct block_device *, int);
|
||||||
extern int sb_set_blocksize(struct super_block *, int);
|
extern int sb_set_blocksize(struct super_block *, int);
|
||||||
extern int sb_min_blocksize(struct super_block *, int);
|
extern int sb_min_blocksize(struct super_block *, int);
|
||||||
|
@ -1756,6 +1773,7 @@ static inline void do_generic_file_read(struct file * filp, loff_t *ppos,
|
||||||
actor);
|
actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
|
ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
|
||||||
struct block_device *bdev, const struct iovec *iov, loff_t offset,
|
struct block_device *bdev, const struct iovec *iov, loff_t offset,
|
||||||
unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io,
|
unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io,
|
||||||
|
@ -1793,6 +1811,7 @@ static inline ssize_t blockdev_direct_IO_own_locking(int rw, struct kiocb *iocb,
|
||||||
return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
|
return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset,
|
||||||
nr_segs, get_block, end_io, DIO_OWN_LOCKING);
|
nr_segs, get_block, end_io, DIO_OWN_LOCKING);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
extern const struct file_operations generic_ro_fops;
|
extern const struct file_operations generic_ro_fops;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
/* These three have identical behaviour; use the second one if DOS FDISK gets
|
/* These three have identical behaviour; use the second one if DOS FDISK gets
|
||||||
confused about extended/logical partitions starting past cylinder 1023. */
|
confused about extended/logical partitions starting past cylinder 1023. */
|
||||||
|
@ -420,3 +422,5 @@ static inline struct block_device *bdget_disk(struct gendisk *disk, int index)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
* (And no, it doesn't do the #ifdef __MPAGE_H thing, and it doesn't do
|
* (And no, it doesn't do the #ifdef __MPAGE_H thing, and it doesn't do
|
||||||
* nested includes. Get it right in the .c file).
|
* nested includes. Get it right in the .c file).
|
||||||
*/
|
*/
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
||||||
struct writeback_control;
|
struct writeback_control;
|
||||||
typedef int (writepage_t)(struct page *page, struct writeback_control *wbc);
|
typedef int (writepage_t)(struct page *page, struct writeback_control *wbc);
|
||||||
|
@ -20,3 +21,5 @@ int mpage_writepages(struct address_space *mapping,
|
||||||
struct writeback_control *wbc, get_block_t get_block);
|
struct writeback_control *wbc, get_block_t get_block);
|
||||||
int mpage_writepage(struct page *page, get_block_t *get_block,
|
int mpage_writepage(struct page *page, get_block_t *get_block,
|
||||||
struct writeback_control *wbc);
|
struct writeback_control *wbc);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -53,6 +53,8 @@
|
||||||
#include <linux/raid/md_u.h>
|
#include <linux/raid/md_u.h>
|
||||||
#include <linux/raid/md_k.h>
|
#include <linux/raid/md_k.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_MD
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Different major versions are not compatible.
|
* Different major versions are not compatible.
|
||||||
* Different minor versions are only downward compatible.
|
* Different minor versions are only downward compatible.
|
||||||
|
@ -95,5 +97,6 @@ extern void md_new_event(mddev_t *mddev);
|
||||||
|
|
||||||
extern void md_update_sb(mddev_t * mddev);
|
extern void md_update_sb(mddev_t * mddev);
|
||||||
|
|
||||||
|
#endif /* CONFIG_MD */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
/* and dm-bio-list.h is not under include/linux because.... ??? */
|
/* and dm-bio-list.h is not under include/linux because.... ??? */
|
||||||
#include "../../../drivers/md/dm-bio-list.h"
|
#include "../../../drivers/md/dm-bio-list.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
||||||
#define LEVEL_MULTIPATH (-4)
|
#define LEVEL_MULTIPATH (-4)
|
||||||
#define LEVEL_LINEAR (-1)
|
#define LEVEL_LINEAR (-1)
|
||||||
#define LEVEL_FAULTY (-5)
|
#define LEVEL_FAULTY (-5)
|
||||||
|
@ -362,5 +364,6 @@ static inline void safe_put_page(struct page *p)
|
||||||
if (p) put_page(p);
|
if (p) put_page(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
#include <scsi/scsi_device.h>
|
#include <scsi/scsi_device.h>
|
||||||
#include <scsi/scsi_host.h>
|
#include <scsi/scsi_host.h>
|
||||||
|
|
||||||
|
|
||||||
#define MSG_SIMPLE_TAG 0x20
|
#define MSG_SIMPLE_TAG 0x20
|
||||||
#define MSG_HEAD_TAG 0x21
|
#define MSG_HEAD_TAG 0x21
|
||||||
#define MSG_ORDERED_TAG 0x22
|
#define MSG_ORDERED_TAG 0x22
|
||||||
|
@ -14,6 +13,7 @@
|
||||||
#define SCSI_NO_TAG (-1) /* identify no tag in use */
|
#define SCSI_NO_TAG (-1) /* identify no tag in use */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* scsi_get_tag_type - get the type of tag the device supports
|
* scsi_get_tag_type - get the type of tag the device supports
|
||||||
|
@ -144,4 +144,5 @@ static inline int scsi_init_shared_tag_map(struct Scsi_Host *shost, int depth)
|
||||||
return shost->bqt ? 0 : -ENOMEM;
|
return shost->bqt ? 0 : -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_BLOCK */
|
||||||
#endif /* _SCSI_SCSI_TCQ_H */
|
#endif /* _SCSI_SCSI_TCQ_H */
|
||||||
|
|
|
@ -92,7 +92,7 @@ config LOCALVERSION_AUTO
|
||||||
|
|
||||||
config SWAP
|
config SWAP
|
||||||
bool "Support for paging of anonymous memory (swap)"
|
bool "Support for paging of anonymous memory (swap)"
|
||||||
depends on MMU
|
depends on MMU && BLOCK
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This option allows you to choose whether you want to have support
|
This option allows you to choose whether you want to have support
|
||||||
|
|
|
@ -285,7 +285,11 @@ void __init mount_block_root(char *name, int flags)
|
||||||
{
|
{
|
||||||
char *fs_names = __getname();
|
char *fs_names = __getname();
|
||||||
char *p;
|
char *p;
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
char b[BDEVNAME_SIZE];
|
char b[BDEVNAME_SIZE];
|
||||||
|
#else
|
||||||
|
const char *b = name;
|
||||||
|
#endif
|
||||||
|
|
||||||
get_fs_names(fs_names);
|
get_fs_names(fs_names);
|
||||||
retry:
|
retry:
|
||||||
|
@ -304,7 +308,9 @@ retry:
|
||||||
* Allow the user to distinguish between failed sys_open
|
* Allow the user to distinguish between failed sys_open
|
||||||
* and bad superblock on root device.
|
* and bad superblock on root device.
|
||||||
*/
|
*/
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
__bdevname(ROOT_DEV, b);
|
__bdevname(ROOT_DEV, b);
|
||||||
|
#endif
|
||||||
printk("VFS: Cannot open root device \"%s\" or %s\n",
|
printk("VFS: Cannot open root device \"%s\" or %s\n",
|
||||||
root_device_name, b);
|
root_device_name, b);
|
||||||
printk("Please append a correct \"root=\" boot option\n");
|
printk("Please append a correct \"root=\" boot option\n");
|
||||||
|
@ -316,7 +322,10 @@ retry:
|
||||||
for (p = fs_names; *p; p += strlen(p)+1)
|
for (p = fs_names; *p; p += strlen(p)+1)
|
||||||
printk(" %s", p);
|
printk(" %s", p);
|
||||||
printk("\n");
|
printk("\n");
|
||||||
panic("VFS: Unable to mount root fs on %s", __bdevname(ROOT_DEV, b));
|
#ifdef CONFIG_BLOCK
|
||||||
|
__bdevname(ROOT_DEV, b);
|
||||||
|
#endif
|
||||||
|
panic("VFS: Unable to mount root fs on %s", b);
|
||||||
out:
|
out:
|
||||||
putname(fs_names);
|
putname(fs_names);
|
||||||
}
|
}
|
||||||
|
@ -387,8 +396,10 @@ void __init mount_root(void)
|
||||||
change_floppy("root floppy");
|
change_floppy("root floppy");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
create_dev("/dev/root", ROOT_DEV);
|
create_dev("/dev/root", ROOT_DEV);
|
||||||
mount_block_root("/dev/root", root_mountflags);
|
mount_block_root("/dev/root", root_mountflags);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -134,3 +134,8 @@ cond_syscall(sys_madvise);
|
||||||
cond_syscall(sys_mremap);
|
cond_syscall(sys_mremap);
|
||||||
cond_syscall(sys_remap_file_pages);
|
cond_syscall(sys_remap_file_pages);
|
||||||
cond_syscall(compat_sys_move_pages);
|
cond_syscall(compat_sys_move_pages);
|
||||||
|
|
||||||
|
/* block-layer dependent */
|
||||||
|
cond_syscall(sys_bdflush);
|
||||||
|
cond_syscall(sys_ioprio_set);
|
||||||
|
cond_syscall(sys_ioprio_get);
|
||||||
|
|
|
@ -12,7 +12,7 @@ obj-y := bootmem.o filemap.o mempool.o oom_kill.o fadvise.o \
|
||||||
readahead.o swap.o truncate.o vmscan.o \
|
readahead.o swap.o truncate.o vmscan.o \
|
||||||
prio_tree.o util.o mmzone.o vmstat.o $(mmu-y)
|
prio_tree.o util.o mmzone.o vmstat.o $(mmu-y)
|
||||||
|
|
||||||
ifeq ($(CONFIG_MMU),y)
|
ifeq ($(CONFIG_MMU)$(CONFIG_BLOCK),yy)
|
||||||
obj-y += bounce.o
|
obj-y += bounce.o
|
||||||
endif
|
endif
|
||||||
obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o thrash.o
|
obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o thrash.o
|
||||||
|
|
|
@ -2020,6 +2020,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i
|
||||||
if (unlikely(*pos + *count > inode->i_sb->s_maxbytes))
|
if (unlikely(*pos + *count > inode->i_sb->s_maxbytes))
|
||||||
*count = inode->i_sb->s_maxbytes - *pos;
|
*count = inode->i_sb->s_maxbytes - *pos;
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
loff_t isize;
|
loff_t isize;
|
||||||
if (bdev_read_only(I_BDEV(inode)))
|
if (bdev_read_only(I_BDEV(inode)))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
@ -2031,6 +2032,9 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i
|
||||||
|
|
||||||
if (*pos + *count > isize)
|
if (*pos + *count > isize)
|
||||||
*count = isize - *pos;
|
*count = isize - *pos;
|
||||||
|
#else
|
||||||
|
return -EPERM;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -409,6 +409,7 @@ int migrate_page(struct address_space *mapping,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(migrate_page);
|
EXPORT_SYMBOL(migrate_page);
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
/*
|
/*
|
||||||
* Migration function for pages with buffers. This function can only be used
|
* Migration function for pages with buffers. This function can only be used
|
||||||
* if the underlying filesystem guarantees that no other references to "page"
|
* if the underlying filesystem guarantees that no other references to "page"
|
||||||
|
@ -466,6 +467,7 @@ int buffer_migrate_page(struct address_space *mapping,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(buffer_migrate_page);
|
EXPORT_SYMBOL(buffer_migrate_page);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Writeback a page to clean the dirty state
|
* Writeback a page to clean the dirty state
|
||||||
|
|
|
@ -807,9 +807,11 @@ int fastcall set_page_dirty(struct page *page)
|
||||||
|
|
||||||
if (likely(mapping)) {
|
if (likely(mapping)) {
|
||||||
int (*spd)(struct page *) = mapping->a_ops->set_page_dirty;
|
int (*spd)(struct page *) = mapping->a_ops->set_page_dirty;
|
||||||
if (spd)
|
#ifdef CONFIG_BLOCK
|
||||||
return (*spd)(page);
|
if (!spd)
|
||||||
return __set_page_dirty_buffers(page);
|
spd = __set_page_dirty_buffers;
|
||||||
|
#endif
|
||||||
|
return (*spd)(page);
|
||||||
}
|
}
|
||||||
if (!PageDirty(page)) {
|
if (!PageDirty(page)) {
|
||||||
if (!TestSetPageDirty(page))
|
if (!TestSetPageDirty(page))
|
||||||
|
|
|
@ -35,8 +35,10 @@ void do_invalidatepage(struct page *page, unsigned long offset)
|
||||||
{
|
{
|
||||||
void (*invalidatepage)(struct page *, unsigned long);
|
void (*invalidatepage)(struct page *, unsigned long);
|
||||||
invalidatepage = page->mapping->a_ops->invalidatepage;
|
invalidatepage = page->mapping->a_ops->invalidatepage;
|
||||||
|
#ifdef CONFIG_BLOCK
|
||||||
if (!invalidatepage)
|
if (!invalidatepage)
|
||||||
invalidatepage = block_invalidatepage;
|
invalidatepage = block_invalidatepage;
|
||||||
|
#endif
|
||||||
if (invalidatepage)
|
if (invalidatepage)
|
||||||
(*invalidatepage)(page, offset);
|
(*invalidatepage)(page, offset);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue