Set 'zfs_expire_snapshot=0' to disable auto-unmount

There are cases where it's desirable that auto-mounted snapshots
not expire after a fixed duration.  They should be unmounted only
when the filesystem they are a snapshot of is unmounted.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
This commit is contained in:
Brian Behlendorf 2015-12-10 15:23:26 -08:00
parent a22502c9e6
commit 5e94284fe5

View File

@ -333,6 +333,11 @@ snapentry_expire(void *data)
spa_t *spa = se->se_spa; spa_t *spa = se->se_spa;
uint64_t objsetid = se->se_objsetid; uint64_t objsetid = se->se_objsetid;
if (zfs_expire_snapshot <= 0) {
zfsctl_snapshot_rele(se);
return;
}
se->se_taskqid = -1; se->se_taskqid = -1;
(void) zfsctl_snapshot_unmount(se->se_name, MNT_EXPIRE); (void) zfsctl_snapshot_unmount(se->se_name, MNT_EXPIRE);
zfsctl_snapshot_rele(se); zfsctl_snapshot_rele(se);
@ -373,6 +378,9 @@ zfsctl_snapshot_unmount_delay_impl(zfs_snapentry_t *se, int delay)
{ {
ASSERT3S(se->se_taskqid, ==, -1); ASSERT3S(se->se_taskqid, ==, -1);
if (delay <= 0)
return;
se->se_taskqid = taskq_dispatch_delay(zfs_expire_taskq, se->se_taskqid = taskq_dispatch_delay(zfs_expire_taskq,
snapentry_expire, se, TQ_SLEEP, ddi_get_lbolt() + delay * HZ); snapentry_expire, se, TQ_SLEEP, ddi_get_lbolt() + delay * HZ);
zfsctl_snapshot_hold(se); zfsctl_snapshot_hold(se);