])
])
+#
+# LC_LBUG_WITH_LOC_IN_OBJTOOL
+#
+# Linux v6.4-rc2-10-g34245659debd
+# objtool: Remove superfluous global_noreturns entries
+#
+AC_DEFUN([LC_LBUG_WITH_LOC_IN_OBJTOOL], [
+ AC_MSG_CHECKING([if lbug_with_loc is in objtool global_noreturns array])
+ AS_IF([grep -q lbug_with_loc $LINUX_OBJ/tools/objtool/objtool],[
+ AC_DEFINE(HAVE_LBUG_WITH_LOC_IN_OBJTOOL, 1,
+ [lbug_with_loc is in objtool global_noreturns array])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+]) # LC_LBUG_WITH_LOC_IN_OBJTOOL
+
AC_DEFUN([LB_PROG_LINUX_SRC], [
LB2_SRC_CHECK_CONFIG([MODULES])
LB2_SRC_CHECK_CONFIG([MODVERSIONS])
LB_LINUX_SYMVERFILE
# 2.6.28
LC_MODULE_LOADING
+# 6.5
+LC_LBUG_WITH_LOC_IN_OBJTOOL
])
#
# define LINVRNT(exp) ((void)sizeof!!(exp))
#endif
-void __noreturn lbug_with_loc(struct libcfs_debug_msg_data *msg);
+void
+#ifdef HAVE_LBUG_WITH_LOC_IN_OBJTOOL
+__noreturn
+#endif
+lbug_with_loc(struct libcfs_debug_msg_data *msg);
#define LBUG() \
do { \
- LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_EMERG, NULL); \
- lbug_with_loc(&msgdata); \
+ LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_EMERG, NULL); \
+ lbug_with_loc(&msgdata); \
+ break; \
} while(0)
/*
#include <linux/stacktrace.h>
#include <linux/utsname.h>
#include <linux/kallsyms.h>
+#include <linux/delay.h>
#ifdef HAVE_PANIC_NOTIFIER_H
#include <linux/panic_notifier.h>
#endif
}
EXPORT_SYMBOL(libcfs_debug_dumplog);
-void __noreturn lbug_with_loc(struct libcfs_debug_msg_data *msgdata)
+void
+#ifdef HAVE_LBUG_WITH_LOC_IN_OBJTOOL
+__noreturn
+#endif
+lbug_with_loc(struct libcfs_debug_msg_data *msgdata)
{
libcfs_catastrophe = 1;
libcfs_debug_msg(msgdata, "LBUG\n");
}
dump_stack();
- if (libcfs_panic_on_lbug)
+ if (libcfs_panic_on_lbug) {
+ msleep(cfs_time_seconds(6));
panic("LBUG");
- else
+ } else
libcfs_debug_dumplog();
set_current_state(TASK_UNINTERRUPTIBLE);
while (1)
schedule();
+#ifndef HAVE_LBUG_WITH_LOC_IN_OBJTOOL
+ /* not reached */
+ panic("LBUG after schedule.");
+#endif
}
EXPORT_SYMBOL(lbug_with_loc);
return PCC_EXPRESSION_DELIM_GT;
default:
LBUG();
+ return NULL;
}
}
return stats->ls_biggest_alloc_num;
default:
LBUG();
+ return -EINVAL;
}
}
static int osp_object_invariant(const struct lu_object *o)
{
LBUG();
+ return -EINVAL;
}
const struct lu_object_operations osp_lu_obj_ops = {
return lustre_shrink_msg_v2(msg, segment, newlen, move_data);
default:
LASSERTF(0, "incorrect message magic: %08x\n", msg->lm_magic);
+ return -EINVAL;
}
}
EXPORT_SYMBOL(lustre_shrink_msg);
return lustre_grow_msg_v2(msg, segment, newlen);
default:
LASSERTF(0, "incorrect message magic: %08x\n", msg->lm_magic);
+ return -EINVAL;
}
}
EXPORT_SYMBOL(lustre_grow_msg);