Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions include/zfs_crrd.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,17 @@ typedef struct {
rrd_t dbr_months;
} dbrrd_t;

size_t rrd_len(rrd_t *rrd);
size_t rrd_len(const rrd_t *rrd);

const rrd_data_t *rrd_entry(rrd_t *r, size_t i);
const rrd_data_t *rrd_entry(const rrd_t *r, size_t i);
rrd_data_t *rrd_tail_entry(rrd_t *rrd);
uint64_t rrd_tail(rrd_t *rrd);
uint64_t rrd_get(rrd_t *rrd, size_t i);
uint64_t rrd_get(const rrd_t *rrd, size_t i);

void rrd_add(rrd_t *rrd, hrtime_t time, uint64_t txg);

void dbrrd_add(dbrrd_t *db, hrtime_t time, uint64_t txg);
uint64_t dbrrd_query(dbrrd_t *r, hrtime_t tv, dbrrd_rounding_t rouding);
hrtime_t dbrrd_latest_time(dbrrd_t *r);

#endif
8 changes: 7 additions & 1 deletion module/os/freebsd/zfs/zfs_vfsops.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
#include <sys/dsl_prop.h>
#include <sys/dsl_dataset.h>
#include <sys/dsl_deleg.h>
#include <sys/spa.h>
#include <sys/spa_impl.h>
#include <sys/zap.h>
#include <sys/sa.h>
#include <sys/sa_impl.h>
Expand All @@ -69,6 +69,7 @@
#include <sys/zfs_quota.h>

#include "zfs_comutil.h"
#include "zfs_crrd.h"

#ifndef MNTK_VMSETSIZE_BUG
#define MNTK_VMSETSIZE_BUG 0
Expand Down Expand Up @@ -1315,7 +1316,12 @@ zfs_domount(vfs_t *vfsp, char *osname)
dmu_objset_disown(zfsvfs->z_os, B_TRUE, zfsvfs);
zfsvfs_free(zfsvfs);
} else {
spa_t *spa = zfsvfs->z_os->os_spa;

atomic_inc_32(&zfs_active_fs_count);

vfsp->mnt_time = dbrrd_latest_time(&spa->spa_txg_log_time);
vfsp->mnt_time = MAX(vfsp->mnt_time, spa->spa_load_txg_ts);
}

return (error);
Expand Down
22 changes: 19 additions & 3 deletions module/zfs/zfs_crrd.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,14 @@ rrd_tail(rrd_t *rrd)
* rrd_get works from 0..rrd_len()-1.
*/
size_t
rrd_len(rrd_t *rrd)
rrd_len(const rrd_t *rrd)
{

return (rrd->rrd_length);
}

const rrd_data_t *
rrd_entry(rrd_t *rrd, size_t i)
rrd_entry(const rrd_t *rrd, size_t i)
{
size_t n;

Expand All @@ -119,7 +119,7 @@ rrd_entry(rrd_t *rrd, size_t i)
}

uint64_t
rrd_get(rrd_t *rrd, size_t i)
rrd_get(const rrd_t *rrd, size_t i)
{
const rrd_data_t *data = rrd_entry(rrd, i);

Expand Down Expand Up @@ -226,3 +226,19 @@ dbrrd_query(dbrrd_t *r, hrtime_t tv, dbrrd_rounding_t rounding)

return (data == NULL ? 0 : data->rrdd_txg);
}

hrtime_t
dbrrd_latest_time(dbrrd_t *r)
{
const rrd_data_t *head;
const rrd_t *curdb;
size_t dblen;

curdb = &r->dbr_minutes;
dblen = rrd_len(curdb);
if (dblen == 0)
return (0);

head = rrd_entry(curdb, dblen - 1);
return (head->rrdd_time);
}
Loading