| 635 | } |
| 636 | |
| 637 | BOOLEAN |
| 638 | Ext2SaveInodeXattr(IN PEXT2_IRP_CONTEXT IrpContext, |
| 639 | IN PEXT2_VCB Vcb, |
| 640 | IN struct inode *Inode, |
| 641 | IN PEXT2_INODE InodeXattr) |
| 642 | { |
| 643 | IO_STATUS_BLOCK IoStatus; |
| 644 | LONGLONG Offset = 0; |
| 645 | ULONG InodeSize = Vcb->InodeSize; |
| 646 | BOOLEAN rc = 0; |
| 647 | |
| 648 | /* There is no way to put EA information in such a small inode */ |
| 649 | if (InodeSize == EXT2_GOOD_OLD_INODE_SIZE) |
| 650 | return FALSE; |
| 651 | |
| 652 | DEBUG(DL_INF, ("Ext2SaveInodeXattr: Saving Inode %xh: Mode=%xh Size=%xh\n", |
| 653 | Inode->i_ino, Inode->i_mode, Inode->i_size)); |
| 654 | rc = Ext2GetInodeLba(Vcb, Inode->i_ino, &Offset); |
| 655 | if (!rc) { |
| 656 | DEBUG(DL_ERR, ("Ext2SaveInodeXattr: error get inode(%xh)'s addr.\n", Inode->i_ino)); |
| 657 | goto errorout; |
| 658 | } |
| 659 | |
| 660 | rc = Ext2SaveBuffer(IrpContext, |
| 661 | Vcb, |
| 662 | Offset + EXT2_GOOD_OLD_INODE_SIZE + Inode->i_extra_isize, |
| 663 | InodeSize - EXT2_GOOD_OLD_INODE_SIZE - Inode->i_extra_isize, |
| 664 | (char *)InodeXattr + EXT2_GOOD_OLD_INODE_SIZE + Inode->i_extra_isize); |
| 665 | |
| 666 | if (rc && IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { |
| 667 | Ext2StartFloppyFlushDpc(Vcb, NULL, NULL); |
| 668 | } |
| 669 | |
| 670 | errorout: |
| 671 | return rc; |
| 672 | } |
| 673 | |
| 674 | |
| 675 | BOOLEAN |
no test coverage detected