diff --git a/core/pagecache.cc b/core/pagecache.cc index 42567a240cbd146dc7d223210a3f25504dc6c9e9..fb87523b11844908c0607dd2a26ae58dee84ab0b 100644 --- a/core/pagecache.cc +++ b/core/pagecache.cc @@ -145,29 +145,28 @@ public: class cached_page_write : public cached_page { private: - struct dentry* _dp; + struct vnode* _vp; public: cached_page_write(hashkey key, vfs_file* fp) : cached_page(key, memory::alloc_page()) { - _dp = fp->f_dentry; - dref(_dp); + _vp = fp->f_dentry->d_vnode; + vref(_vp); } ~cached_page_write() { if (_page) { writeback(); memory::free_page(_page); - drele(_dp); + vrele(_vp); } } int writeback() { - struct vnode *vp = _dp->d_vnode; int error; struct iovec iov {_page, mmu::page_size}; struct uio uio {&iov, 1, _key.offset, mmu::page_size, UIO_WRITE}; - vn_lock(vp); - error = VOP_WRITE(vp, &uio, 0); - vn_unlock(vp); + vn_lock(_vp); + error = VOP_WRITE(_vp, &uio, 0); + vn_unlock(_vp); return error; } @@ -175,7 +174,7 @@ public: assert(boost::get<std::nullptr_t>(_ptes) == nullptr); void *p = _page; _page = nullptr; - drele(_dp); + vrele(_vp); return p; } };