[packages/zfs] up to 2.2.2
atler
atler at pld-linux.org
Wed Dec 20 21:08:31 CET 2023
commit a477f632600a477172919c3df57c3ecea2ecd879
Author: Jan Palus <atler at pld-linux.org>
Date: Wed Dec 20 19:39:17 2023 +0100
up to 2.2.2
kernel-6.6.patch | 675 -------------------------------------------------------
zfs.spec | 24 +-
2 files changed, 12 insertions(+), 687 deletions(-)
---
diff --git a/zfs.spec b/zfs.spec
index ac71a0c..07a675f 100644
--- a/zfs.spec
+++ b/zfs.spec
@@ -30,14 +30,13 @@ exit 1
Summary: Native Linux port of the ZFS filesystem
Summary(pl.UTF-8): Natywny linuksowy port systemu plików ZFS
Name: %{pname}%{?_pld_builder:%{?with_kernel:-kernel}}%{_alt_kernel}
-Version: 2.2.0
+Version: 2.2.2
Release: %{rel}%{?_pld_builder:%{?with_kernel:@%{_kernel_ver_str}}}
License: CDDL
Group: Applications/System
Source0: https://github.com/openzfs/zfs/releases/download/zfs-%{version}/%{pname}-%{version}.tar.gz
-# Source0-md5: d7e2ec4c52d6a48653ce4a5b96c24a01
+# Source0-md5: bbfea5e8d22e7484150038668d0d410a
Patch0: initdir.patch
-Patch1: kernel-6.6.patch
URL: https://zfsonlinux.org/
BuildRequires: autoconf >= 2.50
BuildRequires: automake
@@ -274,21 +273,20 @@ p=`pwd`\
%prep
%setup -q -n %{pname}-%{version}
%patch0 -p1
-%patch1 -p1
%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+python3(\s|$),#!%{__python3}\1,' \
- cmd/arc_summary
+ cmd/arc_summary
%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+ at PYTHON_SHEBANG@(\s|$),#!%{__python3}\1,' \
- cmd/arcstat.in \
- cmd/dbufstat.in \
- cmd/zilstat.in
+ cmd/arcstat.in \
+ cmd/dbufstat.in \
+ cmd/zilstat.in
%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+bash(\s|$),#!/bin/bash\1,' \
- contrib/dracut/02zfsexpandknowledge/module-setup.sh.in \
- contrib/dracut/90zfs/module-setup.sh.in \
- scripts/zimport.sh \
- scripts/zloop.sh
+ contrib/dracut/02zfsexpandknowledge/module-setup.sh.in \
+ contrib/dracut/90zfs/module-setup.sh.in \
+ scripts/zimport.sh \
+ scripts/zloop.sh
%build
%{__libtoolize}
@@ -452,6 +450,7 @@ rm -rf $RPM_BUILD_ROOT
%attr(755,root,root) %{_libexecdir}/zfs/zpool.d/*
%dir %{_datadir}/zfs
%attr(755,root,root) %{_datadir}/zfs/*.sh
+%attr(755,root,root) %{_libexecdir}/zfs/zfs_prepare_disk
%attr(755,root,root) %{_libexecdir}/zfs/zpool_influxdb
%{_datadir}/zfs/compatibility.d
%{_mandir}/man1/arcstat.1*
@@ -511,6 +510,7 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man8/zfs-wait.8*
%{_mandir}/man8/zfs-zone.8*
%{_mandir}/man8/zfs_ids_to_path.8*
+%{_mandir}/man8/zfs_prepare_disk.8*
%{_mandir}/man8/zgenhostid.8*
%{_mandir}/man8/zinject.8*
%{_mandir}/man8/zpool.8*
diff --git a/kernel-6.6.patch b/kernel-6.6.patch
deleted file mode 100644
index a61f203..0000000
--- a/kernel-6.6.patch
+++ /dev/null
@@ -1,675 +0,0 @@
-From b37f29341b9aec1b6e45d55b6f7a1bc5b2723f7a Mon Sep 17 00:00:00 2001
-From: Coleman Kane <ckane at colemankane.org>
-Date: Mon, 11 Sep 2023 23:21:29 -0400
-Subject: [PATCH] Linux 6.6 compat: use inode_get/set_ctime*(...)
-
-In Linux commit 13bc24457850583a2e7203ded05b7209ab4bc5ef, direct access
-to the i_ctime member of struct inode was removed. The new approach is
-to use accessor methods that exclusively handle passing the timestamp
-around by value. This change adds new tests for each of these functions
-and introduces zpl_* equivalents in include/os/linux/zfs/sys/zpl.h. In
-where the inode_get/set_ctime*() functions exist, these zpl_* calls will
-be mapped to the new functions. On older kernels, these macros just wrap
-direct-access calls. The code that operated on an address of ip->i_ctime
-to call ZFS_TIME_DECODE() now will take a local copy using
-zpl_inode_get_ctime(), and then pass the address of the local copy when
-performing the ZFS_TIME_DECODE() call, in all cases, rather than
-directly accessing the member.
-
-Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
-Signed-off-by: Coleman Kane <ckane at colemankane.org>
-Closes #15263
-Closes #15257
----
- config/kernel-inode-times.m4 | 43 ++++++++++++++++++++++++++++++
- include/os/linux/zfs/sys/zpl.h | 11 ++++++++
- module/os/linux/zfs/zfs_ctldir.c | 2 +-
- module/os/linux/zfs/zfs_vnops_os.c | 12 ++++++---
- module/os/linux/zfs/zfs_znode.c | 18 ++++++++-----
- module/os/linux/zfs/zpl_inode.c | 2 +-
- module/os/linux/zfs/zpl_xattr.c | 7 ++---
- 7 files changed, 80 insertions(+), 15 deletions(-)
-
-diff --git a/config/kernel-inode-times.m4 b/config/kernel-inode-times.m4
-index 9c016c790081..412e13b47df5 100644
---- a/config/kernel-inode-times.m4
-+++ b/config/kernel-inode-times.m4
-@@ -27,6 +27,31 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_INODE_TIMES], [
- memset(&ip, 0, sizeof(ip));
- ts = ip.i_mtime;
- ])
-+
-+ dnl #
-+ dnl # 6.6 API change
-+ dnl # i_ctime no longer directly accessible, must use
-+ dnl # inode_get_ctime(ip), inode_set_ctime*(ip) to
-+ dnl # read/write.
-+ dnl #
-+ ZFS_LINUX_TEST_SRC([inode_get_ctime], [
-+ #include <linux/fs.h>
-+ ],[
-+ struct inode ip;
-+
-+ memset(&ip, 0, sizeof(ip));
-+ inode_get_ctime(&ip);
-+ ])
-+
-+ ZFS_LINUX_TEST_SRC([inode_set_ctime_to_ts], [
-+ #include <linux/fs.h>
-+ ],[
-+ struct inode ip;
-+ struct timespec64 ts;
-+
-+ memset(&ip, 0, sizeof(ip));
-+ inode_set_ctime_to_ts(&ip, ts);
-+ ])
- ])
-
- AC_DEFUN([ZFS_AC_KERNEL_INODE_TIMES], [
-@@ -47,4 +72,22 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_TIMES], [
- AC_DEFINE(HAVE_INODE_TIMESPEC64_TIMES, 1,
- [inode->i_*time's are timespec64])
- ])
-+
-+ AC_MSG_CHECKING([whether inode_get_ctime() exists])
-+ ZFS_LINUX_TEST_RESULT([inode_get_ctime], [
-+ AC_MSG_RESULT(yes)
-+ AC_DEFINE(HAVE_INODE_GET_CTIME, 1,
-+ [inode_get_ctime() exists in linux/fs.h])
-+ ],[
-+ AC_MSG_RESULT(no)
-+ ])
-+
-+ AC_MSG_CHECKING([whether inode_set_ctime_to_ts() exists])
-+ ZFS_LINUX_TEST_RESULT([inode_set_ctime_to_ts], [
-+ AC_MSG_RESULT(yes)
-+ AC_DEFINE(HAVE_INODE_SET_CTIME_TO_TS, 1,
-+ [inode_set_ctime_to_ts() exists in linux/fs.h])
-+ ],[
-+ AC_MSG_RESULT(no)
-+ ])
- ])
-diff --git a/include/os/linux/zfs/sys/zpl.h b/include/os/linux/zfs/sys/zpl.h
-index 0bd20f64897d..f4f1dcf95d4c 100644
---- a/include/os/linux/zfs/sys/zpl.h
-+++ b/include/os/linux/zfs/sys/zpl.h
-@@ -263,4 +263,15 @@ extern long zpl_ioctl_fideduperange(struct file *filp, void *arg);
- #define zpl_setattr_prepare(ns, dentry, ia) setattr_prepare(dentry, ia)
- #endif
-
-+#ifdef HAVE_INODE_GET_CTIME
-+#define zpl_inode_get_ctime(ip) inode_get_ctime(ip)
-+#else
-+#define zpl_inode_get_ctime(ip) (ip->i_ctime)
-+#endif
-+#ifdef HAVE_INODE_SET_CTIME_TO_TS
-+#define zpl_inode_set_ctime_to_ts(ip, ts) inode_set_ctime_to_ts(ip, ts)
-+#else
-+#define zpl_inode_set_ctime_to_ts(ip, ts) (ip->i_ctime = ts)
-+#endif
-+
- #endif /* _SYS_ZPL_H */
-diff --git a/module/os/linux/zfs/zfs_ctldir.c b/module/os/linux/zfs/zfs_ctldir.c
-index 02cb379ea840..94e25fa0ae8f 100644
---- a/module/os/linux/zfs/zfs_ctldir.c
-+++ b/module/os/linux/zfs/zfs_ctldir.c
-@@ -522,7 +522,7 @@ zfsctl_inode_alloc(zfsvfs_t *zfsvfs, uint64_t id,
- ip->i_blkbits = SPA_MINBLOCKSHIFT;
- ip->i_atime = now;
- ip->i_mtime = now;
-- ip->i_ctime = now;
-+ zpl_inode_set_ctime_to_ts(ip, now);
- ip->i_fop = fops;
- ip->i_op = ops;
- #if defined(IOP_XATTR)
-diff --git a/module/os/linux/zfs/zfs_vnops_os.c b/module/os/linux/zfs/zfs_vnops_os.c
-index b7d44f344daf..e2c23a81fd6c 100644
---- a/module/os/linux/zfs/zfs_vnops_os.c
-+++ b/module/os/linux/zfs/zfs_vnops_os.c
-@@ -2439,8 +2439,8 @@ zfs_setattr(znode_t *zp, vattr_t *vap, int flags, cred_t *cr, zidmap_t *mnt_ns)
-
- if (mask & (ATTR_CTIME | ATTR_SIZE)) {
- ZFS_TIME_ENCODE(&vap->va_ctime, ctime);
-- ZTOI(zp)->i_ctime = zpl_inode_timestamp_truncate(vap->va_ctime,
-- ZTOI(zp));
-+ zpl_inode_set_ctime_to_ts(ZTOI(zp),
-+ zpl_inode_timestamp_truncate(vap->va_ctime, ZTOI(zp)));
- SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL,
- ctime, sizeof (ctime));
- }
-@@ -3645,6 +3645,7 @@ zfs_putpage(struct inode *ip, struct page *pp, struct writeback_control *wbc,
- caddr_t va;
- int err = 0;
- uint64_t mtime[2], ctime[2];
-+ inode_timespec_t tmp_ctime;
- sa_bulk_attr_t bulk[3];
- int cnt = 0;
- struct address_space *mapping;
-@@ -3809,7 +3810,8 @@ zfs_putpage(struct inode *ip, struct page *pp, struct writeback_control *wbc,
-
- /* Preserve the mtime and ctime provided by the inode */
- ZFS_TIME_ENCODE(&ip->i_mtime, mtime);
-- ZFS_TIME_ENCODE(&ip->i_ctime, ctime);
-+ tmp_ctime = zpl_inode_get_ctime(ip);
-+ ZFS_TIME_ENCODE(&tmp_ctime, ctime);
- zp->z_atime_dirty = B_FALSE;
- zp->z_seq++;
-
-@@ -3859,6 +3861,7 @@ zfs_dirty_inode(struct inode *ip, int flags)
- zfsvfs_t *zfsvfs = ITOZSB(ip);
- dmu_tx_t *tx;
- uint64_t mode, atime[2], mtime[2], ctime[2];
-+ inode_timespec_t tmp_ctime;
- sa_bulk_attr_t bulk[4];
- int error = 0;
- int cnt = 0;
-@@ -3905,7 +3908,8 @@ zfs_dirty_inode(struct inode *ip, int flags)
- /* Preserve the mode, mtime and ctime provided by the inode */
- ZFS_TIME_ENCODE(&ip->i_atime, atime);
- ZFS_TIME_ENCODE(&ip->i_mtime, mtime);
-- ZFS_TIME_ENCODE(&ip->i_ctime, ctime);
-+ tmp_ctime = zpl_inode_get_ctime(ip);
-+ ZFS_TIME_ENCODE(&tmp_ctime, ctime);
- mode = ip->i_mode;
-
- zp->z_mode = mode;
-diff --git a/module/os/linux/zfs/zfs_znode.c b/module/os/linux/zfs/zfs_znode.c
-index 52c8e51df659..f71026da83cb 100644
---- a/module/os/linux/zfs/zfs_znode.c
-+++ b/module/os/linux/zfs/zfs_znode.c
-@@ -542,6 +542,7 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz,
- uint64_t links;
- uint64_t z_uid, z_gid;
- uint64_t atime[2], mtime[2], ctime[2], btime[2];
-+ inode_timespec_t tmp_ctime;
- uint64_t projid = ZFS_DEFAULT_PROJID;
- sa_bulk_attr_t bulk[12];
- int count = 0;
-@@ -615,7 +616,8 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz,
-
- ZFS_TIME_DECODE(&ip->i_atime, atime);
- ZFS_TIME_DECODE(&ip->i_mtime, mtime);
-- ZFS_TIME_DECODE(&ip->i_ctime, ctime);
-+ ZFS_TIME_DECODE(&tmp_ctime, ctime);
-+ zpl_inode_set_ctime_to_ts(ip, tmp_ctime);
- ZFS_TIME_DECODE(&zp->z_btime, btime);
-
- ip->i_ino = zp->z_id;
-@@ -1195,6 +1197,7 @@ zfs_rezget(znode_t *zp)
- uint64_t gen;
- uint64_t z_uid, z_gid;
- uint64_t atime[2], mtime[2], ctime[2], btime[2];
-+ inode_timespec_t tmp_ctime;
- uint64_t projid = ZFS_DEFAULT_PROJID;
- znode_hold_t *zh;
-
-@@ -1289,7 +1292,8 @@ zfs_rezget(znode_t *zp)
-
- ZFS_TIME_DECODE(&ZTOI(zp)->i_atime, atime);
- ZFS_TIME_DECODE(&ZTOI(zp)->i_mtime, mtime);
-- ZFS_TIME_DECODE(&ZTOI(zp)->i_ctime, ctime);
-+ ZFS_TIME_DECODE(&tmp_ctime, ctime);
-+ zpl_inode_set_ctime_to_ts(ZTOI(zp), tmp_ctime);
- ZFS_TIME_DECODE(&zp->z_btime, btime);
-
- if ((uint32_t)gen != ZTOI(zp)->i_generation) {
-@@ -1397,7 +1401,7 @@ zfs_zinactive(znode_t *zp)
- boolean_t
- zfs_relatime_need_update(const struct inode *ip)
- {
-- inode_timespec_t now;
-+ inode_timespec_t now, tmp_ctime;
-
- gethrestime(&now);
- /*
-@@ -1408,7 +1412,8 @@ zfs_relatime_need_update(const struct inode *ip)
- if (zfs_compare_timespec(&ip->i_mtime, &ip->i_atime) >= 0)
- return (B_TRUE);
-
-- if (zfs_compare_timespec(&ip->i_ctime, &ip->i_atime) >= 0)
-+ tmp_ctime = zpl_inode_get_ctime(ip);
-+ if (zfs_compare_timespec(&tmp_ctime, &ip->i_atime) >= 0)
- return (B_TRUE);
-
- if ((hrtime_t)now.tv_sec - (hrtime_t)ip->i_atime.tv_sec >= 24*60*60)
-@@ -1434,7 +1439,7 @@ void
- zfs_tstamp_update_setup(znode_t *zp, uint_t flag, uint64_t mtime[2],
- uint64_t ctime[2])
- {
-- inode_timespec_t now;
-+ inode_timespec_t now, tmp_ctime;
-
- gethrestime(&now);
-
-@@ -1451,7 +1456,8 @@ zfs_tstamp_update_setup(znode_t *zp, uint_t flag, uint64_t mtime[2],
-
- if (flag & ATTR_CTIME) {
- ZFS_TIME_ENCODE(&now, ctime);
-- ZFS_TIME_DECODE(&(ZTOI(zp)->i_ctime), ctime);
-+ ZFS_TIME_DECODE(&tmp_ctime, ctime);
-+ zpl_inode_set_ctime_to_ts(ZTOI(zp), tmp_ctime);
- if (ZTOZSB(zp)->z_use_fuids)
- zp->z_pflags |= ZFS_ARCHIVE;
- }
-diff --git a/module/os/linux/zfs/zpl_inode.c b/module/os/linux/zfs/zpl_inode.c
-index 5f5ad186a61c..ef50f8687779 100644
---- a/module/os/linux/zfs/zpl_inode.c
-+++ b/module/os/linux/zfs/zpl_inode.c
-@@ -774,7 +774,7 @@ zpl_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
- return (-EMLINK);
-
- crhold(cr);
-- ip->i_ctime = current_time(ip);
-+ zpl_inode_set_ctime_to_ts(ip, current_time(ip));
- /* Must have an existing ref, so igrab() cannot return NULL */
- VERIFY3P(igrab(ip), !=, NULL);
-
-diff --git a/module/os/linux/zfs/zpl_xattr.c b/module/os/linux/zfs/zpl_xattr.c
-index 96d85991811e..4e4f5210f85d 100644
---- a/module/os/linux/zfs/zpl_xattr.c
-+++ b/module/os/linux/zfs/zpl_xattr.c
-@@ -513,7 +513,7 @@ zpl_xattr_set_dir(struct inode *ip, const char *name, const void *value,
- error = -zfs_write_simple(xzp, value, size, pos, NULL);
- out:
- if (error == 0) {
-- ip->i_ctime = current_time(ip);
-+ zpl_inode_set_ctime_to_ts(ip, current_time(ip));
- zfs_mark_inode_dirty(ip);
- }
-
-@@ -1011,7 +1011,8 @@ zpl_set_acl_impl(struct inode *ip, struct posix_acl *acl, int type)
- */
- if (ip->i_mode != mode) {
- ip->i_mode = ITOZ(ip)->z_mode = mode;
-- ip->i_ctime = current_time(ip);
-+ zpl_inode_set_ctime_to_ts(ip,
-+ current_time(ip));
- zfs_mark_inode_dirty(ip);
- }
-
-@@ -1170,7 +1171,7 @@ zpl_init_acl(struct inode *ip, struct inode *dir)
- return (PTR_ERR(acl));
- if (!acl) {
- ITOZ(ip)->z_mode = (ip->i_mode &= ~current_umask());
-- ip->i_ctime = current_time(ip);
-+ zpl_inode_set_ctime_to_ts(ip, current_time(ip));
- zfs_mark_inode_dirty(ip);
- return (0);
- }
-From 01d00dfa9e47dba025522790736fc34d65baf2f1 Mon Sep 17 00:00:00 2001
-From: Coleman Kane <ckane at colemankane.org>
-Date: Fri, 15 Sep 2023 00:36:39 -0400
-Subject: [PATCH] Linux 6.6 compat: generic_fillattr has a new u32 request_mask
- added at arg2
-
-In commit 0d72b92883c651a11059d93335f33d65c6eb653b, a new u32 argument
-for the request_mask was added to generic_fillattr. This is the same
-request_mask for statx that's present in the most recent API implemented
-by zpl_getattr_impl. This commit conditionally adds it to the
-zpl_generic_fillattr(...) macro, as well as the zfs_getattr_fast(...)
-implementation, when configure determines it's present in the kernel's
-generic_fillattr(...).
-
-Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
-Signed-off-by: Coleman Kane <ckane at colemankane.org>
-Closes #15263
----
- config/kernel-generic_fillattr.m4 | 39 +++++++++++++++++-----
- include/os/linux/kernel/linux/vfs_compat.h | 6 ++++
- include/os/linux/zfs/sys/zfs_vnops_os.h | 5 +++
- module/os/linux/zfs/zfs_vnops_os.c | 9 +++++
- module/os/linux/zfs/zpl_ctldir.c | 11 +++++-
- module/os/linux/zfs/zpl_inode.c | 4 ++-
- 6 files changed, 63 insertions(+), 11 deletions(-)
-
-diff --git a/config/kernel-generic_fillattr.m4 b/config/kernel-generic_fillattr.m4
-index 02dee4d4c000..f5323f0dcb9f 100644
---- a/config/kernel-generic_fillattr.m4
-+++ b/config/kernel-generic_fillattr.m4
-@@ -7,6 +7,10 @@ dnl #
- dnl # 6.3 API
- dnl # generic_fillattr() now takes struct mnt_idmap* as the first argument
- dnl #
-+dnl # 6.6 API
-+dnl # generic_fillattr() now takes u32 as second argument, representing a
-+dnl # request_mask for statx
-+dnl #
- AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_FILLATTR], [
- ZFS_LINUX_TEST_SRC([generic_fillattr_userns], [
- #include <linux/fs.h>
-@@ -25,22 +29,39 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_FILLATTR], [
- struct kstat *k = NULL;
- generic_fillattr(idmap, in, k);
- ])
-+
-+ ZFS_LINUX_TEST_SRC([generic_fillattr_mnt_idmap_reqmask], [
-+ #include <linux/fs.h>
-+ ],[
-+ struct mnt_idmap *idmap = NULL;
-+ struct inode *in = NULL;
-+ struct kstat *k = NULL;
-+ generic_fillattr(idmap, 0, in, k);
-+ ])
- ])
-
- AC_DEFUN([ZFS_AC_KERNEL_GENERIC_FILLATTR], [
-- AC_MSG_CHECKING([whether generic_fillattr requires struct mnt_idmap*])
-- ZFS_LINUX_TEST_RESULT([generic_fillattr_mnt_idmap], [
-+ AC_MSG_CHECKING(
-+ [whether generic_fillattr requires struct mnt_idmap* and request_mask])
-+ ZFS_LINUX_TEST_RESULT([generic_fillattr_mnt_idmap_reqmask], [
- AC_MSG_RESULT([yes])
-- AC_DEFINE(HAVE_GENERIC_FILLATTR_IDMAP, 1,
-- [generic_fillattr requires struct mnt_idmap*])
-+ AC_DEFINE(HAVE_GENERIC_FILLATTR_IDMAP_REQMASK, 1,
-+ [generic_fillattr requires struct mnt_idmap* and u32 request_mask])
- ],[
-- AC_MSG_CHECKING([whether generic_fillattr requires struct user_namespace*])
-- ZFS_LINUX_TEST_RESULT([generic_fillattr_userns], [
-+ AC_MSG_CHECKING([whether generic_fillattr requires struct mnt_idmap*])
-+ ZFS_LINUX_TEST_RESULT([generic_fillattr_mnt_idmap], [
- AC_MSG_RESULT([yes])
-- AC_DEFINE(HAVE_GENERIC_FILLATTR_USERNS, 1,
-- [generic_fillattr requires struct user_namespace*])
-+ AC_DEFINE(HAVE_GENERIC_FILLATTR_IDMAP, 1,
-+ [generic_fillattr requires struct mnt_idmap*])
- ],[
-- AC_MSG_RESULT([no])
-+ AC_MSG_CHECKING([whether generic_fillattr requires struct user_namespace*])
-+ ZFS_LINUX_TEST_RESULT([generic_fillattr_userns], [
-+ AC_MSG_RESULT([yes])
-+ AC_DEFINE(HAVE_GENERIC_FILLATTR_USERNS, 1,
-+ [generic_fillattr requires struct user_namespace*])
-+ ],[
-+ AC_MSG_RESULT([no])
-+ ])
- ])
- ])
- ])
-diff --git a/include/os/linux/kernel/linux/vfs_compat.h b/include/os/linux/kernel/linux/vfs_compat.h
-index e156ed41c28c..aea8bd5ed22c 100644
---- a/include/os/linux/kernel/linux/vfs_compat.h
-+++ b/include/os/linux/kernel/linux/vfs_compat.h
-@@ -461,10 +461,16 @@ zpl_is_32bit_api(void)
- * 6.3 API change
- * generic_fillattr() first arg is changed to struct mnt_idmap *
- *
-+ * 6.6 API change
-+ * generic_fillattr() gets new second arg request_mask, a u32 type
-+ *
- */
- #ifdef HAVE_GENERIC_FILLATTR_IDMAP
- #define zpl_generic_fillattr(idmap, ip, sp) \
- generic_fillattr(idmap, ip, sp)
-+#elif defined(HAVE_GENERIC_FILLATTR_IDMAP_REQMASK)
-+#define zpl_generic_fillattr(idmap, rqm, ip, sp) \
-+ generic_fillattr(idmap, rqm, ip, sp)
- #elif defined(HAVE_GENERIC_FILLATTR_USERNS)
- #define zpl_generic_fillattr(user_ns, ip, sp) \
- generic_fillattr(user_ns, ip, sp)
-diff --git a/include/os/linux/zfs/sys/zfs_vnops_os.h b/include/os/linux/zfs/sys/zfs_vnops_os.h
-index 7a1db7deeec8..830c76e5743a 100644
---- a/include/os/linux/zfs/sys/zfs_vnops_os.h
-+++ b/include/os/linux/zfs/sys/zfs_vnops_os.h
-@@ -56,7 +56,12 @@ extern int zfs_mkdir(znode_t *dzp, char *dirname, vattr_t *vap,
- extern int zfs_rmdir(znode_t *dzp, char *name, znode_t *cwd,
- cred_t *cr, int flags);
- extern int zfs_readdir(struct inode *ip, zpl_dir_context_t *ctx, cred_t *cr);
-+#ifdef HAVE_GENERIC_FILLATTR_IDMAP_REQMASK
-+extern int zfs_getattr_fast(zidmap_t *, u32 request_mask, struct inode *ip,
-+ struct kstat *sp);
-+#else
- extern int zfs_getattr_fast(zidmap_t *, struct inode *ip, struct kstat *sp);
-+#endif
- extern int zfs_setattr(znode_t *zp, vattr_t *vap, int flag, cred_t *cr,
- zidmap_t *mnt_ns);
- extern int zfs_rename(znode_t *sdzp, char *snm, znode_t *tdzp,
-diff --git a/module/os/linux/zfs/zfs_vnops_os.c b/module/os/linux/zfs/zfs_vnops_os.c
-index e2c23a81fd6c..1770e2372571 100644
---- a/module/os/linux/zfs/zfs_vnops_os.c
-+++ b/module/os/linux/zfs/zfs_vnops_os.c
-@@ -1649,7 +1649,12 @@ zfs_readdir(struct inode *ip, zpl_dir_context_t *ctx, cred_t *cr)
- * RETURN: 0 (always succeeds)
- */
- int
-+#ifdef HAVE_GENERIC_FILLATTR_IDMAP_REQMASK
-+zfs_getattr_fast(zidmap_t *user_ns, u32 request_mask, struct inode *ip,
-+ struct kstat *sp)
-+#else
- zfs_getattr_fast(zidmap_t *user_ns, struct inode *ip, struct kstat *sp)
-+#endif
- {
- znode_t *zp = ITOZ(ip);
- zfsvfs_t *zfsvfs = ITOZSB(ip);
-@@ -1662,7 +1667,11 @@ zfs_getattr_fast(zidmap_t *user_ns, struct inode *ip, struct kstat *sp)
-
- mutex_enter(&zp->z_lock);
-
-+#ifdef HAVE_GENERIC_FILLATTR_IDMAP_REQMASK
-+ zpl_generic_fillattr(user_ns, request_mask, ip, sp);
-+#else
- zpl_generic_fillattr(user_ns, ip, sp);
-+#endif
- /*
- * +1 link count for root inode with visible '.zfs' directory.
- */
-diff --git a/module/os/linux/zfs/zpl_ctldir.c b/module/os/linux/zfs/zpl_ctldir.c
-index 7786444fea35..8ee7fcecc7b7 100644
---- a/module/os/linux/zfs/zpl_ctldir.c
-+++ b/module/os/linux/zfs/zpl_ctldir.c
-@@ -124,6 +124,8 @@ zpl_root_getattr_impl(const struct path *path, struct kstat *stat,
- generic_fillattr(user_ns, ip, stat);
- #elif defined(HAVE_GENERIC_FILLATTR_IDMAP)
- generic_fillattr(user_ns, ip, stat);
-+#elif defined(HAVE_GENERIC_FILLATTR_IDMAP_REQMASK)
-+ generic_fillattr(user_ns, request_mask, ip, stat);
- #else
- (void) user_ns;
- #endif
-@@ -435,6 +437,8 @@ zpl_snapdir_getattr_impl(const struct path *path, struct kstat *stat,
- generic_fillattr(user_ns, ip, stat);
- #elif defined(HAVE_GENERIC_FILLATTR_IDMAP)
- generic_fillattr(user_ns, ip, stat);
-+#elif defined(HAVE_GENERIC_FILLATTR_IDMAP_REQMASK)
-+ generic_fillattr(user_ns, request_mask, ip, stat);
- #else
- (void) user_ns;
- #endif
-@@ -609,6 +613,8 @@ zpl_shares_getattr_impl(const struct path *path, struct kstat *stat,
- generic_fillattr(user_ns, path->dentry->d_inode, stat);
- #elif defined(HAVE_GENERIC_FILLATTR_IDMAP)
- generic_fillattr(user_ns, path->dentry->d_inode, stat);
-+#elif defined(HAVE_GENERIC_FILLATTR_IDMAP_REQMASK)
-+ generic_fillattr(user_ns, request_mask, ip, stat);
- #else
- (void) user_ns;
- #endif
-@@ -623,7 +629,10 @@ zpl_shares_getattr_impl(const struct path *path, struct kstat *stat,
-
- error = -zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp);
- if (error == 0) {
--#if (defined(HAVE_USERNS_IOPS_GETATTR) || defined(HAVE_IDMAP_IOPS_GETATTR))
-+#ifdef HAVE_GENERIC_FILLATTR_IDMAP_REQMASK
-+ error = -zfs_getattr_fast(user_ns, request_mask, ZTOI(dzp),
-+ stat);
-+#elif (defined(HAVE_USERNS_IOPS_GETATTR) || defined(HAVE_IDMAP_IOPS_GETATTR))
- error = -zfs_getattr_fast(user_ns, ZTOI(dzp), stat);
- #else
- error = -zfs_getattr_fast(kcred->user_ns, ZTOI(dzp), stat);
-diff --git a/module/os/linux/zfs/zpl_inode.c b/module/os/linux/zfs/zpl_inode.c
-index ef50f8687779..96f65b9e94e2 100644
---- a/module/os/linux/zfs/zpl_inode.c
-+++ b/module/os/linux/zfs/zpl_inode.c
-@@ -435,7 +435,9 @@ zpl_getattr_impl(const struct path *path, struct kstat *stat, u32 request_mask,
- * XXX query_flags currently ignored.
- */
-
--#if (defined(HAVE_USERNS_IOPS_GETATTR) || defined(HAVE_IDMAP_IOPS_GETATTR))
-+#ifdef HAVE_GENERIC_FILLATTR_IDMAP_REQMASK
-+ error = -zfs_getattr_fast(user_ns, request_mask, ip, stat);
-+#elif (defined(HAVE_USERNS_IOPS_GETATTR) || defined(HAVE_IDMAP_IOPS_GETATTR))
- error = -zfs_getattr_fast(user_ns, ip, stat);
- #else
- error = -zfs_getattr_fast(kcred->user_ns, ip, stat);
-From 7ac56b86cd69487fa018b6c92cb2cfb2f82fefba Mon Sep 17 00:00:00 2001
-From: Coleman Kane <ckane at colemankane.org>
-Date: Fri, 15 Sep 2023 01:07:03 -0400
-Subject: [PATCH] Linux 6.6 compat: fsync_bdev() has been removed in favor of
- sync_blockdev()
-
-In Linux commit 560e20e4bf6484a0c12f9f3c7a1aa55056948e1e, the
-fsync_bdev() function was removed in favor of sync_blockdev() to do
-(roughly) the same thing, given the same input. This change
-conditionally attempts to call sync_blockdev() if fsync_bdev() isn't
-discovered during configure.
-
-Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
-Signed-off-by: Coleman Kane <ckane at colemankane.org>
-Closes #15263
----
- config/kernel-fsync-bdev.m4 | 36 +++++++++++++++++++++++++++++++++++
- config/kernel.m4 | 2 ++
- module/os/linux/zfs/zvol_os.c | 6 ++++++
- 3 files changed, 44 insertions(+)
- create mode 100644 config/kernel-fsync-bdev.m4
-
-diff --git a/config/kernel-fsync-bdev.m4 b/config/kernel-fsync-bdev.m4
-new file mode 100644
-index 000000000000..c47e236f705f
---- /dev/null
-+++ b/config/kernel-fsync-bdev.m4
-@@ -0,0 +1,36 @@
-+dnl #
-+dnl # 6.6 API change,
-+dnl # fsync_bdev was removed in favor of sync_blockdev
-+dnl #
-+AC_DEFUN([ZFS_AC_KERNEL_SRC_SYNC_BDEV], [
-+ ZFS_LINUX_TEST_SRC([fsync_bdev], [
-+ #include <linux/blkdev.h>
-+ ],[
-+ fsync_bdev(NULL);
-+ ])
-+
-+ ZFS_LINUX_TEST_SRC([sync_blockdev], [
-+ #include <linux/blkdev.h>
-+ ],[
-+ sync_blockdev(NULL);
-+ ])
-+])
-+
-+AC_DEFUN([ZFS_AC_KERNEL_SYNC_BDEV], [
-+ AC_MSG_CHECKING([whether fsync_bdev() exists])
-+ ZFS_LINUX_TEST_RESULT([fsync_bdev], [
-+ AC_MSG_RESULT(yes)
-+ AC_DEFINE(HAVE_FSYNC_BDEV, 1,
-+ [fsync_bdev() is declared in include/blkdev.h])
-+ ],[
-+ AC_MSG_CHECKING([whether sync_blockdev() exists])
-+ ZFS_LINUX_TEST_RESULT([sync_blockdev], [
-+ AC_MSG_RESULT(yes)
-+ AC_DEFINE(HAVE_SYNC_BLOCKDEV, 1,
-+ [sync_blockdev() is declared in include/blkdev.h])
-+ ],[
-+ ZFS_LINUX_TEST_ERROR(
-+ [neither fsync_bdev() nor sync_blockdev() exist])
-+ ])
-+ ])
-+])
-diff --git a/config/kernel.m4 b/config/kernel.m4
-index df194ec72207..056517a841f2 100644
---- a/config/kernel.m4
-+++ b/config/kernel.m4
-@@ -162,6 +162,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
- ZFS_AC_KERNEL_SRC_RECLAIMED
- ZFS_AC_KERNEL_SRC_REGISTER_SYSCTL_TABLE
- ZFS_AC_KERNEL_SRC_COPY_SPLICE_READ
-+ ZFS_AC_KERNEL_SRC_SYNC_BDEV
- case "$host_cpu" in
- powerpc*)
- ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE
-@@ -303,6 +304,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
- ZFS_AC_KERNEL_RECLAIMED
- ZFS_AC_KERNEL_REGISTER_SYSCTL_TABLE
- ZFS_AC_KERNEL_COPY_SPLICE_READ
-+ ZFS_AC_KERNEL_SYNC_BDEV
- case "$host_cpu" in
- powerpc*)
- ZFS_AC_KERNEL_CPU_HAS_FEATURE
-diff --git a/module/os/linux/zfs/zvol_os.c b/module/os/linux/zfs/zvol_os.c
-index 7a95b54bdf0d..f94ce69fb9e2 100644
---- a/module/os/linux/zfs/zvol_os.c
-+++ b/module/os/linux/zfs/zvol_os.c
-@@ -873,7 +873,13 @@ zvol_ioctl(struct block_device *bdev, fmode_t mode,
-
- switch (cmd) {
- case BLKFLSBUF:
-+#ifdef HAVE_FSYNC_BDEV
- fsync_bdev(bdev);
-+#elif defined(HAVE_SYNC_BLOCKDEV)
-+ sync_blockdev(bdev);
-+#else
-+#error "Neither fsync_bdev() nor sync_blockdev() found"
-+#endif
- invalidate_bdev(bdev);
- rw_enter(&zv->zv_suspend_lock, RW_READER);
-
-From 9198de8f1079a8bbb837de3e3f8e236777b1375d Mon Sep 17 00:00:00 2001
-From: Umer Saleem <usaleem at ixsystems.com>
-Date: Wed, 8 Nov 2023 02:24:16 +0500
-Subject: [PATCH] Linux 6.6 compat: fix implicit conversion error with debug
- build
-
-With Linux v6.6.0 and GCC 12, when debug build is configured,
-implicit conversion error is raised while converting
-'enum <anonymous>' to 'boolean_t'. Use 'B_TRUE' instead of
-'true' to fix the issue.
-
-Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
-Reviewed-by: Pavel Snajdr <snajpa at snajpa.net>
-Reviewed-by: Brian Atkinson <batkinson at lanl.gov>
-Signed-off-by: Umer Saleem <usaleem at ixsystems.com>
-Closes #15489
----
- module/os/linux/zfs/zfs_vfsops.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/module/os/linux/zfs/zfs_vfsops.c b/module/os/linux/zfs/zfs_vfsops.c
-index a1db5c57c18b..2792bc027213 100644
---- a/module/os/linux/zfs/zfs_vfsops.c
-+++ b/module/os/linux/zfs/zfs_vfsops.c
-@@ -1488,7 +1488,7 @@ zfs_domount(struct super_block *sb, zfs_mnt_t *zm, int silent)
- * read-only flag, pretend it was set, as done for snapshots.
- */
- if (!canwrite)
-- vfs->vfs_readonly = true;
-+ vfs->vfs_readonly = B_TRUE;
-
- error = zfsvfs_create(osname, vfs->vfs_readonly, &zfsvfs);
- if (error) {
-From 231965680200b4a20214bb303d3f29c5f53bff67 Mon Sep 17 00:00:00 2001
-From: Tony Hutter <hutter2 at llnl.gov>
-Date: Tue, 14 Nov 2023 09:55:28 -0800
-Subject: [PATCH] Linux 6.6 compat: META
-
-Update the META file to reflect compatibility with the 6.6 kernel.
-
-Reviewed-by: George Melikov <mail at gmelikov.ru>
-Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
-Reviewed-by: Umer Saleem <usaleem at ixsystems.com>
-Signed-off-by: Tony Hutter <hutter2 at llnl.gov>
-Closes #15520
----
- META | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/META b/META
-index 15d4b19fdc44..b1bca89cabc2 100644
---- a/META
-+++ b/META
-@@ -6,5 +6,5 @@ Release: 1
- Release-Tags: relext
- License: CDDL
- Author: OpenZFS
--Linux-Maximum: 6.5
-+Linux-Maximum: 6.6
- Linux-Minimum: 3.10
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/zfs.git/commitdiff/bee8008b6c09f6dd4495783f9828a85af2b865f9
More information about the pld-cvs-commit
mailing list