X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Finode.c;h=42ae708399f1fb5506e87f54261e31a97382d588;hb=78f5b7a9c7840ce8b2dffb13fca676a18f8f9eb4;hp=fe68328e510671a53ac99c9b01e70b2849698153;hpb=fe314d13c4973852723429e709137bf7f5a8b607;p=bluesky.git diff --git a/bluesky/inode.c b/bluesky/inode.c index fe68328..42ae708 100644 --- a/bluesky/inode.c +++ b/bluesky/inode.c @@ -270,6 +270,30 @@ BlueSkyInode *bluesky_new_inode(uint64_t inum, BlueSkyFS *fs, return i; } +/* Issue a prefetch hint for an inode. This signals that the inode may be + * needed soon. Does not return any useful data. */ +void bluesky_inode_prefetch(BlueSkyFS *fs, uint64_t inum) +{ + BlueSkyInode *inode = NULL; + + g_mutex_lock(fs->lock); + inode = (BlueSkyInode *)g_hash_table_lookup(fs->inodes, &inum); + + if (inode != NULL) { + /* Inode is already available, no need for any prefetching... */ + g_mutex_unlock(fs->lock); + return; + } + + InodeMapEntry *entry = bluesky_inode_map_lookup(fs->inode_map, inum, 0); + if (entry != NULL) { + bluesky_cloudlog_prefetch(entry->item); + } + + g_mutex_unlock(fs->lock); + return; +} + /* Retrieve an inode from the filesystem. Eventually this will be a cache and * so we might need to go fetch the inode from elsewhere; for now all * filesystem state is stored here. inode is returned with a reference held