mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 11:25:21 +01:00
kern: osd: abstract away the math for locating a slot method
It's relatively simple, but we'll do it a couple of times; pull it out into a macro. Reviewed by: imp (previous version), jamie Differential Revision: https://reviews.freebsd.org/D48074
This commit is contained in:
1 parent
65fba082f4
commit
72ebcfae48
1 file changed
+6
-4
+6
-4
@@ -73,6 +73,9 @@ SYSCTL_INT(_debug, OID_AUTO, osd, CTLFLAG_RWTUN, &osd_debug, 0, "OSD debug level
|
||||
} \
|
||||
} 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 @@ osd_register(u_int type, osd_destructor_t destructor, const osd_method_t *method
|
||||
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 @@ osd_call(u_int type, u_int method, void *obj, void *data)
|
||||
/* 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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user