+
+ return 0;
+}
+
+static void lfsck_linkea_del_buf(struct linkea_data *ldata,
+ const struct lu_name *lname)
+{
+ LASSERT(ldata->ld_leh != NULL && ldata->ld_lee != NULL);
+
+ /* If current record is corrupted, all the subsequent
+ * records will be dropped. */
+ if (unlikely(ldata->ld_reclen <= 0 ||
+ ldata->ld_reclen + sizeof(struct link_ea_header) >
+ ldata->ld_leh->leh_len)) {
+ void *ptr = ldata->ld_lee;
+
+ ldata->ld_leh->leh_len = sizeof(struct link_ea_header);
+ ldata->ld_leh->leh_reccount = 0;
+ linkea_first_entry(ldata);
+ while (ldata->ld_lee != NULL &&
+ (char *)ldata->ld_lee < (char *)ptr) {
+ int reclen = (ldata->ld_lee->lee_reclen[0] << 8) |
+ ldata->ld_lee->lee_reclen[1];
+
+ ldata->ld_leh->leh_len += reclen;
+ ldata->ld_leh->leh_reccount++;
+ ldata->ld_lee = (struct link_ea_entry *)
+ ((char *)ldata->ld_lee + reclen);
+ }
+
+ ldata->ld_lee = NULL;
+ } else {
+ linkea_del_buf(ldata, lname);
+ }