diff --git a/sys/kern/kern_osd.c b/sys/kern/kern_osd.c --- a/sys/kern/kern_osd.c +++ b/sys/kern/kern_osd.c @@ -73,6 +73,9 @@ } \ } while (0) +#define OSD_METHOD(osdm, slot, method) \ + ((osdm).osd_methods[((slot) - 1) * (osdm).osd_nmethods + (method)]) + static void do_osd_del(u_int type, struct osd *osd, u_int slot, int list_locked); @@ -139,8 +142,8 @@ osdm[type].osd_destructors[i] = destructor; if (osdm[type].osd_nmethods != 0) { for (m = 0; m < osdm[type].osd_nmethods; m++) - osdm[type].osd_methods[i * osdm[type].osd_nmethods + m] - = methods != NULL ? methods[m] : NULL; + OSD_METHOD(osdm[type], i + 1, m) = + methods != NULL ? methods[m] : NULL; } sx_xunlock(&osdm[type].osd_module_lock); return (i + 1); @@ -391,8 +394,7 @@ /* Hole in the slot map; avoid dereferencing. */ if (osdm[type].osd_destructors[i] == NULL) continue; - methodfun = osdm[type].osd_methods[i * osdm[type].osd_nmethods + - method]; + methodfun = OSD_METHOD(osdm[type], i + 1, method); if (methodfun != NULL && (error = methodfun(obj, data)) != 0) break; }