X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmdd%2Fmdd_device.c;h=52be69acb6fd0a0a4ba32e77d85aef2fd1815ed1;hp=543f3e0ae751664713dc5f3caf15e8915e479068;hb=3442db6faf685fbdbd092bdfdc8d273e4990a141;hpb=20ffe2191c828d3e4922429f2a98584d4e41eb53 diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c index 543f3e0..52be69a 100644 --- a/lustre/mdd/mdd_device.c +++ b/lustre/mdd/mdd_device.c @@ -141,8 +141,18 @@ static int mdd_init0(const struct lu_env *env, struct mdd_device *mdd, RETURN(rc); mdd->mdd_atime_diff = MAX_ATIME_DIFF; - /* sync permission changes */ - mdd->mdd_sync_permission = 1; + /* sync permission changes */ + mdd->mdd_sync_permission = 1; + /* enable changelog garbage collection */ + mdd->mdd_changelog_gc = 1; + /* with a significant amount of idle time */ + mdd->mdd_changelog_max_idle_time = CHLOG_MAX_IDLE_TIME; + /* or a significant amount of late indexes */ + mdd->mdd_changelog_max_idle_indexes = CHLOG_MAX_IDLE_INDEXES; + /* with a reasonable interval between each check */ + mdd->mdd_changelog_min_gc_interval = CHLOG_MIN_GC_INTERVAL; + /* with a very few number of free entries */ + mdd->mdd_changelog_min_free_cat_entries = CHLOG_MIN_FREE_CAT_ENTRIES; dt_conf_get(env, mdd->mdd_child, &mdd->mdd_dt_conf); @@ -1337,6 +1347,11 @@ static int mdd_changelog_user_register(const struct lu_env *env, } *id = rec->cur_id = ++mdd->mdd_cl.mc_lastuser; rec->cur_endrec = mdd->mdd_cl.mc_index; + + rec->cur_time = (__u32)get_seconds(); + if (OBD_FAIL_CHECK(OBD_FAIL_TIME_IN_CHLOG_USER)) + rec->cur_time = 0; + spin_unlock(&mdd->mdd_cl.mc_user_lock); rc = llog_cat_add(env, ctxt->loc_handle, &rec->cur_hdr, NULL); @@ -1403,8 +1418,8 @@ static int mdd_changelog_user_purge_cb(const struct lu_env *env, RETURN(rc); } -static int mdd_changelog_user_purge(const struct lu_env *env, - struct mdd_device *mdd, __u32 id) +int mdd_changelog_user_purge(const struct lu_env *env, + struct mdd_device *mdd, __u32 id) { struct mdd_changelog_user_purge mcup = { .mcup_id = id, @@ -1510,6 +1525,11 @@ static int mdd_changelog_clear_cb(const struct lu_env *env, * We now know the record to flush. */ rec->cur_endrec = mcuc->mcuc_endrec; + + rec->cur_time = (__u32)get_seconds(); + if (OBD_FAIL_CHECK(OBD_FAIL_TIME_IN_CHLOG_USER)) + rec->cur_time = 0; + mcuc->mcuc_flush = true; CDEBUG(D_IOCTL, "Rewriting changelog user %u endrec to %llu\n",