From: yury Date: Fri, 30 Jun 2006 12:50:25 +0000 (+0000) Subject: - commit not finished fid_is_local() related things, Nikita will finish OSD stuff... X-Git-Tag: v1_8_0_110~486^2~1510 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=4d97337ff584ea0fb3a3d96f505dd566a1f4012a;p=fs%2Flustre-release.git - commit not finished fid_is_local() related things, Nikita will finish OSD stuff in minute. --- diff --git a/lustre/fld/fld_handler.c b/lustre/fld/fld_handler.c index 2f1153c..841e664 100644 --- a/lustre/fld/fld_handler.c +++ b/lustre/fld/fld_handler.c @@ -94,7 +94,7 @@ static void __exit fld_mod_exit(void) } /* insert index entry and update cache */ -static int +int fld_server_create(struct lu_server_fld *fld, const struct lu_context *ctx, __u64 seq, mdsno_t mds) @@ -112,9 +112,10 @@ fld_server_create(struct lu_server_fld *fld, } RETURN(rc); } +EXPORT_SYMBOL(fld_server_create); /* delete index entry and update cache */ -static int +int fld_server_delete(struct lu_server_fld *fld, const struct lu_context *ctx, __u64 seq) @@ -123,9 +124,10 @@ fld_server_delete(struct lu_server_fld *fld, fld_cache_delete(fld_cache, seq); RETURN(fld_index_delete(fld, ctx, seq)); } +EXPORT_SYMBOL(fld_server_delete); /* lookup in cache first and then issue index lookup */ -static int +int fld_server_lookup(struct lu_server_fld *fld, const struct lu_context *ctx, __u64 seq, mdsno_t *mds) @@ -144,6 +146,7 @@ fld_server_lookup(struct lu_server_fld *fld, rc = fld_index_lookup(fld, ctx, seq, mds); RETURN(rc); } +EXPORT_SYMBOL(fld_server_lookup); static int fld_server_handle(struct lu_server_fld *fld, diff --git a/lustre/include/lustre_fid.h b/lustre/include/lustre_fid.h index 3758af3..1d0bc27 100644 --- a/lustre/include/lustre_fid.h +++ b/lustre/include/lustre_fid.h @@ -162,11 +162,27 @@ int seq_client_alloc_fid(struct lu_client_seq *seq, struct lu_fid *fid); /* Fids common stuff */ -static inline int fid_is_local(struct lu_site *site, +static inline int fid_is_local(const struct lu_context *ctx, + struct lu_site *site, const struct lu_fid *fid) { - /* XXX: fix this when fld is ready. */ - return 1; + mdsno_t mds; + + if (site->ls_fld == NULL) + return 1; + + /* XXX: this function checks also on-disk index, so it can't be used + * with spinlocks taken. --umka */ + rc = fld_server_lookup(site->ls_fld, ctx, + fid_seq(fid), *mds); + if (rc) { + CERROR("can't lookup FLD for seq "LPU64", rc %d. " + "Considering local fid anyway\n", fid_seq(fid), + rc); + return 1; + } + + return (mds == ls_node_id); } void fid_to_le(struct lu_fid *dst, const struct lu_fid *src); diff --git a/lustre/include/lustre_fld.h b/lustre/include/lustre_fld.h index f57fa28..2b1c298 100644 --- a/lustre/include/lustre_fld.h +++ b/lustre/include/lustre_fld.h @@ -94,6 +94,18 @@ int fld_server_init(struct lu_server_fld *fld, void fld_server_fini(struct lu_server_fld *fld, const struct lu_context *ctx); +int fld_server_lookup(struct lu_server_fld *fld, + const struct lu_context *ctx, + __u64 seq, mdsno_t *mds); + +int fld_server_create(struct lu_server_fld *fld, + const struct lu_context *ctx, + __u64 seq, mdsno_t mds); + +int fld_server_delete(struct lu_server_fld *fld, + const struct lu_context *ctx, + __u64 seq); + /* client methods */ int fld_client_init(struct lu_client_fld *fld, const char *uuid,