MCPcopy Create free account
hub / github.com/ceph/ceph / create_file_event

Method create_file_event

src/msg/async/Event.cc:253–298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

251}
252
253int EventCenter::create_file_event(int fd, int mask, EventCallbackRef ctxt)
254{
255 ceph_assert(in_thread());
256 int r = 0;
257 if (fd >= nevent) {
258 int new_size = nevent << 2;
259 while (fd >= new_size)
260 new_size <<= 2;
261 ldout(cct, 20) << __func__ << " event count exceed " << nevent << ", expand to " << new_size << dendl;
262 r = driver->resize_events(new_size);
263 if (r < 0) {
264 lderr(cct) << __func__ << " event count is exceed." << dendl;
265 return -ERANGE;
266 }
267 file_events.resize(new_size);
268 nevent = new_size;
269 }
270
271 EventCenter::FileEvent *event = _get_file_event(fd);
272 ldout(cct, 20) << __func__ << " create event started fd=" << fd << " mask=" << mask
273 << " original mask is " << event->mask << dendl;
274 if (event->mask == mask)
275 return 0;
276
277 r = driver->add_event(fd, event->mask, mask);
278 if (r < 0) {
279 // Actually we don't allow any failed error code, caller doesn't prepare to
280 // handle error status. So now we need to assert failure here. In practice,
281 // add_event shouldn't report error, otherwise it must be a innermost bug!
282 lderr(cct) << __func__ << " add event failed, ret=" << r << " fd=" << fd
283 << " mask=" << mask << " original mask is " << event->mask << dendl;
284 ceph_abort_msg("BUG!");
285 return r;
286 }
287
288 event->mask |= mask;
289 if (mask & EVENT_READABLE) {
290 event->read_cb = ctxt;
291 }
292 if (mask & EVENT_WRITABLE) {
293 event->write_cb = ctxt;
294 }
295 ldout(cct, 20) << __func__ << " create event end fd=" << fd << " mask=" << mask
296 << " current mask is " << event->mask << dendl;
297 return 0;
298}
299
300void EventCenter::delete_file_event(int fd, int mask)
301{

Callers 15

TESTFunction · 0.80
TEST_PFunction · 0.80
ClientMethod · 0.80
do_write_requestMethod · 0.80
ServerMethod · 0.80
do_write_requestMethod · 0.80
startMethod · 0.80
startMethod · 0.80
_try_sendMethod · 0.80
processMethod · 0.80
reuse_connectionMethod · 0.80
replaceMethod · 0.80

Calls 3

resize_eventsMethod · 0.45
resizeMethod · 0.45
add_eventMethod · 0.45

Tested by 7

TESTFunction · 0.64
TEST_PFunction · 0.64
ClientMethod · 0.64
do_write_requestMethod · 0.64
ServerMethod · 0.64
do_write_requestMethod · 0.64
startMethod · 0.64