mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-04-06 17:49:11 +03:00
Updates for snapshots_changed property
Currently, snapshots_changed property is stored in dd_props_zapobj, due to which the property is assumed to be local. This causes a difference in behavior with respect to other readonly properties. This commit stores the snapshots_changed property in dd_object. Source is not set to local in this case, which makes it consistent with other readonly properties. This commit also updates the date string format to include seconds. Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Umer Saleem <usaleem@ixsystems.com> Closes #13785
This commit is contained in:
parent
0c4064d9a0
commit
a582d52993
@ -2947,7 +2947,7 @@ zfs_prop_get(zfs_handle_t *zhp, zfs_prop_t prop, char *propbuf, size_t proplen,
|
|||||||
|
|
||||||
if (literal ||
|
if (literal ||
|
||||||
localtime_r(&time, &t) == NULL ||
|
localtime_r(&time, &t) == NULL ||
|
||||||
strftime(propbuf, proplen, "%a %b %e %k:%M %Y",
|
strftime(propbuf, proplen, "%a %b %e %k:%M:%S %Y",
|
||||||
&t) == 0)
|
&t) == 0)
|
||||||
(void) snprintf(propbuf, proplen, "%llu",
|
(void) snprintf(propbuf, proplen, "%llu",
|
||||||
(u_longlong_t)val);
|
(u_longlong_t)val);
|
||||||
|
@ -526,6 +526,9 @@ Specifies the time at which a snapshot for a dataset was last
|
|||||||
created or deleted.
|
created or deleted.
|
||||||
.Pp
|
.Pp
|
||||||
This allows us to be more efficient how often we query snapshots.
|
This allows us to be more efficient how often we query snapshots.
|
||||||
|
The property is persistent across mount and unmount operations only if the
|
||||||
|
.Sy extensible_dataset
|
||||||
|
feature is enabled.
|
||||||
.It Sy volblocksize
|
.It Sy volblocksize
|
||||||
For volumes, specifies the block size of the volume.
|
For volumes, specifies the block size of the volume.
|
||||||
The
|
The
|
||||||
|
@ -268,13 +268,15 @@ dsl_dir_hold_obj(dsl_pool_t *dp, uint64_t ddobj,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inode_timespec_t t = {0};
|
if (dsl_dir_is_zapified(dd)) {
|
||||||
zap_lookup(dd->dd_pool->dp_meta_objset,
|
inode_timespec_t t = {0};
|
||||||
dsl_dir_phys(dd)->dd_props_zapobj,
|
zap_lookup(dp->dp_meta_objset, ddobj,
|
||||||
zfs_prop_to_name(ZFS_PROP_SNAPSHOTS_CHANGED),
|
zfs_prop_to_name(ZFS_PROP_SNAPSHOTS_CHANGED),
|
||||||
sizeof (uint64_t),
|
sizeof (uint64_t),
|
||||||
sizeof (inode_timespec_t) / sizeof (uint64_t), &t);
|
sizeof (inode_timespec_t) / sizeof (uint64_t),
|
||||||
dd->dd_snap_cmtime = t;
|
&t);
|
||||||
|
dd->dd_snap_cmtime = t;
|
||||||
|
}
|
||||||
|
|
||||||
dmu_buf_init_user(&dd->dd_dbu, NULL, dsl_dir_evict_async,
|
dmu_buf_init_user(&dd->dd_dbu, NULL, dsl_dir_evict_async,
|
||||||
&dd->dd_dbuf);
|
&dd->dd_dbuf);
|
||||||
@ -2251,16 +2253,23 @@ dsl_dir_snap_cmtime(dsl_dir_t *dd)
|
|||||||
void
|
void
|
||||||
dsl_dir_snap_cmtime_update(dsl_dir_t *dd, dmu_tx_t *tx)
|
dsl_dir_snap_cmtime_update(dsl_dir_t *dd, dmu_tx_t *tx)
|
||||||
{
|
{
|
||||||
|
dsl_pool_t *dp = dmu_tx_pool(tx);
|
||||||
inode_timespec_t t;
|
inode_timespec_t t;
|
||||||
objset_t *mos = dd->dd_pool->dp_meta_objset;
|
|
||||||
uint64_t zapobj = dsl_dir_phys(dd)->dd_props_zapobj;
|
|
||||||
const char *prop_name = zfs_prop_to_name(ZFS_PROP_SNAPSHOTS_CHANGED);
|
|
||||||
|
|
||||||
gethrestime(&t);
|
gethrestime(&t);
|
||||||
|
|
||||||
mutex_enter(&dd->dd_lock);
|
mutex_enter(&dd->dd_lock);
|
||||||
dd->dd_snap_cmtime = t;
|
dd->dd_snap_cmtime = t;
|
||||||
VERIFY0(zap_update(mos, zapobj, prop_name, sizeof (uint64_t),
|
if (spa_feature_is_enabled(dp->dp_spa,
|
||||||
sizeof (inode_timespec_t) / sizeof (uint64_t), &t, tx));
|
SPA_FEATURE_EXTENSIBLE_DATASET)) {
|
||||||
|
objset_t *mos = dd->dd_pool->dp_meta_objset;
|
||||||
|
uint64_t ddobj = dd->dd_object;
|
||||||
|
dsl_dir_zapify(dd, tx);
|
||||||
|
VERIFY0(zap_update(mos, ddobj,
|
||||||
|
zfs_prop_to_name(ZFS_PROP_SNAPSHOTS_CHANGED),
|
||||||
|
sizeof (uint64_t),
|
||||||
|
sizeof (inode_timespec_t) / sizeof (uint64_t),
|
||||||
|
&t, tx));
|
||||||
|
}
|
||||||
mutex_exit(&dd->dd_lock);
|
mutex_exit(&dd->dd_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user