MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2SaveInodeXattr

Function Ext2SaveInodeXattr

Ext4Fsd/ext3/generic.c:637–672  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

635}
636
637BOOLEAN
638Ext2SaveInodeXattr(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
670errorout:
671 return rc;
672}
673
674
675BOOLEAN

Callers 1

ext4_fs_put_xattr_refFunction · 0.85

Calls 3

Ext2GetInodeLbaFunction · 0.85
Ext2SaveBufferFunction · 0.85
Ext2StartFloppyFlushDpcFunction · 0.85

Tested by

no test coverage detected