X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Finode.c;h=a568ae025891304690282eddd5bea4bc4c4810b3;hb=3175b881ccd14a39c4a206147cc99ecc80de3412;hp=3c6fa3c0ae1bc2a6cab521343acd6562e55eb23d;hpb=1c95720b285aac9770a7ffa62c91040174dd68b8;p=bluesky.git diff --git a/bluesky/inode.c b/bluesky/inode.c index 3c6fa3c..a568ae0 100644 --- a/bluesky/inode.c +++ b/bluesky/inode.c @@ -252,6 +252,23 @@ void bluesky_inode_start_sync(BlueSkyInode *inode, BlueSkyStoreAsync *barrier) bluesky_store_async_unref(async); } +/* Write back an inode and all associated data and wait for completion. Inode + * should already be locked. */ +void bluesky_inode_do_sync(BlueSkyInode *inode) +{ + BlueSkyStoreAsync *barrier = bluesky_store_async_new(inode->fs->store); + barrier->op = STORE_OP_BARRIER; + + g_log("bluesky/inode", G_LOG_LEVEL_DEBUG, + "Synchronous writeback for inode %"PRIu64"...", inode->inum); + bluesky_inode_start_sync(inode, barrier); + bluesky_store_async_submit(barrier); + bluesky_store_async_wait(barrier); + bluesky_store_async_unref(barrier); + g_log("bluesky/inode", G_LOG_LEVEL_DEBUG, + "Writeback for inode %"PRIu64" complete", inode->inum); +} + /* Fetch an inode from stable storage. */ void bluesky_inode_fetch(BlueSkyFS *fs, uint64_t inum) {