Linux 4.12 compat: CURRENT_TIME removed
Linux 4.9 added current_time() as the preferred interface to get the filesystem time. CURRENT_TIME was retired in Linux 4.12. Reviewed-by: Chunwei Chen <david.chen@osnexus.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #6114
This commit is contained in:
parent
e4cb6ee6a5
commit
21fd04ec40
|
@ -0,0 +1,19 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 4.9, current_time() added
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_CURRENT_TIME],
|
||||||
|
[AC_MSG_CHECKING([whether current_time() exists])
|
||||||
|
ZFS_LINUX_TRY_COMPILE_SYMBOL([
|
||||||
|
#include <linux/fs.h>
|
||||||
|
], [
|
||||||
|
struct inode ip;
|
||||||
|
struct timespec now __attribute__ ((unused));
|
||||||
|
|
||||||
|
now = current_time(&ip);
|
||||||
|
], [current_time], [fs/inode.c], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_CURRENT_TIME, 1, [current_time() exists])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -110,6 +110,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||||
ZFS_AC_KERNEL_GENERIC_IO_ACCT
|
ZFS_AC_KERNEL_GENERIC_IO_ACCT
|
||||||
ZFS_AC_KERNEL_RENAME_WANTS_FLAGS
|
ZFS_AC_KERNEL_RENAME_WANTS_FLAGS
|
||||||
ZFS_AC_KERNEL_HAVE_GENERIC_SETXATTR
|
ZFS_AC_KERNEL_HAVE_GENERIC_SETXATTR
|
||||||
|
ZFS_AC_KERNEL_CURRENT_TIME
|
||||||
|
|
||||||
AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
|
AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
|
||||||
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
|
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
|
||||||
|
|
|
@ -479,5 +479,16 @@ func(const struct path *path, struct kstat *stat, u32 request_mask, \
|
||||||
#error
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 4.9 API change
|
||||||
|
* Preferred interface to get the current FS time.
|
||||||
|
*/
|
||||||
|
#if !defined(HAVE_CURRENT_TIME)
|
||||||
|
static inline struct timespec
|
||||||
|
current_time(struct inode *ip)
|
||||||
|
{
|
||||||
|
return (timespec_trunc(current_kernel_time(), ip->i_sb->s_time_gran));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _ZFS_VFS_H */
|
#endif /* _ZFS_VFS_H */
|
||||||
|
|
|
@ -455,7 +455,7 @@ static struct inode *
|
||||||
zfsctl_inode_alloc(zfs_sb_t *zsb, uint64_t id,
|
zfsctl_inode_alloc(zfs_sb_t *zsb, uint64_t id,
|
||||||
const struct file_operations *fops, const struct inode_operations *ops)
|
const struct file_operations *fops, const struct inode_operations *ops)
|
||||||
{
|
{
|
||||||
struct timespec now = current_fs_time(zsb->z_sb);
|
struct timespec now;
|
||||||
struct inode *ip;
|
struct inode *ip;
|
||||||
znode_t *zp;
|
znode_t *zp;
|
||||||
|
|
||||||
|
@ -463,6 +463,7 @@ zfsctl_inode_alloc(zfs_sb_t *zsb, uint64_t id,
|
||||||
if (ip == NULL)
|
if (ip == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
now = current_time(ip);
|
||||||
zp = ITOZ(ip);
|
zp = ITOZ(ip);
|
||||||
ASSERT3P(zp->z_dirlocks, ==, NULL);
|
ASSERT3P(zp->z_dirlocks, ==, NULL);
|
||||||
ASSERT3P(zp->z_acl_cached, ==, NULL);
|
ASSERT3P(zp->z_acl_cached, ==, NULL);
|
||||||
|
|
|
@ -103,8 +103,10 @@ static int
|
||||||
zpl_root_getattr_impl(const struct path *path, struct kstat *stat,
|
zpl_root_getattr_impl(const struct path *path, struct kstat *stat,
|
||||||
u32 request_mask, unsigned int query_flags)
|
u32 request_mask, unsigned int query_flags)
|
||||||
{
|
{
|
||||||
generic_fillattr(path->dentry->d_inode, stat);
|
struct inode *ip = path->dentry->d_inode;
|
||||||
stat->atime = CURRENT_TIME;
|
|
||||||
|
generic_fillattr(ip, stat);
|
||||||
|
stat->atime = current_time(ip);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -377,13 +379,14 @@ static int
|
||||||
zpl_snapdir_getattr_impl(const struct path *path, struct kstat *stat,
|
zpl_snapdir_getattr_impl(const struct path *path, struct kstat *stat,
|
||||||
u32 request_mask, unsigned int query_flags)
|
u32 request_mask, unsigned int query_flags)
|
||||||
{
|
{
|
||||||
|
struct inode *ip = path->dentry->d_inode;
|
||||||
zfs_sb_t *zsb = ITOZSB(path->dentry->d_inode);
|
zfs_sb_t *zsb = ITOZSB(path->dentry->d_inode);
|
||||||
|
|
||||||
ZFS_ENTER(zsb);
|
ZFS_ENTER(zsb);
|
||||||
generic_fillattr(path->dentry->d_inode, stat);
|
generic_fillattr(path->dentry->d_inode, stat);
|
||||||
stat->nlink = stat->size = 2;
|
stat->nlink = stat->size = 2;
|
||||||
stat->ctime = stat->mtime = dmu_objset_snap_cmtime(zsb->z_os);
|
stat->ctime = stat->mtime = dmu_objset_snap_cmtime(zsb->z_os);
|
||||||
stat->atime = CURRENT_TIME;
|
stat->atime = current_time(ip);
|
||||||
ZFS_EXIT(zsb);
|
ZFS_EXIT(zsb);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
|
@ -521,7 +524,7 @@ zpl_shares_getattr_impl(const struct path *path, struct kstat *stat,
|
||||||
if (zsb->z_shares_dir == 0) {
|
if (zsb->z_shares_dir == 0) {
|
||||||
generic_fillattr(path->dentry->d_inode, stat);
|
generic_fillattr(path->dentry->d_inode, stat);
|
||||||
stat->nlink = stat->size = 2;
|
stat->nlink = stat->size = 2;
|
||||||
stat->atime = CURRENT_TIME;
|
stat->atime = current_time(ip);
|
||||||
ZFS_EXIT(zsb);
|
ZFS_EXIT(zsb);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -557,7 +557,7 @@ zpl_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
|
||||||
return (-EMLINK);
|
return (-EMLINK);
|
||||||
|
|
||||||
crhold(cr);
|
crhold(cr);
|
||||||
ip->i_ctime = CURRENT_TIME_SEC;
|
ip->i_ctime = current_time(ip);
|
||||||
igrab(ip); /* Use ihold() if available */
|
igrab(ip); /* Use ihold() if available */
|
||||||
|
|
||||||
cookie = spl_fstrans_mark();
|
cookie = spl_fstrans_mark();
|
||||||
|
|
|
@ -938,7 +938,6 @@ xattr_handler_t zpl_xattr_security_handler = {
|
||||||
int
|
int
|
||||||
zpl_set_acl(struct inode *ip, struct posix_acl *acl, int type)
|
zpl_set_acl(struct inode *ip, struct posix_acl *acl, int type)
|
||||||
{
|
{
|
||||||
struct super_block *sb = ITOZSB(ip)->z_sb;
|
|
||||||
char *name, *value = NULL;
|
char *name, *value = NULL;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
@ -964,7 +963,7 @@ zpl_set_acl(struct inode *ip, struct posix_acl *acl, int type)
|
||||||
*/
|
*/
|
||||||
if (ip->i_mode != mode) {
|
if (ip->i_mode != mode) {
|
||||||
ip->i_mode = mode;
|
ip->i_mode = mode;
|
||||||
ip->i_ctime = current_fs_time(sb);
|
ip->i_ctime = current_time(ip);
|
||||||
zfs_mark_inode_dirty(ip);
|
zfs_mark_inode_dirty(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1130,7 +1129,7 @@ zpl_init_acl(struct inode *ip, struct inode *dir)
|
||||||
|
|
||||||
if (!acl) {
|
if (!acl) {
|
||||||
ip->i_mode &= ~current_umask();
|
ip->i_mode &= ~current_umask();
|
||||||
ip->i_ctime = current_fs_time(ITOZSB(ip)->z_sb);
|
ip->i_ctime = current_time(ip);
|
||||||
zfs_mark_inode_dirty(ip);
|
zfs_mark_inode_dirty(ip);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue