| 277 | } |
| 278 | |
| 279 | struct buffer_head *ext3_append(struct ext2_icb *icb, struct inode *inode, |
| 280 | ext3_lblk_t *block, int *err) |
| 281 | { |
| 282 | PEXT2_MCB mcb = CONTAINING_RECORD(inode, EXT2_MCB, Inode); |
| 283 | PEXT2_FCB dcb = mcb->Fcb; |
| 284 | NTSTATUS status; |
| 285 | |
| 286 | ASSERT(dcb); |
| 287 | ASSERT(inode == dcb->Inode); |
| 288 | |
| 289 | /* allocate new block since there's no space for us */ |
| 290 | *block = (ext3_lblk_t)(inode->i_size >> inode->i_sb->s_blocksize_bits); |
| 291 | dcb->Header.AllocationSize.QuadPart += dcb->Vcb->BlockSize; |
| 292 | status = Ext2ExpandFile(icb, dcb->Vcb, mcb, &(dcb->Header.AllocationSize)); |
| 293 | if (NT_SUCCESS(status)) { |
| 294 | |
| 295 | /* update Dcb */ |
| 296 | dcb->Header.ValidDataLength = dcb->Header.FileSize = dcb->Header.AllocationSize; |
| 297 | mcb->Inode.i_size = dcb->Header.AllocationSize.QuadPart; |
| 298 | |
| 299 | /* save parent directory's inode */ |
| 300 | Ext2SaveInode(icb, dcb->Vcb, inode); |
| 301 | } |
| 302 | |
| 303 | return ext3_bread(icb, inode, *block, err); |
| 304 | } |
| 305 | |
| 306 | |
| 307 | void ext3_inc_count(struct inode *inode) |
no test coverage detected