From 3f5fe41a0fc9ff11f6ef6f4c5a4f2e2d7c44a15a Mon Sep 17 00:00:00 2001 From: Shaun Tancheff Date: Thu, 11 Apr 2024 11:12:15 -0700 Subject: [PATCH] LU-16350 osd-ldiskfs: no_llseek removed, dquot_transfer Linux commit v5.19-rc2-6-g868941b14441 fs: remove no_llseek With the removal of no_llseek, leaving .llseek set to NULL is functionally equivalent. Only provide no_llseek if it exists. Linux commit v5.19-rc3-6-g71e7b535b890 quota: port quota helpers mount ids dquot_transfer adds a user namespace argument. Provide an osd_dquot_transfer() wrapper to discard the additional argument for older kernels. Lustre-change: https://review.whamcloud.com/49266 Lustre-commit: 2de1dbd440e2b26ea1bdf663b92a3e8c62a95ee7 Test-Parameters: trivial HPE-bug-id: LUS-11376 Signed-off-by: Shaun Tancheff Change-Id: If3165aed0d7b827b90e26d9f0174137d087ce57a Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/54745 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger --- lustre/autoconf/lustre-core.m4 | 57 +++++++++++++++++++++++++++++++++++++-- lustre/ofd/ofd_access_log.c | 2 ++ lustre/osd-ldiskfs/osd_handler.c | 2 +- lustre/osd-ldiskfs/osd_internal.h | 6 +++++ 4 files changed, 64 insertions(+), 3 deletions(-) diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 96e5ddd..4989ba9 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -3326,6 +3326,55 @@ AC_DEFUN([LC_SECURITY_DENTRY_INIT_SECURTY_WITH_CTX], [ ]) # LC_SECURITY_DENTRY_INIT_SECURTY_WITH_CTX # +# LC_HAVE_NO_LLSEEK +# +# Linux commit v5.19-rc2-6-g868941b14441 +# fs: remove no_llseek +# +AC_DEFUN([LC_SRC_HAVE_NO_LLSEEK], [ + LB2_LINUX_TEST_SRC([no_llseek], [ + #include + ],[ + static const struct file_operations fops = { + .llseek = &no_llseek, + }; + (void)fops; + ],[-Werror]) +]) +AC_DEFUN([LC_HAVE_NO_LLSEEK], [ + AC_MSG_CHECKING([if no_llseek() is available]) + LB2_LINUX_TEST_RESULT([no_llseek], [ + AC_DEFINE(HAVE_NO_LLSEEK, 1, [no_llseek() is available]) + ]) +]) # LC_HAVE_NO_LLSEEK + +# +# LC_DQUOT_TRANSFER_WITH_USER_NS +# +# Linux commit v5.19-rc3-6-g71e7b535b890 +# quota: port quota helpers mount ids +# +AC_DEFUN([LC_SRC_DQUOT_TRANSFER_WITH_USER_NS], [ + LB2_LINUX_TEST_SRC([dquot_transfer], [ + #include + ],[ + struct user_namespace *userns = NULL; + struct inode *inode = NULL; + struct iattr *iattr = NULL; + int err __attribute__ ((unused)); + + err = dquot_transfer(userns, inode, iattr); + ],[-Werror]) +]) +AC_DEFUN([LC_DQUOT_TRANSFER_WITH_USER_NS], [ + AC_MSG_CHECKING([if dquot_transfer() has user_ns argument]) + LB2_LINUX_TEST_RESULT([dquot_transfer], [ + AC_DEFINE(HAVE_DQUOT_TRANSFER_WITH_USER_NS, 1, + [dquot_transfer() has user_ns argument]) + ]) +]) # LC_DQUOT_TRANSFER_WITH_USER_NS + +# # LC_HAVE_FILEMAP_GET_FOLIOS # # Linux commit v5.19-rc3-342-gbe0ced5e9cb8 @@ -4337,9 +4386,11 @@ AC_DEFUN([LC_PROG_LINUX_SRC], [ LC_SRC_HAVE_ADDRESS_SPACE_OPERATIONS_RELEASE_FOLIO LC_SRC_HAVE_LSMCONTEXT_INIT LC_SRC_SECURITY_DENTRY_INIT_SECURTY_WITH_CTX - LC_SRC_HAVE_FILEMAP_GET_FOLIOS # 6.0 + LC_SRC_HAVE_NO_LLSEEK + LC_SRC_DQUOT_TRANSFER_WITH_USER_NS + LC_SRC_HAVE_FILEMAP_GET_FOLIOS LC_SRC_HAVE_ADDRESS_SPACE_OPERATIONS_MIGRATE_FOLIO LC_SRC_REGISTER_SHRINKER_FORMAT_NAMED LC_SRC_HAVE_VFS_SETXATTR_NON_CONST_VALUE @@ -4619,9 +4670,11 @@ AC_DEFUN([LC_PROG_LINUX_RESULTS], [ LC_HAVE_ADDRESS_SPACE_OPERATIONS_RELEASE_FOLIO LC_HAVE_LSMCONTEXT_INIT LC_SECURITY_DENTRY_INIT_SECURTY_WITH_CTX - LC_HAVE_FILEMAP_GET_FOLIOS # 6.0 + LC_HAVE_NO_LLSEEK + LC_DQUOT_TRANSFER_WITH_USER_NS + LC_HAVE_FILEMAP_GET_FOLIOS LC_HAVE_ADDRESS_SPACE_OPERATIONS_MIGRATE_FOLIO LC_REGISTER_SHRINKER_FORMAT_NAMED LC_HAVE_VFS_SETXATTR_NON_CONST_VALUE diff --git a/lustre/ofd/ofd_access_log.c b/lustre/ofd/ofd_access_log.c index b4acc55..4dfc341 100644 --- a/lustre/ofd/ofd_access_log.c +++ b/lustre/ofd/ofd_access_log.c @@ -434,7 +434,9 @@ static const struct file_operations oal_fops = { .read = &oal_file_read, .write = &oal_file_write, .poll = &oal_file_poll, +#ifdef HAVE_NO_LLSEEK .llseek = &no_llseek, +#endif }; static void oal_device_release(struct device *dev) diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index 94cd315..1654861 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -3318,7 +3318,7 @@ static int osd_quota_transfer(struct inode *inode, const struct lu_attr *attr, iattr.ia_gid = make_kgid(&init_user_ns, attr->la_gid); lock_dquot_transfer(inode); - rc = dquot_transfer(inode, &iattr); + rc = osd_dquot_transfer(&init_user_ns, inode, &iattr); unlock_dquot_transfer(inode); if (rc) { CERROR("%s: quota transfer failed. Is quota enforcement enabled on the ldiskfs filesystem? rc = %d\n", diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h index 7f253f7..b4d2078 100644 --- a/lustre/osd-ldiskfs/osd_internal.h +++ b/lustre/osd-ldiskfs/osd_internal.h @@ -1798,4 +1798,10 @@ static int fill_fn(struct dir_context *buf, const char *name, int namelen, \ bool osd_tx_was_declared(const struct lu_env *env, struct osd_thandle *oth, struct dt_object *dt, enum dt_txn_op op, loff_t p); +#ifdef HAVE_DQUOT_TRANSFER_WITH_USER_NS +#define osd_dquot_transfer(ns, i, a) dquot_transfer((ns), (i), (a)) +#else +#define osd_dquot_transfer(ns, i, a) dquot_transfer((i), (a)) +#endif + #endif /* _OSD_INTERNAL_H */ -- 1.8.3.1