1# SPDX-License-Identifier: GPL-2.0-only
2#
3# File system configuration
4#
5
6menu "File systems"
7
8# Use unaligned word dcache accesses
9config DCACHE_WORD_ACCESS
10       bool
11
12config VALIDATE_FS_PARSER
13	bool "Validate filesystem parameter description"
14	help
15	  Enable this to perform validation of the parameter description for a
16	  filesystem when it is registered.
17
18config FS_IOMAP
19	bool
20
21config BUFFER_HEAD
22	bool
23
24# old blockdev_direct_IO implementation.  Use iomap for new code instead
25config LEGACY_DIRECT_IO
26	depends on BUFFER_HEAD
27	bool
28
29if BLOCK
30
31source "fs/ext2/Kconfig"
32source "fs/ext4/Kconfig"
33source "fs/jbd2/Kconfig"
34
35config FS_MBCACHE
36# Meta block cache for Extended Attributes (ext2/ext3/ext4)
37	tristate
38	default y if EXT2_FS=y && EXT2_FS_XATTR
39	default y if EXT4_FS=y
40	default m if EXT2_FS_XATTR || EXT4_FS
41
42source "fs/reiserfs/Kconfig"
43source "fs/jfs/Kconfig"
44
45source "fs/xfs/Kconfig"
46source "fs/gfs2/Kconfig"
47source "fs/ocfs2/Kconfig"
48source "fs/btrfs/Kconfig"
49source "fs/nilfs2/Kconfig"
50source "fs/f2fs/Kconfig"
51source "fs/zonefs/Kconfig"
52
53endif # BLOCK
54
55config FS_DAX
56	bool "File system based Direct Access (DAX) support"
57	depends on MMU
58	depends on !(ARM || MIPS || SPARC)
59	depends on ZONE_DEVICE || FS_DAX_LIMITED
60	select FS_IOMAP
61	select DAX
62	help
63	  Direct Access (DAX) can be used on memory-backed block devices.
64	  If the block device supports DAX and the filesystem supports DAX,
65	  then you can avoid using the pagecache to buffer I/Os.  Turning
66	  on this option will compile in support for DAX.
67
68	  For a DAX device to support file system access it needs to have
69	  struct pages.  For the nfit based NVDIMMs this can be enabled
70	  using the ndctl utility:
71
72		# ndctl create-namespace --force --reconfig=namespace0.0 \
73			--mode=fsdax --map=mem
74
75	  See the 'create-namespace' man page for details on the overhead of
76	  --map=mem:
77	  https://docs.pmem.io/ndctl-user-guide/ndctl-man-pages/ndctl-create-namespace
78
79          For ndctl to work CONFIG_DEV_DAX needs to be enabled as well. For most
80	  file systems DAX support needs to be manually enabled globally or
81	  per-inode using a mount option as well.  See the file documentation in
82	  Documentation/filesystems/dax.rst for details.
83
84	  If you do not have a block device that is capable of using this,
85	  or if unsure, say N.  Saying Y will increase the size of the kernel
86	  by about 5kB.
87
88config FS_DAX_PMD
89	bool
90	default FS_DAX
91	depends on FS_DAX
92	depends on ZONE_DEVICE
93	depends on TRANSPARENT_HUGEPAGE
94
95# Selected by DAX drivers that do not expect filesystem DAX to support
96# get_user_pages() of DAX mappings. I.e. "limited" indicates no support
97# for fork() of processes with MAP_SHARED mappings or support for
98# direct-I/O to a DAX mapping.
99config FS_DAX_LIMITED
100	bool
101
102# Posix ACL utility routines
103#
104# Note: Posix ACLs can be implemented without these helpers.  Never use
105# this symbol for ifdefs in core code.
106#
107config FS_POSIX_ACL
108	def_bool n
109
110config EXPORTFS
111	tristate
112
113config EXPORTFS_BLOCK_OPS
114	bool "Enable filesystem export operations for block IO"
115	help
116	  This option enables the export operations for a filesystem to support
117	  external block IO.
118
119config FILE_LOCKING
120	bool "Enable POSIX file locking API" if EXPERT
121	default y
122	help
123	  This option enables standard file locking support, required
124          for filesystems like NFS and for the flock() system
125          call. Disabling this option saves about 11k.
126
127source "fs/crypto/Kconfig"
128
129source "fs/verity/Kconfig"
130
131source "fs/notify/Kconfig"
132
133source "fs/quota/Kconfig"
134
135source "fs/autofs/Kconfig"
136source "fs/fuse/Kconfig"
137source "fs/overlayfs/Kconfig"
138
139menu "Caches"
140
141source "fs/netfs/Kconfig"
142source "fs/fscache/Kconfig"
143source "fs/cachefiles/Kconfig"
144
145endmenu
146
147if BLOCK
148menu "CD-ROM/DVD Filesystems"
149
150source "fs/isofs/Kconfig"
151source "fs/udf/Kconfig"
152
153endmenu
154endif # BLOCK
155
156if BLOCK
157menu "DOS/FAT/EXFAT/NT Filesystems"
158
159source "fs/fat/Kconfig"
160source "fs/exfat/Kconfig"
161source "fs/ntfs/Kconfig"
162source "fs/ntfs3/Kconfig"
163
164endmenu
165endif # BLOCK
166
167menu "Pseudo filesystems"
168
169source "fs/proc/Kconfig"
170source "fs/kernfs/Kconfig"
171source "fs/sysfs/Kconfig"
172
173config TMPFS
174	bool "Tmpfs virtual memory file system support (former shm fs)"
175	depends on SHMEM
176	select MEMFD_CREATE
177	help
178	  Tmpfs is a file system which keeps all files in virtual memory.
179
180	  Everything in tmpfs is temporary in the sense that no files will be
181	  created on your hard drive. The files live in memory and swap
182	  space. If you unmount a tmpfs instance, everything stored therein is
183	  lost.
184
185	  See <file:Documentation/filesystems/tmpfs.rst> for details.
186
187config TMPFS_POSIX_ACL
188	bool "Tmpfs POSIX Access Control Lists"
189	depends on TMPFS
190	select TMPFS_XATTR
191	select FS_POSIX_ACL
192	help
193	  POSIX Access Control Lists (ACLs) support additional access rights
194	  for users and groups beyond the standard owner/group/world scheme,
195	  and this option selects support for ACLs specifically for tmpfs
196	  filesystems.
197
198	  If you've selected TMPFS, it's possible that you'll also need
199	  this option as there are a number of Linux distros that require
200	  POSIX ACL support under /dev for certain features to work properly.
201	  For example, some distros need this feature for ALSA-related /dev
202	  files for sound to work properly.  In short, if you're not sure,
203	  say Y.
204
205config TMPFS_XATTR
206	bool "Tmpfs extended attributes"
207	depends on TMPFS
208	default n
209	help
210	  Extended attributes are name:value pairs associated with inodes by
211	  the kernel or by users (see the attr(5) manual page for details).
212
213	  This enables support for the trusted.*, security.* and user.*
214	  namespaces.
215
216	  You need this for POSIX ACL support on tmpfs.
217
218	  If unsure, say N.
219
220config TMPFS_INODE64
221	bool "Use 64-bit ino_t by default in tmpfs"
222	depends on TMPFS && 64BIT
223	default n
224	help
225	  tmpfs has historically used only inode numbers as wide as an unsigned
226	  int. In some cases this can cause wraparound, potentially resulting
227	  in multiple files with the same inode number on a single device. This
228	  option makes tmpfs use the full width of ino_t by default, without
229	  needing to specify the inode64 option when mounting.
230
231	  But if a long-lived tmpfs is to be accessed by 32-bit applications so
232	  ancient that opening a file larger than 2GiB fails with EINVAL, then
233	  the INODE64 config option and inode64 mount option risk operations
234	  failing with EOVERFLOW once 33-bit inode numbers are reached.
235
236	  To override this configured default, use the inode32 or inode64
237	  option when mounting.
238
239	  If unsure, say N.
240
241config TMPFS_QUOTA
242	bool "Tmpfs quota support"
243	depends on TMPFS
244	select QUOTA
245	help
246	  Quota support allows to set per user and group limits for tmpfs
247	  usage.  Say Y to enable quota support. Once enabled you can control
248	  user and group quota enforcement with quota, usrquota and grpquota
249	  mount options.
250
251	  If unsure, say N.
252
253config ARCH_SUPPORTS_HUGETLBFS
254	def_bool n
255
256config HUGETLBFS
257	bool "HugeTLB file system support"
258	depends on X86 || IA64 || SPARC64 || ARCH_SUPPORTS_HUGETLBFS || BROKEN
259	depends on (SYSFS || SYSCTL)
260	select MEMFD_CREATE
261	help
262	  hugetlbfs is a filesystem backing for HugeTLB pages, based on
263	  ramfs. For architectures that support it, say Y here and read
264	  <file:Documentation/admin-guide/mm/hugetlbpage.rst> for details.
265
266	  If unsure, say N.
267
268config HUGETLB_PAGE
269	def_bool HUGETLBFS
270
271config HUGETLB_PAGE_OPTIMIZE_VMEMMAP
272	def_bool HUGETLB_PAGE
273	depends on ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
274	depends on SPARSEMEM_VMEMMAP
275
276config HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON
277	bool "HugeTLB Vmemmap Optimization (HVO) defaults to on"
278	default n
279	depends on HUGETLB_PAGE_OPTIMIZE_VMEMMAP
280	help
281	  The HugeTLB VmemmapvOptimization (HVO) defaults to off. Say Y here to
282	  enable HVO by default. It can be disabled via hugetlb_free_vmemmap=off
283	  (boot command line) or hugetlb_optimize_vmemmap (sysctl).
284
285config ARCH_HAS_GIGANTIC_PAGE
286	bool
287
288source "fs/configfs/Kconfig"
289source "fs/efivarfs/Kconfig"
290
291endmenu
292
293menuconfig MISC_FILESYSTEMS
294	bool "Miscellaneous filesystems"
295	default y
296	help
297	  Say Y here to get to see options for various miscellaneous
298	  filesystems, such as filesystems that came from other
299	  operating systems.
300
301	  This option alone does not add any kernel code.
302
303	  If you say N, all options in this submenu will be skipped and
304	  disabled; if unsure, say Y here.
305
306if MISC_FILESYSTEMS
307
308source "fs/orangefs/Kconfig"
309source "fs/adfs/Kconfig"
310source "fs/affs/Kconfig"
311source "fs/ecryptfs/Kconfig"
312source "fs/hfs/Kconfig"
313source "fs/hfsplus/Kconfig"
314source "fs/befs/Kconfig"
315source "fs/bfs/Kconfig"
316source "fs/efs/Kconfig"
317source "fs/jffs2/Kconfig"
318# UBIFS File system configuration
319source "fs/ubifs/Kconfig"
320source "fs/cramfs/Kconfig"
321source "fs/squashfs/Kconfig"
322source "fs/freevxfs/Kconfig"
323source "fs/minix/Kconfig"
324source "fs/omfs/Kconfig"
325source "fs/hpfs/Kconfig"
326source "fs/qnx4/Kconfig"
327source "fs/qnx6/Kconfig"
328source "fs/romfs/Kconfig"
329source "fs/pstore/Kconfig"
330source "fs/sysv/Kconfig"
331source "fs/ufs/Kconfig"
332source "fs/erofs/Kconfig"
333source "fs/vboxsf/Kconfig"
334
335endif # MISC_FILESYSTEMS
336
337menuconfig NETWORK_FILESYSTEMS
338	bool "Network File Systems"
339	default y
340	depends on NET
341	help
342	  Say Y here to get to see options for network filesystems and
343	  filesystem-related networking code, such as NFS daemon and
344	  RPCSEC security modules.
345
346	  This option alone does not add any kernel code.
347
348	  If you say N, all options in this submenu will be skipped and
349	  disabled; if unsure, say Y here.
350
351if NETWORK_FILESYSTEMS
352
353source "fs/nfs/Kconfig"
354source "fs/nfsd/Kconfig"
355
356config GRACE_PERIOD
357	tristate
358
359config LOCKD
360	tristate
361	depends on FILE_LOCKING
362	select GRACE_PERIOD
363
364config LOCKD_V4
365	bool
366	depends on NFSD || NFS_V3
367	depends on FILE_LOCKING
368	default y
369
370config NFS_ACL_SUPPORT
371	tristate
372	select FS_POSIX_ACL
373
374config NFS_COMMON
375	bool
376	depends on NFSD || NFS_FS || LOCKD
377	default y
378
379config NFS_V4_2_SSC_HELPER
380	bool
381	default y if NFS_V4_2
382
383source "net/sunrpc/Kconfig"
384source "fs/ceph/Kconfig"
385
386source "fs/smb/Kconfig"
387source "fs/coda/Kconfig"
388source "fs/afs/Kconfig"
389source "fs/9p/Kconfig"
390
391endif # NETWORK_FILESYSTEMS
392
393source "fs/nls/Kconfig"
394source "fs/dlm/Kconfig"
395source "fs/unicode/Kconfig"
396
397config IO_WQ
398	bool
399
400endmenu
401