diff options
author | Brian Behlendorf <[email protected]> | 2014-05-09 14:51:20 -0700 |
---|---|---|
committer | Ned Bass <[email protected]> | 2015-12-23 17:29:34 -0800 |
commit | 627b35a68de3b42acf6d3f92fdac1b344c96c020 (patch) | |
tree | f28ea67745778e6cb8d2f4f1fdd1c850c21221ae /module/zfs/zap_micro.c | |
parent | 585607136796e9b93dd6e204ea8eb11ae045c62d (diff) |
Add zap_prefetch() interface
Provide a generic interface to prefetch ZAP entries by name. This
functionality is being added for external consumers such as Lustre.
It is based of the existing zap_prefetch_uint64() version which is
used by the deduplication code.
Signed-off-by: Brian Behlendorf <[email protected]>
Signed-off-by: Richard Yao <[email protected]>
Closes #4061
Diffstat (limited to 'module/zfs/zap_micro.c')
-rw-r--r-- | module/zfs/zap_micro.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/module/zfs/zap_micro.c b/module/zfs/zap_micro.c index 29406e660..85b465b05 100644 --- a/module/zfs/zap_micro.c +++ b/module/zfs/zap_micro.c @@ -814,6 +814,28 @@ zap_lookup_norm(objset_t *os, uint64_t zapobj, const char *name, } int +zap_prefetch(objset_t *os, uint64_t zapobj, const char *name) +{ + zap_t *zap; + int err; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, &zap); + if (err) + return (err); + zn = zap_name_alloc(zap, name, MT_EXACT); + if (zn == NULL) { + zap_unlockdir(zap); + return (SET_ERROR(ENOTSUP)); + } + + fzap_prefetch(zn); + zap_name_free(zn); + zap_unlockdir(zap); + return (err); +} + +int zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, int key_numints) { @@ -1427,6 +1449,7 @@ EXPORT_SYMBOL(zap_lookup); EXPORT_SYMBOL(zap_lookup_norm); EXPORT_SYMBOL(zap_lookup_uint64); EXPORT_SYMBOL(zap_contains); +EXPORT_SYMBOL(zap_prefetch); EXPORT_SYMBOL(zap_prefetch_uint64); EXPORT_SYMBOL(zap_count_write); EXPORT_SYMBOL(zap_add); |