diff options
| -rw-r--r-- | fs/squashfs/Kconfig | 22 | ||||
| -rw-r--r-- | fs/squashfs/squashfs_fs.h | 7 | ||||
| -rw-r--r-- | fs/squashfs/super.c | 2 |
3 files changed, 30 insertions, 1 deletions
diff --git a/fs/squashfs/Kconfig b/fs/squashfs/Kconfig index 048b59d5b2f0..c70111ebefd4 100644 --- a/fs/squashfs/Kconfig +++ b/fs/squashfs/Kconfig | |||
| @@ -78,6 +78,28 @@ config SQUASHFS_XZ | |||
| 78 | 78 | ||
| 79 | If unsure, say N. | 79 | If unsure, say N. |
| 80 | 80 | ||
| 81 | config SQUASHFS_4K_DEVBLK_SIZE | ||
| 82 | bool "Use 4K device block size?" | ||
| 83 | depends on SQUASHFS | ||
| 84 | help | ||
| 85 | By default Squashfs sets the dev block size (sb_min_blocksize) | ||
| 86 | to 1K or the smallest block size supported by the block device | ||
| 87 | (if larger). This, because blocks are packed together and | ||
| 88 | unaligned in Squashfs, should reduce latency. | ||
| 89 | |||
| 90 | This, however, gives poor performance on MTD NAND devices where | ||
| 91 | the optimal I/O size is 4K (even though the devices can support | ||
| 92 | smaller block sizes). | ||
| 93 | |||
| 94 | Using a 4K device block size may also improve overall I/O | ||
| 95 | performance for some file access patterns (e.g. sequential | ||
| 96 | accesses of files in filesystem order) on all media. | ||
| 97 | |||
| 98 | Setting this option will force Squashfs to use a 4K device block | ||
| 99 | size by default. | ||
| 100 | |||
| 101 | If unsure, say N. | ||
| 102 | |||
| 81 | config SQUASHFS_EMBEDDED | 103 | config SQUASHFS_EMBEDDED |
| 82 | bool "Additional option for memory-constrained systems" | 104 | bool "Additional option for memory-constrained systems" |
| 83 | depends on SQUASHFS | 105 | depends on SQUASHFS |
diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h index b4a4e539a08c..e8e14645de9a 100644 --- a/fs/squashfs/squashfs_fs.h +++ b/fs/squashfs/squashfs_fs.h | |||
| @@ -36,6 +36,13 @@ | |||
| 36 | #define SQUASHFS_FILE_SIZE 131072 | 36 | #define SQUASHFS_FILE_SIZE 131072 |
| 37 | #define SQUASHFS_FILE_LOG 17 | 37 | #define SQUASHFS_FILE_LOG 17 |
| 38 | 38 | ||
| 39 | /* default size of block device I/O */ | ||
| 40 | #ifdef CONFIG_SQUASHFS_4K_DEVBLK_SIZE | ||
| 41 | #define SQUASHFS_DEVBLK_SIZE 4096 | ||
| 42 | #else | ||
| 43 | #define SQUASHFS_DEVBLK_SIZE 1024 | ||
| 44 | #endif | ||
| 45 | |||
| 39 | #define SQUASHFS_FILE_MAX_SIZE 1048576 | 46 | #define SQUASHFS_FILE_MAX_SIZE 1048576 |
| 40 | #define SQUASHFS_FILE_MAX_LOG 20 | 47 | #define SQUASHFS_FILE_MAX_LOG 20 |
| 41 | 48 | ||
diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c index 7438850c62d0..2da1715452ac 100644 --- a/fs/squashfs/super.c +++ b/fs/squashfs/super.c | |||
| @@ -95,7 +95,7 @@ static int squashfs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 95 | } | 95 | } |
| 96 | msblk = sb->s_fs_info; | 96 | msblk = sb->s_fs_info; |
| 97 | 97 | ||
| 98 | msblk->devblksize = sb_min_blocksize(sb, BLOCK_SIZE); | 98 | msblk->devblksize = sb_min_blocksize(sb, SQUASHFS_DEVBLK_SIZE); |
| 99 | msblk->devblksize_log2 = ffz(~msblk->devblksize); | 99 | msblk->devblksize_log2 = ffz(~msblk->devblksize); |
| 100 | 100 | ||
| 101 | mutex_init(&msblk->read_data_mutex); | 101 | mutex_init(&msblk->read_data_mutex); |
