diff options
author | Brian Behlendorf <[email protected]> | 2014-05-09 14:51:20 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-12-04 09:39:20 -0800 |
commit | 072484504fa3c905f5d3712abff765cf33c1e72d (patch) | |
tree | 737753195b53da498a081cf31d779a3d4cc3259c | |
parent | 917b8c5cec074869a0bf4e9956b7d24f14221d84 (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
-rw-r--r-- | include/sys/zap.h | 1 | ||||
-rw-r--r-- | module/zfs/zap_micro.c | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/include/sys/zap.h b/include/sys/zap.h index bc15237bf..ed60b86db 100644 --- a/include/sys/zap.h +++ b/include/sys/zap.h @@ -213,6 +213,7 @@ int zap_lookup_norm(objset_t *ds, uint64_t zapobj, const char *name, int zap_lookup_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf); int zap_contains(objset_t *ds, uint64_t zapobj, const char *name); +int zap_prefetch(objset_t *os, uint64_t zapobj, const char *name); int zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, int key_numints); 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); |