| 557 | } |
| 558 | |
| 559 | BOOLEAN |
| 560 | Ext2SaveInode ( IN PEXT2_IRP_CONTEXT IrpContext, |
| 561 | IN PEXT2_VCB Vcb, |
| 562 | IN struct inode *Inode) |
| 563 | { |
| 564 | struct ext4_inode* ext4i; |
| 565 | struct ext4_inode_info unused = {0}; |
| 566 | LONGLONG offset; |
| 567 | BOOLEAN rc = 0; |
| 568 | |
| 569 | DEBUG(DL_INF, ( "Ext2SaveInode: Saving Inode %xh: Mode=%xh Size=%xh\n", |
| 570 | Inode->i_ino, Inode->i_mode, Inode->i_size)); |
| 571 | rc = Ext2GetInodeLba(Vcb, Inode->i_ino, &offset); |
| 572 | if (!rc) { |
| 573 | DEBUG(DL_ERR, ( "Ext2SaveInode: failed inode %u.\n", Inode->i_ino)); |
| 574 | goto errorout; |
| 575 | } |
| 576 | |
| 577 | ext4i = (struct ext4_inode*) Ext2AllocatePool(NonPagedPool, EXT4_INODE_SIZE(Inode->i_sb), EXT2_INODE_MAGIC); |
| 578 | if (!ext4i) { |
| 579 | rc = FALSE; |
| 580 | goto errorout; |
| 581 | } |
| 582 | |
| 583 | rc = Ext2LoadBuffer(NULL, Vcb, offset, EXT4_INODE_SIZE(Inode->i_sb), ext4i); |
| 584 | if (!rc) { |
| 585 | DEBUG(DL_ERR, ( "Ext2SaveInode: failed reading inode %u.\n", Inode->i_ino)); |
| 586 | ExFreePool(ext4i); |
| 587 | goto errorout; |
| 588 | } |
| 589 | |
| 590 | Ext2EncodeInode(ext4i, Inode); |
| 591 | |
| 592 | ext4_inode_csum_set(Inode, ext4i, &unused); |
| 593 | |
| 594 | rc = Ext2SaveBuffer(IrpContext, Vcb, offset, EXT4_INODE_SIZE(Inode->i_sb), ext4i); |
| 595 | |
| 596 | if (rc && IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { |
| 597 | Ext2StartFloppyFlushDpc(Vcb, NULL, NULL); |
| 598 | } |
| 599 | |
| 600 | ExFreePool(ext4i); |
| 601 | |
| 602 | errorout: |
| 603 | return rc; |
| 604 | } |
| 605 | |
| 606 | BOOLEAN |
| 607 | Ext2LoadInodeXattr(IN PEXT2_VCB Vcb, |
no test coverage detected