Lines Matching refs:ref

73 								PrecacheIO(file_cache_ref* ref, off_t offset,
99 typedef status_t (*cache_func)(file_cache_ref* ref, void* cookie, off_t offset,
119 PrecacheIO::PrecacheIO(file_cache_ref* ref, off_t offset, generic_size_t size)
121 fRef(ref),
122 fCache(ref->cache),
255 access_is_sequential(file_cache_ref* ref)
257 return ref->last_access[ref->last_access_index] != 0;
262 push_access(file_cache_ref* ref, off_t offset, generic_size_t bytes,
265 TRACE(("%p: push %lld, %ld, %s\n", ref, offset, bytes,
268 int32 index = ref->last_access_index;
273 if (offset != ref->LastAccess(previous, isWrite))
274 ref->last_access[previous] = 0;
276 ref->SetLastAccess(index, offset + bytes, isWrite);
280 ref->last_access_index = index;
285 reserve_pages(file_cache_ref* ref, vm_page_reservation* reservation,
289 VMCache* cache = ref->cache;
293 && access_is_sequential(ref)) {
300 int32 index = ref->last_access_index;
306 ref->LastAccessPageOffset(previous, true),
307 ref->LastAccessPageOffset(index, true));
334 read_pages_and_clear_partial(file_cache_ref* ref, void* cookie, off_t offset,
340 status_t status = vfs_read_pages(ref->vnode, cookie, offset, vecs, count,
345 if (offset + (off_t)bytesEnd > ref->cache->virtual_end)
346 bytesEnd = ref->cache->virtual_end - offset;
375 read_into_cache(file_cache_ref* ref, void* cookie, off_t offset,
382 VMCache* cache = ref->cache;
405 push_access(ref, offset, bufferSize, false);
410 status_t status = read_pages_and_clear_partial(ref, cookie, offset, vecs,
444 reserve_pages(ref, reservation, reservePages, false);
459 read_from_file(file_cache_ref* ref, void* cookie, off_t offset,
473 push_access(ref, offset, bufferSize, false);
474 ref->cache->Unlock();
478 status_t status = vfs_read_pages(ref->vnode, cookie, offset + pageOffset,
482 reserve_pages(ref, reservation, reservePages, false);
484 ref->cache->Lock();
496 write_to_cache(file_cache_ref* ref, void* cookie, off_t offset,
526 ref->cache->InsertPage(page, offset + pos);
532 push_access(ref, offset, bufferSize, true);
533 ref->cache->Unlock();
544 status = vfs_read_pages(ref->vnode, cookie, offset, &readVec, 1,
557 if ((off_t)(offset + pageOffset + bufferSize) == ref->cache->virtual_end) {
567 status = vfs_read_pages(ref->vnode, cookie,
606 status_t status = vfs_write_pages(ref->vnode, cookie, offset, vecs,
616 reserve_pages(ref, reservation, reservePages, true);
618 ref->cache->Lock();
622 ref->cache->MarkPageUnbusy(pages[i]);
669 write_to_file(file_cache_ref* ref, void* cookie, off_t offset, int32 pageOffset,
673 push_access(ref, offset, bufferSize, true);
674 ref->cache->Unlock();
680 status = write_zeros_to_file(ref->vnode, cookie, offset + pageOffset,
687 status = vfs_write_pages(ref->vnode, cookie, offset + pageOffset,
692 reserve_pages(ref, reservation, reservePages, true);
694 ref->cache->Lock();
701 satisfy_cache_io(file_cache_ref* ref, void* cookie, cache_func function,
714 status_t status = function(ref, cookie, lastOffset, lastPageOffset,
733 panic("cache_io() called with NULL ref!\n");
735 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
736 VMCache* cache = ref->cache;
739 TRACE(("cache_io(ref = %p, offset = %lld, buffer = %p, size = %lu, %s)\n",
740 ref, offset, (void*)buffer, *_size, doWrite ? "write" : "read"));
762 reserve_pages(ref, &reservation, lastReservedPages, doWrite);
787 status_t status = satisfy_cache_io(ref, cookie, function, offset,
884 status_t status = satisfy_cache_io(ref, cookie, function, offset,
895 return function(ref, cookie, lastOffset, lastPageOffset, lastBuffer,
967 file_cache_ref* ref = ((VMVnodeCache*)cache)->FileCacheRef();
1010 PrecacheIO* io = new(std::nothrow) PrecacheIO(ref, lastOffset,
1045 // get the vnode for the object, this also grabs a ref to it
1064 file_cache_ref* ref = ((VMVnodeCache*)cache)->FileCacheRef();
1065 if (ref != NULL)
1144 file_cache_ref* ref = new file_cache_ref;
1145 if (ref == NULL)
1148 memset(ref->last_access, 0, sizeof(ref->last_access));
1149 ref->last_access_index = 0;
1150 ref->disabled_count = 0;
1164 if (vfs_lookup_vnode(mountID, vnodeID, &ref->vnode) != B_OK)
1168 if (vfs_get_vnode_cache(ref->vnode, &ref->cache, true) != B_OK)
1171 ref->cache->virtual_end = size;
1172 ((VMVnodeCache*)ref->cache)->SetFileCacheRef(ref);
1173 return ref;
1176 delete ref;
1184 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1186 if (ref == NULL)
1189 TRACE(("file_cache_delete(ref = %p)\n", ref));
1191 ref->cache->ReleaseRef();
1192 delete ref;
1199 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1201 AutoLocker<VMCache> _(ref->cache);
1203 if (ref->disabled_count == 0) {
1208 ref->disabled_count--;
1222 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1224 AutoLocker<VMCache> _(ref->cache);
1227 if (ref->disabled_count > 0) {
1228 ref->disabled_count++;
1233 status_t error = ref->cache->FlushAndRemoveAllPages();
1237 ref->disabled_count++;
1245 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1246 AutoLocker<VMCache> _(ref->cache);
1248 return ref->disabled_count == 0;
1255 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1257 TRACE(("file_cache_set_size(ref = %p, size = %lld)\n", ref, newSize));
1259 if (ref == NULL)
1262 VMCache* cache = ref->cache;
1289 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1290 if (ref == NULL)
1293 return ref->cache->WriteModified();
1301 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1303 TRACE(("file_cache_read(ref = %p, offset = %lld, buffer = %p, size = %lu)\n",
1304 ref, offset, buffer, *_size));
1309 const off_t fileSize = ref->cache->virtual_end;
1317 if (ref->disabled_count > 0) {
1322 status_t error = vfs_read_pages(ref->vnode, cookie, offset, &vec, 1, 0,
1328 return cache_io(ref, cookie, offset, (addr_t)buffer, _size, false);
1336 file_cache_ref* ref = (file_cache_ref*)_cacheRef;
1342 if (ref->disabled_count > 0) {
1349 status_t error = vfs_write_pages(ref->vnode, cookie, offset, &vec,
1354 return write_zeros_to_file(ref->vnode, cookie, offset, _size);
1357 status_t status = cache_io(ref, cookie, offset,
1360 TRACE(("file_cache_write(ref = %p, offset = %lld, buffer = %p, size = %lu)"
1361 " = %ld\n", ref, offset, buffer, *_size, status));