-/**
- * Get current minimum entry from striped directory
- *
- * This function will search the dir entry, whose hash value is the
- * closest(>=) to @hash_offset, from all of sub-stripes, and it is
- * only being called for striped directory.
- *
- * \param[in] exp export of LMV
- * \param[in] op_data parameters transferred beween client MD stack
- * stripe_information will be included in this
- * parameter
- * \param[in] cb_op ldlm callback being used in enqueue in
- * mdc_read_page
- * \param[in] hash_offset the hash value, which is used to locate
- * minum(closet) dir entry
- * \param[in|out] stripe_offset the caller use this to indicate the stripe
- * index of last entry, so to avoid hash conflict
- * between stripes. It will also be used to
- * return the stripe index of current dir entry.
- * \param[in|out] entp the minum entry and it also is being used
- * to input the last dir entry to resolve the
- * hash conflict
- *
- * \param[out] ppage the page which holds the minum entry
- *
- * \retval = 0 get the entry successfully
- * negative errno (< 0) does not get the entry
- */
-static int lmv_get_min_striped_entry(struct obd_export *exp,
- struct md_op_data *op_data,
- struct md_callback *cb_op,
- __u64 hash_offset, int *stripe_offset,
- struct lu_dirent **entp,
- struct page **ppage)
+struct stripe_dirent {
+ struct page *sd_page;
+ struct lu_dirpage *sd_dp;
+ struct lu_dirent *sd_ent;
+ bool sd_eof;
+};
+
+struct lmv_dir_ctxt {
+ struct lmv_obd *ldc_lmv;
+ struct md_op_data *ldc_op_data;
+ struct md_callback *ldc_cb_op;
+ __u64 ldc_hash;
+ int ldc_count;
+ struct stripe_dirent ldc_stripes[0];
+};
+
+static inline void put_stripe_dirent(struct stripe_dirent *stripe)