[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Lost] [PATCH] cdi: Entry-Interface fuer Cache entfernen
---
src/modules/cdi/include/cdi/cache.h | 90 -----------
src/modules/cdi/lib/cache.c | 282 -----------------------------------
2 files changed, 0 insertions(+), 372 deletions(-)
diff --git a/src/modules/cdi/include/cdi/cache.h b/src/modules/cdi/include/cdi/cache.h
index fd43bca..3c13230 100644
--- a/src/modules/cdi/include/cdi/cache.h
+++ b/src/modules/cdi/include/cdi/cache.h
@@ -32,13 +32,6 @@ struct cdi_cache_block {
void* private;
};
-/** Cache-Bereiche fuer komfortablen, dafuer etwas langsameren, Zugriff */
-struct cdi_cache_entry {
- struct cdi_cache* cache;
-
- /* OS-Spezifische Daten folgen... */
-};
-
/** Typ fuer Cache-Callback zum einlesen eines Blocks. */
typedef int (cdi_cache_read_block_t)(struct cdi_cache* cache, uint64_t block,
size_t count, void* dest, void* prv);
@@ -112,87 +105,4 @@ void cdi_cache_block_release(struct cdi_cache* cache,
void cdi_cache_block_dirty(struct cdi_cache* cache,
struct cdi_cache_block* block);
-/**
- * Cache-Eintrag erstellen
- *
- * @param offset Position auf dem Datentraeger
- * @param size Groesse des Bereichs
- *
- * @return Handle
- */
-struct cdi_cache_entry* cdi_cache_entry_new(struct cdi_cache* cache,
- uint64_t offset, size_t size);
-
-/**
- * Cache-Eintrag freigeben
- *
- * @param entry Handle
- */
-void cdi_cache_entry_release(struct cdi_cache_entry* entry);
-
-/**
- * Cache-Eintrag sperren
- *
- * @param entry Handle
- */
-void cdi_cache_entry_lock(struct cdi_cache_entry* entry);
-
-/**
- * Cache-Eintrag entsperren
- *
- * @param entry Handle
- */
-void cdi_cache_entry_unlock(struct cdi_cache_entry* entry);
-
-/**
- * Cache-Eintrag als veraendert markieren
- *
- * @param entry Handle
- */
-void cdi_cache_entry_dirty(struct cdi_cache_entry* entry);
-
-/**
- * Einzelnen Block im Cache-Eintrag als veraendert markieren
- *
- * @param entry Handle
- * @param block Blocknummer (von 0 an)
- */
-void cdi_cache_entry_blkdirty(struct cdi_cache_entry* entry, uint64_t block);
-
-
-
-/**
- * Pointer auf einen Block im Cache-Eintrag holen
- *
- * @param entry Handle
- * @param block Blocknummer relativ zum Eintrag (der Offset innerhalb des
- * Eintrags wird nicht beruecksichtigt)
- *
- * @return Pointer auf den Block
- */
-void* cdi_cache_entry_block(struct cdi_cache_entry* entry, size_t block);
-
-/**
- * Daten aus dem Cache-Eintrag lesen
- *
- * @param entry Handle
- * @param offset Offset relativ zum Cache-Eintrag
- * @param size Groesse des zu lesenden Bereichs
- * @param buffer Puffer in dem die Daten abgelegt werden sollen
- */
-int cdi_cache_entry_read(struct cdi_cache_entry* entry, size_t offset,
- size_t size, void* buffer);
-
-/**
- * Daten in den Cache-Eintrag schreiben
- *
- * @param entry Handle
- * @param offset Offset relativ zum Cache-Eintrag
- * @param size Groesse des zu schreibenden Bereichs
- * @param buffer Puffer aus dem die Daten gelesen werden
- */
-int cdi_cache_entry_write(struct cdi_cache_entry* entry, size_t offset,
- size_t size, const void* buffer);
-
-
#endif
diff --git a/src/modules/cdi/lib/cache.c b/src/modules/cdi/lib/cache.c
index 30ecdc3..486382a 100644
--- a/src/modules/cdi/lib/cache.c
+++ b/src/modules/cdi/lib/cache.c
@@ -103,29 +103,6 @@ struct cache {
uint16_t prev_hint;
};
-/**
- * Cache-eintrag
- */
-struct entry {
- /** Eigentlicher CDI-Cache-Eintrag */
- struct cdi_cache_entry entry;
-
- /** Offset */
- uint64_t offset;
-
- /** Groesse des Bereichs */
- size_t size;
-
- /** Anzahl der Blocks */
- size_t block_count;
-
- /** Pointer auf ein Array mit Blockpointern */
- struct block** blocks;
-
- /** Gesperrt */
- int locked;
-};
-
/**
@@ -711,262 +688,3 @@ void cdi_cache_block_dirty(struct cdi_cache* cache,
struct block* b = (struct block*) block;
b->dirty = 1;
}
-
-
-
-
-/**
- * Cache-Eintrag erstellen
- *
- * @param offset Position auf dem Datentraeger
- * @param size Groesse des Bereichs
- *
- * @return Handle
- */
-struct cdi_cache_entry* cdi_cache_entry_new(struct cdi_cache* cache,
- uint64_t offset, size_t size)
-{
- struct entry* entry = malloc(sizeof(struct entry));
- size_t block_size = cache->block_size;
- uint64_t start_block = offset / block_size;
- uint64_t end_block = (offset + size - 1) / block_size;
-
- entry->entry.cache = cache;
- entry->locked = 0;
- entry->offset = offset;
- entry->size = size;
- entry->block_count = end_block - start_block + 1;
- entry->blocks = calloc(sizeof(struct block*) * entry->block_count, 1);
-
- return (struct cdi_cache_entry*) entry;
-}
-
-/**
- * Cache-Eintrag freigeben
- *
- * @param entry Handle
- */
-void cdi_cache_entry_release(struct cdi_cache_entry* entry)
-{
- struct entry* e = (struct entry*) entry;
- size_t i;
-
- if (e->locked) {
- cdi_cache_entry_unlock(entry);
- }
-
- for (i = 0; i < e->block_count; i++) {
- struct block* block = e->blocks[i];
- if (block) {
- block->ref_count--;
- }
- }
-
- free(e);
-}
-
-/**
- * Cache-Eintrag sperren
- *
- * @param entry Handle
- */
-void cdi_cache_entry_lock(struct cdi_cache_entry* entry)
-{
- struct entry* e = (struct entry*) entry;
- e->locked = 1;
-}
-
-/**
- * Cache-Eintrag entsperren
- *
- * @param entry Handle
- */
-void cdi_cache_entry_unlock(struct cdi_cache_entry* entry)
-{
- struct entry* e = (struct entry*) entry;
- e->locked = 0;
-}
-
-/**
- * Cache-Eintrag als veraendert markieren
- *
- * @param entry Handle
- */
-void cdi_cache_entry_dirty(struct cdi_cache_entry* entry)
-{
- struct entry* e = (struct entry*) entry;
- size_t i;
-
- for (i = 0; i < e->block_count; i++) {
- struct block* block = e->blocks[i];
- block->dirty = 1;
- }
-}
-
-
-
-/**
- * Pointer auf einen Block im Cache-Eintrag holen
- *
- * @param entry Handle
- * @param block Blocknummer relativ zum Eintrag (der Offset innerhalb des
- * Eintrags wird nicht beruecksichtigt)
- *
- * @return Pointer auf den Block
- */
-void* cdi_cache_entry_block(struct cdi_cache_entry* entry, size_t block)
-{
- struct entry* e = (struct entry*) entry;
- size_t block_size = entry->cache->block_size;
- uint64_t dev_start_block = (e->offset) / block_size;
-
- if (block >= e->block_count) {
- return NULL;
- }
-
- if (e->blocks[block] == NULL) {
- e->blocks[block] = get_block((struct cache*) entry->cache,
- dev_start_block + block, 1);
- e->blocks[block]->ref_count++;
- }
-
-
- return e->blocks[block]->cdi.data;
-}
-
-/**
- * Daten aus dem Cache-Eintrag lesen
- *
- * @param entry Handle
- * @param offset Offset relativ zum Cache-Eintrag
- * @param size Groesse des zu lesenden Bereichs
- * @param buffer Puffer in dem die Daten abgelegt werden sollen
- */
-int cdi_cache_entry_read(struct cdi_cache_entry* entry, size_t offset,
- size_t size, void* buffer)
-{
- struct entry* e = (struct entry*) entry;
- size_t block_size = entry->cache->block_size;
- uint64_t dev_start_block = (e->offset + offset) / block_size;
- size_t start_block = (e->offset + offset) / block_size - e->offset /
- block_size;
- size_t end_block = (e->offset + offset + size -1) / block_size - e->offset /
- block_size;
- size_t block_count = end_block - start_block + 1;
- size_t i;
- size_t bytes_done = 0;
-
- // Nicht ueber den Eintragsrand hinauslesen
- if ((offset + size) > e->size) {
- return 0;
- }
-
- // Offset vom Block-Anfang im Cacheeintrag beruecksichtigen, falls vorhanden
- offset += e->offset % block_size;
-
- for (i = 0; i < block_count; i++) {
- void* block;
- size_t bytes = block_size;
- size_t off = 0;
-
- if (e->blocks[start_block + i] == NULL) {
- e->blocks[start_block + i] = get_block((struct cache*) entry->cache,
- dev_start_block + i, 1);
- e->blocks[start_block + i]->ref_count++;
- }
-
- block = e->blocks[start_block + i]->cdi.data;
- e->blocks[start_block + i]->access_time = ++cache_time;
-
- // Beim ersten Durchlauf muss der Anfangsoffset beruecksichtigt werden
- if (i == 0) {
- off = offset % block_size;
- bytes = block_size - off;
- }
-
- // Beim letzten Durchlauf muss unter umstaenden nicht mehr ein ganzer
- // Block gelesen werden.
- if (i == block_count - 1) {
- bytes = size - bytes_done;
- }
-
- memcpy((void*) ((uintptr_t) buffer + bytes_done), (void*)
- ((uintptr_t) block + off), bytes);
- bytes_done += bytes;
- }
-
- return 1;
-}
-
-/**
- * Daten in den Cache-Eintrag schreiben
- *
- * @param entry Handle
- * @param offset Offset relativ zum Cache-Eintrag
- * @param size Groesse des zu schreibenden Bereichs
- * @param buffer Puffer aus dem die Daten gelesen werden
- */
-int cdi_cache_entry_write(struct cdi_cache_entry* entry, size_t offset,
- size_t size, const void* buffer)
-{
- struct entry* e = (struct entry*) entry;
- size_t block_size = entry->cache->block_size;
- uint64_t dev_start_block = (e->offset + offset) / block_size;
- size_t start_block = (e->offset + offset) / block_size - e->offset /
- block_size;
- size_t end_block = (e->offset + offset + size - 1) / block_size - e->offset /
- block_size;
- size_t block_count = end_block - start_block + 1;
- size_t i;
- size_t bytes_done = 0;
-
- // Nicht ueber den Eintragsrand hinausschreiben
- if ((offset + size) > e->size) {
- return 0;
- }
-
- // Offset vom Block-Anfang im Cacheeintrag beruecksichtigen, falls vorhanden
- offset += e->offset % block_size;
-
- for (i = 0; i < block_count; i++) {
- void* block;
- size_t bytes = block_size;
- size_t off = 0;
-
- // Beim ersten Durchlauf muss der Anfangsoffset beruecksichtigt werden
- if (i == 0) {
- off = offset % block_size;
- bytes = block_size - off;
- }
-
- if (i == block_count - 1) {
- bytes = size - bytes_done;
- }
-
-
- if (e->blocks[start_block + i] == NULL) {
- int read = 1;
-
- if ((off == 0) && (bytes == block_size)) {
- read = 0;
- }
-
- e->blocks[start_block + i] = get_block((struct cache*) entry->cache,
- dev_start_block + i, read);
- e->blocks[start_block + i]->ref_count++;
- }
-
- block = e->blocks[start_block + i]->cdi.data;
- e->blocks[start_block + i]->access_time = ++cache_time;
- e->blocks[start_block + i]->dirty = 1;
-
-
- memcpy((void*) ((uintptr_t) block + off), (void*) ((uintptr_t) buffer +
- bytes_done), bytes);
- bytes_done += bytes;
- }
-
- return 1;
-}
-
-
--
1.5.4.5