博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bluestore中的aio回调
阅读量:4215 次
发布时间:2019-05-26

本文共 1084 字,大约阅读时间需要 3 分钟。

在bluestore中open block时会传递一个cb函数,当对这个block异步写也就是aio写完成时会调用这个aio_cbint BlueStore::_open_bdev(bool create){  assert(bdev == NULL);  string p = path + "/block";  #aio_cb 时aio写完成时的回调函数,第四个参数static_cast
(this),是在回调函数中真正调用的函数, #这里的static_cast 表示指针强制转换 bdev = BlockDevice::create(cct, p, aio_cb, static_cast
(this)); int r = bdev->open(p); if (r < 0) goto fail; }static void aio_cb(void *priv, void *priv2){ BlueStore *store = static_cast
(priv); #再次强制类型转换 BlueStore::AioContext *c = static_cast
(priv2); #执行aio_finish表示本次写操作完成 c->aio_finish(store);}这里的AioContext的定义如下: struct AioContext { virtual void aio_finish(BlueStore *store) = 0; virtual ~AioContext() {} };在bluestore中 这个类的子类总共有两个struct TransContext : public AioContext { void aio_finish(BlueStore *store) override { store->txc_aio_finish(this); } }; struct DeferredBatch : public AioContext { void aio_finish(BlueStore *store) override { store->_deferred_aio_finish(osr); } };可见 这两个子类的aio_finish中有分别调用bluestore的txc_aio_finish和_deferred_aio_finish

转载地址:http://ujnmi.baihongyu.com/

你可能感兴趣的文章
中断API之disable_irq
查看>>
nova 中的guestfs
查看>>
nova中的localfs
查看>>
utils/rpm_build.sh
查看>>
查看模块参数
查看>>
udev重命名网口
查看>>
pgrep
查看>>
test-definitions/blob/master/toolset/util/parallel_cmds.py
查看>>
中断API之irq_activate
查看>>
中断API之tasklet_disable_nosync/tasklet_trylock/tasklet_unlock
查看>>
中断API之tasklet_init/tasklet_kill
查看>>
内存管理API之__free_pages
查看>>
内存管理API之__get_free_pages
查看>>
内存管理API之__get_vm_area
查看>>
内存管理API之krealloc
查看>>
内存管理API之ksize
查看>>
内存管理API之alloc_pages
查看>>
linux performance tool
查看>>
test-definitions/blob/master/auto-test/bazel/bazel.sh
查看>>
test-definitions/blob/master/auto-test/bigdata/bigdata.sh
查看>>