mirror of
https://github.com/versity/scoutfs.git
synced 2026-04-30 18:05:43 +00:00
Since v4.6-rc3-29-g6192269444eb there has been a special readdir VFS method that can be called for the same directory multiple times in parallel, without any additional VFS locking. The VFS has provided a WRAP_DIR_ITER() macro to re-wrap the method with extra locking, in case the method wasn't safe for this. With el10, the old .readdir method is now gone, and we have no choice but to either use the wrapper, or just hook up our readdir() method to the .iterate_shared op. From what I can see, our implementation is safe to do this. Signed-off-by: Auke Kok <auke.kok@versity.com>
618 lines
17 KiB
Makefile
618 lines
17 KiB
Makefile
#
|
|
# We try to detect the specific api incompatibilities with simple tests
|
|
# because distros regularly backport features without changing the
|
|
# version.
|
|
#
|
|
|
|
ccflags-y += -include $(src)/kernelcompat.h
|
|
|
|
#
|
|
# v3.18-rc2-19-gb5ae6b15bd73
|
|
#
|
|
# Folds d_materialise_unique into d_splice_alias. Note reversal
|
|
# of arguments (Also note Documentation/filesystems/porting.rst)
|
|
#
|
|
ifneq (,$(shell grep 'd_materialise_unique' include/linux/dcache.h))
|
|
ccflags-y += -DKC_D_MATERIALISE_UNIQUE=1
|
|
endif
|
|
|
|
#
|
|
# RHEL extended the fop struct so to use it we have to set
|
|
# a flag to indicate that the struct is large enough and
|
|
# contains the pointer.
|
|
#
|
|
ifneq (,$(shell grep 'FMODE_KABI_ITERATE' include/linux/fs.h))
|
|
ccflags-y += -DKC_FMODE_KABI_ITERATE
|
|
endif
|
|
|
|
#
|
|
# v4.7-rc2-23-g0d4d717f2583
|
|
#
|
|
# Added user_ns argument to posix_acl_valid
|
|
#
|
|
ifneq (,$(shell grep 'posix_acl_valid.*user_namespace' include/linux/posix_acl.h))
|
|
ccflags-y += -DKC_POSIX_ACL_VALID_USER_NS
|
|
endif
|
|
|
|
#
|
|
# v5.3-12296-g6d2052d188d9
|
|
#
|
|
# The RBCOMPUTE function is now passed an extra flag, and should return a bool
|
|
# to indicate whether the propagated callback should stop or not.
|
|
#
|
|
ifneq (,$(shell grep 'static inline bool RBNAME.*_compute_max' include/linux/rbtree_augmented.h))
|
|
ccflags-y += -DKC_RB_TREE_AUGMENTED_COMPUTE_MAX
|
|
endif
|
|
|
|
#
|
|
# v3.13-25-g37bc15392a23
|
|
#
|
|
# Renames posix_acl_create to __posix_acl_create and provide some
|
|
# new interfaces for creating ACLs
|
|
#
|
|
ifneq (,$(shell grep '__posix_acl_create' include/linux/posix_acl.h))
|
|
ccflags-y += -DKC___POSIX_ACL_CREATE
|
|
endif
|
|
|
|
#
|
|
# v4.8-rc1-29-g31051c85b5e2
|
|
#
|
|
# inode_change_ok() removed - replace with setattr_prepare()
|
|
# v5.11-rc4-7-g2f221d6f7b88 removes extern attribute
|
|
#
|
|
ifneq (,$(shell grep 'int setattr_prepare' include/linux/fs.h))
|
|
ccflags-y += -DKC_SETATTR_PREPARE
|
|
endif
|
|
|
|
#
|
|
# v4.15-rc3-4-gae5e165d855d
|
|
#
|
|
# linux/iversion.h needs to manually be included for code that
|
|
# manipulates this field.
|
|
#
|
|
ifneq (,$(shell grep -s 'define _LINUX_IVERSION_H' include/linux/iversion.h))
|
|
ccflags-y += -DKC_NEED_LINUX_IVERSION_H=1
|
|
endif
|
|
|
|
# v4.11-12447-g104b4e5139fe
|
|
#
|
|
# Renamed __percpu_counter_add to percpu_counter_add_batch to clarify
|
|
# that the __ wasn't less safe, just took an extra parameter.
|
|
#
|
|
ifneq (,$(shell grep 'percpu_counter_add_batch' include/linux/percpu_counter.h))
|
|
ccflags-y += -DKC_PERCPU_COUNTER_ADD_BATCH
|
|
endif
|
|
|
|
#
|
|
# v4.11-4550-g7dea19f9ee63
|
|
#
|
|
# Introduced memalloc_nofs_{save,restore} preferred instead of _noio_.
|
|
#
|
|
ifneq (,$(shell grep 'memalloc_nofs_save' include/linux/sched/mm.h))
|
|
ccflags-y += -DKC_MEMALLOC_NOFS_SAVE
|
|
endif
|
|
|
|
#
|
|
# v4.7-12414-g1eff9d322a44
|
|
#
|
|
# Renamed bi_rw to bi_opf to force old code to catch up. We use it as a
|
|
# single switch between old and new bio structures.
|
|
#
|
|
ifneq (,$(shell grep 'bi_opf' include/linux/blk_types.h))
|
|
ccflags-y += -DKC_BIO_BI_OPF
|
|
endif
|
|
|
|
#
|
|
# v4.12-rc2-201-g4e4cbee93d56
|
|
#
|
|
# Moves to bi_status BLK_STS_ API instead of having a mix of error
|
|
# end_io args or bi_error.
|
|
#
|
|
ifneq (,$(shell grep 'bi_status' include/linux/blk_types.h))
|
|
ccflags-y += -DKC_BIO_BI_STATUS
|
|
endif
|
|
|
|
#
|
|
# v3.11-8765-ga0b02131c5fc
|
|
#
|
|
# Remove the old ->shrink() API, ->{scan,count}_objects is preferred.
|
|
#
|
|
ifneq (,$(shell grep '(*shrink)' include/linux/shrinker.h))
|
|
ccflags-y += -DKC_SHRINKER_SHRINK
|
|
endif
|
|
|
|
#
|
|
# v3.19-4777-g6bec00352861
|
|
#
|
|
# backing_dev_info is removed from address_space. Instead we need to use
|
|
# inode_to_bdi() inline from <backing-dev.h>.
|
|
#
|
|
ifneq (,$(shell grep 'struct backing_dev_info.*backing_dev_info' include/linux/fs.h))
|
|
ccflags-y += -DKC_LINUX_BACKING_DEV_INFO=1
|
|
endif
|
|
|
|
#
|
|
# v4.3-9290-ge409de992e3e
|
|
#
|
|
# xattr handlers are now passed a struct that contains `flags`
|
|
#
|
|
ifneq (,$(shell grep 'int...get..const struct xattr_handler.*struct dentry.*dentry,' include/linux/xattr.h))
|
|
ccflags-y += -DKC_XATTR_STRUCT_XATTR_HANDLER=1
|
|
endif
|
|
|
|
#
|
|
# v4.16-rc1-1-g9b2c45d479d0
|
|
#
|
|
# kernel_getsockname() and kernel_getpeername dropped addrlen arg
|
|
#
|
|
ifneq (,$(shell grep 'kernel_getsockname.*,$$' include/linux/net.h))
|
|
ccflags-y += -DKC_KERNEL_GETSOCKNAME_ADDRLEN=1
|
|
endif
|
|
|
|
#
|
|
# v4.1-rc1-410-geeb1bd5c40ed
|
|
#
|
|
# Adds a struct net parameter to sock_create_kern
|
|
#
|
|
ifneq (,$(shell grep 'sock_create_kern.*struct net' include/linux/net.h))
|
|
ccflags-y += -DKC_SOCK_CREATE_KERN_NET=1
|
|
endif
|
|
|
|
#
|
|
# v4.17-rc6-7-g95582b008388
|
|
#
|
|
# Kernel has current_time(inode) to uniformly retreive timespec in the right unit
|
|
#
|
|
ifneq (,$(shell grep 'struct timespec64 current_time' include/linux/fs.h))
|
|
ccflags-y += -DKC_CURRENT_TIME_INODE=1
|
|
endif
|
|
|
|
#
|
|
# v4.9-12228-g530e9b76ae8f
|
|
#
|
|
# register_cpu_notifier and family were all removed and to be
|
|
# replaced with cpuhp_* API calls.
|
|
#
|
|
ifneq (,$(shell grep 'define register_hotcpu_notifier' include/linux/cpu.h))
|
|
ccflags-y += -DKC_CPU_NOTIFIER
|
|
endif
|
|
|
|
#
|
|
# v3.14-rc8-130-gccad2365668f
|
|
#
|
|
# generic_file_buffered_write is removed, backport it
|
|
#
|
|
ifneq (,$(shell grep 'extern ssize_t generic_file_buffered_write' include/linux/fs.h))
|
|
ccflags-y += -DKC_GENERIC_FILE_BUFFERED_WRITE=1
|
|
endif
|
|
|
|
#
|
|
# v5.7-438-g8151b4c8bee4
|
|
#
|
|
# struct address_space_operations switches away from .readpages to .readahead
|
|
#
|
|
# RHEL has backported this feature all the way to RHEL8, as part of RHEL_KABI,
|
|
# which means we need to detect this very precisely
|
|
#
|
|
ifneq (,$(shell grep 'readahead.*struct readahead_control' include/linux/fs.h))
|
|
ccflags-y += -DKC_FILE_AOPS_READAHEAD
|
|
endif
|
|
|
|
#
|
|
# v4.0-rc7-1743-g8436318205b9
|
|
#
|
|
# .aio_read and .aio_write no longer exist. All reads and writes now use the
|
|
# .read_iter and .write_iter methods, or must implement .read and .write (which
|
|
# we don't).
|
|
#
|
|
ifneq (,$(shell grep 'ssize_t.*aio_read' include/linux/fs.h))
|
|
ccflags-y += -DKC_LINUX_HAVE_FOP_AIO_READ=1
|
|
endif
|
|
|
|
#
|
|
# rhel7 has a custom inode_operations_wrapper struct that is discarded
|
|
# entirely in favor of upstream structure since rhel8.
|
|
#
|
|
ifneq (,$(shell grep 'void.*follow_link.*struct dentry' include/linux/fs.h))
|
|
ccflags-y += -DKC_LINUX_HAVE_RHEL_IOPS_WRAPPER=1
|
|
endif
|
|
|
|
ifneq (,$(shell grep 'size_t.*ki_left;' include/linux/aio.h))
|
|
ccflags-y += -DKC_LINUX_AIO_KI_LEFT=1
|
|
endif
|
|
|
|
#
|
|
# v4.4-rc4-4-g98e9cb5711c6
|
|
#
|
|
# Introduces a new xattr_handler .name member that can be used to match the
|
|
# entire field, instead of just a prefix. For these kernels, we must use
|
|
# the new .name field instead.
|
|
ifneq (,$(shell grep 'static inline const char .xattr_prefix' include/linux/xattr.h))
|
|
ccflags-y += -DKC_XATTR_HANDLER_NAME=1
|
|
endif
|
|
|
|
#
|
|
# v5.19-rc4-96-g342a72a33407
|
|
#
|
|
# Adds `typedef __u32 __bitwise blk_opf_t` to aid flag checking
|
|
ifneq (,$(shell grep 'typedef __u32 __bitwise blk_opf_t' include/linux/blk_types.h))
|
|
ccflags-y += -DKC_HAVE_BLK_OPF_T=1
|
|
endif
|
|
|
|
#
|
|
# v5.12-rc6-9-g4f0f586bf0c8
|
|
#
|
|
# list_sort cmp function takes const list_head args
|
|
ifneq (,$(shell grep 'const struct list_head ., const struct list_head .' include/linux/list_sort.h))
|
|
ccflags-y += -DKC_LIST_CMP_CONST_ARG_LIST_HEAD
|
|
endif
|
|
|
|
# v5.7-523-g88dca4ca5a93
|
|
#
|
|
# The pgprot argument to vmalloc is always PAGE_KERNEL, so it is removed.
|
|
ifneq (,$(shell grep 'extern void .__vmalloc.unsigned long size, gfp_t gfp_mask, pgprot_t prot' include/linux/vmalloc.h))
|
|
ccflags-y += -DKC_VMALLOC_PGPROT_T
|
|
endif
|
|
|
|
# v6.2-rc1-18-g01beba7957a2
|
|
#
|
|
# fs: port inode_owner_or_capable() to mnt_idmap
|
|
ifneq (,$(shell grep 'bool inode_owner_or_capable.struct user_namespace .mnt_userns' include/linux/fs.h))
|
|
ccflags-y += -DKC_INODE_OWNER_OR_CAPABLE_USERNS
|
|
endif
|
|
|
|
#
|
|
# v5.11-rc4-5-g47291baa8ddf
|
|
#
|
|
# namei: make permission helpers idmapped mount aware
|
|
ifneq (,$(shell grep 'int inode_permission.struct user_namespace' include/linux/fs.h))
|
|
ccflags-y += -DKC_INODE_PERMISSION_USERNS
|
|
endif
|
|
|
|
#
|
|
# v5.11-rc4-24-g549c7297717c
|
|
#
|
|
# fs: make helpers idmap mount aware
|
|
# Enlarges the VFS API methods to include user namespace argument.
|
|
ifneq (,$(shell grep 'int ..mknod. .struct user_namespace' include/linux/fs.h))
|
|
ccflags-y += -DKC_VFS_METHOD_USER_NAMESPACE_ARG
|
|
endif
|
|
|
|
#
|
|
# v6.2-rc1-2-gabf08576afe3
|
|
#
|
|
# fs: vfs methods use struct mnt_idmap instead of struct user_namespace
|
|
ifneq (,$(shell grep 'int vfs_mknod.struct mnt_idmap' include/linux/fs.h))
|
|
ccflags-y += -DKC_VFS_METHOD_MNT_IDMAP_ARG
|
|
endif
|
|
|
|
#
|
|
# v5.17-rc2-21-g07888c665b40
|
|
#
|
|
# Detect new style bio_alloc - pass bdev and opf.
|
|
ifneq (,$(shell grep 'struct bio .bio_alloc.struct block_device .bdev' include/linux/bio.h))
|
|
ccflags-y += -DKC_BIO_ALLOC_DEV_OPF_ARGS
|
|
endif
|
|
|
|
#
|
|
# v5.7-rc4-53-gcddf8a2c4a82
|
|
#
|
|
# fiemap_prep() replaces fiemap_check_flags()
|
|
ifneq (,$(shell grep -s 'int fiemap_prep.struct inode' include/linux/fiemap.h))
|
|
ccflags-y += -DKC_FIEMAP_PREP
|
|
endif
|
|
|
|
#
|
|
# v5.17-13043-g800ba29547e1
|
|
#
|
|
# generic_perform_write args use kiocb for passing filp and pos
|
|
ifneq (,$(shell grep 'ssize_t generic_perform_write.struct kiocb ., struct iov_iter' include/linux/fs.h))
|
|
ccflags-y += -DKC_GENERIC_PERFORM_WRITE_KIOCB_IOV_ITER
|
|
endif
|
|
|
|
#
|
|
# v5.7-rc6-2496-g76ee0785f42a
|
|
#
|
|
# net: add sock_set_sndtimeo
|
|
ifneq (,$(shell grep 'void sock_set_sndtimeo.struct sock' include/net/sock.h))
|
|
ccflags-y += -DKC_SOCK_SET_SNDTIMEO
|
|
endif
|
|
|
|
#
|
|
# v5.8-rc4-1931-gba423fdaa589
|
|
#
|
|
# setsockopt functions are now passed a sockptr_t value instead of char*
|
|
ifneq (,$(shell grep -s 'include .linux/sockptr.h.' include/linux/net.h))
|
|
ccflags-y += -DKC_SETSOCKOPT_SOCKPTR_T
|
|
endif
|
|
|
|
#
|
|
# v5.7-rc6-2507-g71c48eb81c9e
|
|
#
|
|
# Adds a bunch of low level TCP sock parameter functions that we want to use.
|
|
ifneq (,$(shell grep 'int tcp_sock_set_keepintvl' include/linux/tcp.h))
|
|
ccflags-y += -DKC_HAVE_TCP_SET_SOCKFN
|
|
endif
|
|
|
|
#
|
|
# v4.16-rc3-13-ga84d1169164b
|
|
#
|
|
# Fixes y2038 issues with struct timeval.
|
|
ifneq (,$(shell grep -s '^struct __kernel_old_timeval .' include/uapi/linux/time_types.h))
|
|
ccflags-y += -DKC_KERNEL_OLD_TIMEVAL_STRUCT
|
|
endif
|
|
|
|
#
|
|
# v5.19-rc4-52-ge33c267ab70d
|
|
#
|
|
# register_shrinker now requires a name, used for debug stats etc.
|
|
ifneq (,$(shell grep 'int __printf.*register_shrinker.struct shrinker .shrinker,' include/linux/shrinker.h))
|
|
ccflags-y += -DKC_SHRINKER_NAME
|
|
endif
|
|
|
|
#
|
|
# v5.18-rc5-246-gf132ab7d3ab0
|
|
#
|
|
# mpage_readpage() is now replaced with mpage_read_folio.
|
|
ifneq (,$(shell grep 'int mpage_read_folio.struct folio .folio' include/linux/mpage.h))
|
|
ccflags-y += -DKC_MPAGE_READ_FOLIO
|
|
endif
|
|
|
|
#
|
|
# v5.18-rc5-219-gb3992d1e2ebc
|
|
#
|
|
# block_write_begin() no longer is being passed aop_flags
|
|
ifneq (,$(shell grep -C1 'int block_write_begin' include/linux/buffer_head.h | tail -n 2 | grep 'unsigned flags'))
|
|
ccflags-y += -DKC_BLOCK_WRITE_BEGIN_AOP_FLAGS
|
|
endif
|
|
|
|
#
|
|
# v6.0-rc6-9-g863f144f12ad
|
|
#
|
|
# the .tmpfile() vfs method calling convention changed and now a struct
|
|
# file* is passed to this metiond instead of a dentry. The function also
|
|
# should open the created file and call finish_open_simple() before returning.
|
|
ifneq (,$(shell grep 'extern void d_tmpfile.struct dentry' include/linux/dcache.h))
|
|
ccflags-y += -DKC_D_TMPFILE_DENTRY
|
|
endif
|
|
|
|
#
|
|
# v6.4-rc2-201-g0733ad800291
|
|
#
|
|
# New blk_mode_t replaces abuse of fmode_t
|
|
ifneq (,$(shell grep 'typedef unsigned int __bitwise blk_mode_t' include/linux/blkdev.h))
|
|
ccflags-y += -DKC_HAVE_BLK_MODE_T
|
|
endif
|
|
|
|
#
|
|
# v6.4-rc2-186-g2736e8eeb0cc
|
|
#
|
|
# Reworks FMODE_EXCL kludge and instead modifies the blkdev_put() call to pass in
|
|
# the (exclusive) holder to implement FMODE_EXCL handling.
|
|
ifneq (,$(shell grep 'blkdev_put.struct block_device .bdev, void .holder' include/linux/blkdev.h))
|
|
ccflags-y += -DKC_BLKDEV_PUT_HOLDER_ARG
|
|
endif
|
|
|
|
#
|
|
# v6.4-rc4-163-g0d625446d0a4
|
|
#
|
|
# Entirely removes current->backing_dev_info to ultimately remove buffer_head
|
|
# completely at some point.
|
|
ifneq (,$(shell grep 'struct backing_dev_info.*backing_dev_info;' include/linux/sched.h))
|
|
ccflags-y += -DKC_CURRENT_BACKING_DEV_INFO
|
|
endif
|
|
|
|
#
|
|
# v6.8-rc1-4-gf3a608827d1f
|
|
#
|
|
# adds bdev_file_open_by_path() and later in v6.8-rc1-30-ge97d06a46526 removes bdev_open_by_path()
|
|
# which requires us to use the file method from now on.
|
|
ifneq (,$(shell grep 'struct file.*bdev_file_open_by_path.const char.*path' include/linux/blkdev.h))
|
|
ccflags-y += -DKC_BDEV_FILE_OPEN_BY_PATH
|
|
endif
|
|
|
|
# v4.0-rc7-1796-gfe0f07d08ee3
|
|
#
|
|
# direct-io changes modify inode_dio_done to now be called inode_dio_end
|
|
ifneq (,$(shell grep 'void inode_dio_end.struct inode' include/linux/fs.h))
|
|
ccflags-y += -DKC_INODE_DIO_END
|
|
endif
|
|
|
|
#
|
|
# v5.0-6476-g3d3539018d2c
|
|
#
|
|
# page fault handlers return a bitmask vm_fault_t instead
|
|
# Note: el8's header has a slightly modified prefix here
|
|
ifneq (,$(shell grep 'typedef.*__bitwise unsigned.*int vm_fault_t' include/linux/mm_types.h))
|
|
ccflags-y += -DKC_MM_VM_FAULT_T
|
|
endif
|
|
|
|
# v3.19-499-gd83a08db5ba6
|
|
#
|
|
# .remap pages becomes obsolete
|
|
ifneq (,$(shell grep 'int ..remap_pages..struct vm_area_struct' include/linux/mm.h))
|
|
ccflags-y += -DKC_MM_REMAP_PAGES
|
|
endif
|
|
|
|
#
|
|
# v3.19-4742-g503c358cf192
|
|
#
|
|
# list_lru_shrink_count() and list_lru_shrink_walk() introduced
|
|
#
|
|
ifneq (,$(shell grep 'list_lru_shrink_count.*struct list_lru' include/linux/list_lru.h))
|
|
ccflags-y += -DKC_LIST_LRU_SHRINK_COUNT_WALK
|
|
endif
|
|
|
|
#
|
|
# v3.19-4757-g3f97b163207c
|
|
#
|
|
# lru_list_walk_cb lru arg added
|
|
#
|
|
ifneq (,$(shell grep 'struct list_head \*item, spinlock_t \*lock, void \*cb_arg' include/linux/list_lru.h))
|
|
ccflags-y += -DKC_LIST_LRU_WALK_CB_ITEM_LOCK
|
|
endif
|
|
|
|
#
|
|
# v6.7-rc4-153-g0a97c01cd20b
|
|
#
|
|
# list_lru_{add,del} -> list_lru_{add,del}_obj
|
|
#
|
|
ifneq (,$(shell grep '^bool list_lru_add_obj' include/linux/list_lru.h))
|
|
ccflags-y += -DKC_LIST_LRU_ADD_OBJ
|
|
endif
|
|
|
|
#
|
|
# v6.12-rc6-227-gda0c02516c50
|
|
#
|
|
# lru_list_walk_cb lock arg removed
|
|
#
|
|
ifneq (,$(shell grep 'struct list_lru_one \*list, spinlock_t \*lock, void \*cb_arg' include/linux/list_lru.h))
|
|
ccflags-y += -DKC_LIST_LRU_WALK_CB_LIST_LOCK
|
|
endif
|
|
|
|
#
|
|
# v5.1-rc4-273-ge9b98e162aa5
|
|
#
|
|
# introduce stack trace helpers
|
|
#
|
|
ifneq (,$(shell grep '^unsigned int stack_trace_save' include/linux/stacktrace.h))
|
|
ccflags-y += -DKC_STACK_TRACE_SAVE
|
|
endif
|
|
|
|
#
|
|
# v6.1-rc1-2-g138060ba92b3
|
|
#
|
|
# set_acl now passed a struct dentry instead of inode.
|
|
#
|
|
ifneq (,$(shell grep 'int ..set_acl.*struct dentry' include/linux/fs.h))
|
|
ccflags-y += -DKC_SET_ACL_DENTRY
|
|
endif
|
|
|
|
#
|
|
# v6.1-rc1-3-gcac2f8b8d8b5
|
|
#
|
|
# get_acl renamed to get_inode_acl.
|
|
#
|
|
ifneq (,$(shell grep 'struct posix_acl.*get_inode_acl' include/linux/fs.h))
|
|
ccflags-y += -DKC_GET_INODE_ACL
|
|
endif
|
|
|
|
#
|
|
# v6.1-rc5-2-ge9a688bcb193
|
|
#
|
|
# get_random_u32_below() implementation
|
|
ifneq (,$(shell grep 'u32 get_random_u32_below' include/linux/random.h))
|
|
ccflags-y += -DKC_HAVE_GET_RANDOM_U32_BELOW
|
|
endif
|
|
|
|
# v6.5-rc1-7-g9b6304c1d537
|
|
#
|
|
# ctime accessor methods
|
|
ifneq (,$(shell grep 'timespec64 inode_set_ctime_current' include/linux/fs.h))
|
|
ccflags-y += -DKC_FS_INODE_C_TIME_ACCESSOR
|
|
endif
|
|
|
|
#
|
|
# v6.6-rc5-1-g077c212f0344
|
|
#
|
|
# Must use access methods from fs.h to get to inode ctime/mtime/atime
|
|
ifneq (,$(shell grep 'inline time64_t inode_get_atime_sec' include/linux/fs.h))
|
|
ccflags-y += -DKC_FS_INODE_AM_TIME_ACCESSOR
|
|
endif
|
|
|
|
#
|
|
# v6.12-rc1-3-g5f60d5f6bbc1
|
|
#
|
|
# asm/unaligned.h replaced with linux/unaligned.h
|
|
ifneq (,$(shell grep -s 'define __LINUX_UNALIGNED_H' include/linux/unaligned.h))
|
|
ccflags-y += -DKC_HAVE__LINUX_UNALIGNED_H
|
|
endif
|
|
|
|
#
|
|
# v6.9-rc4-29-g203c1ce0bb06
|
|
#
|
|
# RIP bd_inode. (note, struct moved between headers!)
|
|
ifneq (,$(shell grep -s 'struct inode.*bd_inode' include/linux/blk_types.h include/linux/fs.h))
|
|
ccflags-y += -DKC_HAVE_BD_INODE
|
|
endif
|
|
|
|
#
|
|
# v6.8-9146-gc759e609030c
|
|
#
|
|
# Removes __assign_str_len() and removes the 2nd param of __assign_str().
|
|
ifneq (,$(shell grep -s 'define __assign_str.dst, src' \
|
|
include/trace/trace_events.h \
|
|
include/trace/ftrace.h \
|
|
include/trace/stages/stage6_event_callback.h))
|
|
ccflags-y += -DKC_HAVE_ASSIGN_STR_PARMS
|
|
endif
|
|
|
|
#
|
|
# v6.5-113-g615e95831ec3
|
|
#
|
|
ifneq (,$(shell grep 'generic_fillattr..*,.u32,' include/linux/fs.h))
|
|
ccflags-y += -DKC_GENERIC_FILLATTR_REQUEST_MASK
|
|
endif
|
|
|
|
#
|
|
# v6.6-rc4-53-gc42d50aefd17
|
|
#
|
|
# el10 yet again modifies the shrinker API significantly, breaking our current
|
|
# implementation.
|
|
ifneq (,$(shell grep 'struct shrinker .shrinker_alloc' include/linux/shrinker.h))
|
|
ccflags-y += -DKC_SHRINKER_ALLOC
|
|
endif
|
|
|
|
#
|
|
# v6.9-rc4-8-gead083aeeed9
|
|
#
|
|
# set_blocksize() now has a struct file arg.
|
|
ifneq (,$(shell grep -s 'int set_blocksize.struct file' include/linux/blkdev.h))
|
|
ccflags-y += -DKC_BLKDEV_SET_BLOCKSIZE_FILE
|
|
endif
|
|
|
|
#
|
|
# v5.1-rc3-29-gaa30f47cf666
|
|
#
|
|
# struct kobj_type now has member `default_groups`
|
|
ifneq (,$(shell grep 'const struct attribute_group ..default_groups;' include/linux/kobject.h))
|
|
ccflags-y += -DKC_KOBJECT_DEFAULT_GROUPS
|
|
endif
|
|
|
|
#
|
|
# v5.19-rc3-395-g67235182a41c
|
|
#
|
|
# Adds buffer_migrate_folio(), similar to other fss. Quote willy: "If the filesystem
|
|
# implements migrate_folio and writepages, there is no need for a writepage implementation."
|
|
ifneq (,$(shell grep 'int buffer_migrate_folio.struct address_space' include/linux/buffer_head.h))
|
|
ccflags-y += -DKC_HAVE_BUFFER_MIGRATE_FOLIO
|
|
endif
|
|
|
|
#
|
|
# v6.7-rc4-307-g17bf23a981be
|
|
#
|
|
# block_write_full_page() is replaced with block_write_full_folio(),
|
|
# but that isn't exported as it used to be (and the only users now
|
|
# are builtin). However, the kernel will fall back to using the
|
|
# .writepages method instead, so we can drop this method.
|
|
ifneq (,$(shell grep 'int block_write_full_page.struct page' include/linux/buffer_head.h))
|
|
ccflags-y += -DKC_HAVE_BLOCK_WRITE_FULL_PAGE
|
|
endif
|
|
|
|
#
|
|
# v6.4-rc2-29-gc6585011bc1d
|
|
#
|
|
# generic_file_splice_read is removed. It can be replaced with filemap_splice_read
|
|
# or copy_splice_read.
|
|
ifneq (,$(shell grep 'ssize_t generic_file_splice_read.struct file' include/linux/fs.h))
|
|
ccflags-y += -DKC_HAVE_GENERIC_FILE_SPLICE_READ
|
|
endif
|
|
|
|
#
|
|
# v4.6-rc3-29-g6192269444eb
|
|
#
|
|
# Adds .iterate_shared readdir() iterator vfs method.
|
|
ifneq (,$(shell grep 'iterate_shared...struct file.., struct dir_context' include/linux/fs.h))
|
|
ccflags-y += -DKC_HAVE_ITERATE_SHARED
|
|
endif
|