2 * Copyright 2004-2008, Haiku Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
8 /*! File System File and Block Caches */
11 #include <fs_interface.h>
14 /* transaction events */
16 TRANSACTION_WRITTEN
= 0x01,
17 TRANSACTION_ABORTED
= 0x02,
18 TRANSACTION_ENDED
= 0x04,
19 TRANSACTION_IDLE
= 0x08
24 FILE_MAP_CACHE_ON_DEMAND
= 0x01, /* default mode */
25 FILE_MAP_CACHE_ALL
= 0x02
28 typedef void (*transaction_notification_hook
)(int32 id
, int32 event
,
36 extern int32
cache_start_transaction(void *cache
);
37 extern status_t
cache_sync_transaction(void *cache
, int32 id
);
38 extern status_t
cache_end_transaction(void *cache
, int32 id
,
39 transaction_notification_hook hook
, void *data
);
40 extern status_t
cache_abort_transaction(void *cache
, int32 id
);
41 extern int32
cache_detach_sub_transaction(void *cache
, int32 id
,
42 transaction_notification_hook hook
, void *data
);
43 extern status_t
cache_abort_sub_transaction(void *cache
, int32 id
);
44 extern status_t
cache_start_sub_transaction(void *cache
, int32 id
);
45 extern status_t
cache_add_transaction_listener(void *cache
, int32 id
,
46 int32 events
, transaction_notification_hook hook
,
48 extern status_t
cache_remove_transaction_listener(void *cache
, int32 id
,
49 transaction_notification_hook hook
, void *data
);
50 extern status_t
cache_next_block_in_transaction(void *cache
, int32 id
,
51 bool mainOnly
, long *_cookie
, off_t
*_blockNumber
,
52 void **_data
, void **_unchangedData
);
53 extern int32
cache_blocks_in_transaction(void *cache
, int32 id
);
54 extern int32
cache_blocks_in_main_transaction(void *cache
, int32 id
);
55 extern int32
cache_blocks_in_sub_transaction(void *cache
, int32 id
);
56 extern bool cache_has_block_in_transaction(void* cache
, int32 id
, off_t blockNumber
);
59 extern void block_cache_delete(void *cache
, bool allowWrites
);
60 extern void *block_cache_create(int fd
, off_t numBlocks
, size_t blockSize
,
62 extern status_t
block_cache_sync(void *cache
);
63 extern status_t
block_cache_sync_etc(void *cache
, off_t blockNumber
,
65 extern void block_cache_discard(void *cache
, off_t blockNumber
,
67 extern status_t
block_cache_make_writable(void *cache
, off_t blockNumber
,
69 extern void *block_cache_get_writable_etc(void *cache
, off_t blockNumber
,
70 off_t base
, off_t length
, int32 transaction
);
71 extern void *block_cache_get_writable(void *cache
, off_t blockNumber
,
73 extern void *block_cache_get_empty(void *cache
, off_t blockNumber
,
75 extern const void *block_cache_get_etc(void *cache
, off_t blockNumber
,
76 off_t base
, off_t length
);
77 extern const void *block_cache_get(void *cache
, off_t blockNumber
);
78 extern status_t
block_cache_set_dirty(void *cache
, off_t blockNumber
,
79 bool isDirty
, int32 transaction
);
80 extern void block_cache_put(void *cache
, off_t blockNumber
);
83 extern void *file_cache_create(dev_t mountID
, ino_t vnodeID
, off_t size
);
84 extern void file_cache_delete(void *cacheRef
);
85 extern void file_cache_enable(void *cacheRef
);
86 extern bool file_cache_is_enabled(void *cacheRef
);
87 extern status_t
file_cache_disable(void *cacheRef
);
88 extern status_t
file_cache_set_size(void *cacheRef
, off_t size
);
89 extern status_t
file_cache_sync(void *cache
);
91 extern status_t
file_cache_read(void *cacheRef
, void *cookie
, off_t offset
,
92 void *bufferBase
, size_t *_size
);
93 extern status_t
file_cache_write(void *cacheRef
, void *cookie
, off_t offset
,
94 const void *buffer
, size_t *_size
);
97 extern void *file_map_create(dev_t mountID
, ino_t vnodeID
, off_t size
);
98 extern void file_map_delete(void *map
);
99 extern void file_map_set_size(void *map
, off_t size
);
100 extern void file_map_invalidate(void *map
, off_t offset
, off_t size
);
101 extern status_t
file_map_set_mode(void *map
, uint32 mode
);
102 extern status_t
file_map_translate(void *map
, off_t offset
, size_t size
,
103 struct file_io_vec
*vecs
, size_t *_count
, size_t align
);
106 extern status_t
entry_cache_add(dev_t mountID
, ino_t dirID
, const char* name
,
108 extern status_t
entry_cache_add_missing(dev_t mountID
, ino_t dirID
,
110 extern status_t
entry_cache_remove(dev_t mountID
, ino_t dirID
,
117 #endif /* _FS_CACHE_H */