}
/* 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)
}
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)
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)
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,
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);
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,