private void CheckSumBuf(RedFS_Inode wip, int fbn, int dbn, byte[] buffer, int offset) { lock (fpcache_buf) { if (fpcache_cnt == 1024) { fpcache_cnt = 0; clogfile.Write(fpcache_buf, 0, fpcache_buf.Length); clogfile.Flush(); } if (wip.get_wiptype() == WIP_TYPE.REGULAR_FILE) { fingerprintCLOG fpt = (fingerprintCLOG)fptemp; fpt.fsid = wip.get_filefsid(); fpt.inode = wip.get_ino(); fpt.fbn = fbn; fpt.dbn = dbn; fpt.cnt = (int)clogfile.Position; byte[] hash = md5.ComputeHash(buffer, offset, 4096); for (int i = 0; i < 16; i++) { fpt.fp[i] = hash[i]; } fptemp.get_bytes(fpcache_buf, fpcache_cnt * fptemp.get_size()); fpcache_cnt++; } } }
private void CheckSumBuf(RedFS_Inode wip, Red_Buffer wb) { lock (fpcache_buf) { if (fpcache_cnt == 1024) { fpcache_cnt = 0; clogfile.Write(fpcache_buf, 0, fpcache_buf.Length); clogfile.Flush(); } if (wb.get_level() == 0 && wip.get_wiptype() == WIP_TYPE.REGULAR_FILE) { fingerprintCLOG fpt = (fingerprintCLOG)fptemp; fpt.fsid = wip.get_filefsid(); fpt.inode = wip.get_ino(); fpt.fbn = (int)wb.get_start_fbn(); fpt.dbn = wb.get_ondisk_dbn(); fpt.cnt = (int)clogfile.Position; byte[] hash = md5.ComputeHash(wb.buf_to_data()); for (int i = 0; i < 16; i++) { fpt.fp[i] = hash[i]; } fptemp.get_bytes(fpcache_buf, fpcache_cnt * fptemp.get_size()); fpcache_cnt++; } } }
private void do_inode_refupdate_work(UpdateReqI cu, int childcnt) { byte[] buffer = new byte[4096]; lock (tfile0) { tfile0.Seek((long)cu.tfbn * 4096, SeekOrigin.Begin); tfile0.Read(tmpiodatatfileR, 0, 4096); CONFIG.Decrypt_Read_WRBuf(tmpiodatatfileR, buffer); //DEFS.DEBUG("ENCY", "READ inoLo : " + OPS.ChecksumPageWRLoader(buffer)); DEFS.DEBUG("CNTR", "do_inode_refupdate_work (" + cu.tfbn + ") childcnt =" + childcnt); } /* * Parent of inowip is always -1. */ RedFS_Inode wip = new RedFS_Inode(WIP_TYPE.REGULAR_FILE, 0, -1); byte[] buf = new byte[128]; for (int i = 0; i < 32; i++) { for (int t = 0; t < 128; t++) { buf[t] = buffer[i * 128 + t]; } wip.parse_bytes(buf); BLK_TYPE type = BLK_TYPE.IGNORE; int numidx = 0; switch (wip.get_inode_level()) { case 0: type = BLK_TYPE.REGULAR_FILE_L0; numidx = OPS.NUML0(wip.get_filesize()); break; case 1: type = BLK_TYPE.REGULAR_FILE_L1; numidx = OPS.NUML1(wip.get_filesize()); break; case 2: type = BLK_TYPE.REGULAR_FILE_L2; numidx = OPS.NUML2(wip.get_filesize()); break; } for (int x = 0; x < numidx; x++) { int dbn = wip.get_child_dbn(x); //if (dbn <= 0) continue; DEFS.DEBUGCLR("^^^^^", "wip[" + x + "] " + dbn + "," + wip.get_wiptype() + "," + childcnt + " fsize = " + wip.get_filesize()); DEFS.DEBUGCLR("@@@", wip.get_string_rep2()); apply_update_internal(dbn, type, childcnt, cu.optype, true); } } OPS.dump_inoL0_wips(buffer); }
/* * The below functions will be used for dedupe/user command prompt etc. */ private int LoadWip_FindPINO(int fsid, int ino, ref WIP_TYPE type) { lock (REDDY.FSIDList[fsid]) { RedFS_Inode inowip = REDDY.FSIDList[fsid].get_inode_file_wip("Loadinode"); lock (inowip) { RedFS_Inode mywip = new RedFS_Inode(WIP_TYPE.UNDEFINED, ino, -1); bool ret = OPS.Checkout_Wip2(inowip, mywip, ino); REDDY.FSIDList[fsid].sync_internal(); type = mywip.get_wiptype(); //DEFS.DEBUG("LdIno", "Loaded ino= " + ino + "wip from disk, type = " + type); //DEFS.DEBUG("LdIno", mywip.get_string_rep2()); return((ret) ? mywip.get_parent_ino() : -1); } } }
public static bool Checkout_Wip2(RedFS_Inode inowip, RedFS_Inode mywip, int m_ino) { WIP_TYPE oldtype = mywip.get_wiptype(); for (int i = 0; i < 16; i++) { DEFS.ASSERT(mywip.get_child_dbn(i) == DBN.INVALID, "Wip cannot be valid during checkout, " + i + " value = " + mywip.get_child_dbn(i)); } long fileoffset = m_ino * 128; lock (inowip) { REDDY.ptrRedFS.redfs_read(inowip, fileoffset, mywip.data, 0, 128); if (oldtype != WIP_TYPE.UNDEFINED) { mywip.set_wiptype(oldtype); } } DEFS.DEBUG("CO_WIP", mywip.get_string_rep2()); return(mywip.verify_inode_number()); }