ext2_inode.c (42374) | ext2_inode.c (43301) |
---|---|
1/* 2 * modified for Lites 1.1 3 * 4 * Aug 1995, Godmar Back (gback@cs.utah.edu) 5 * University of Utah, Department of Computer Science 6 */ 7/* 8 * Copyright (c) 1982, 1986, 1989, 1993 --- 83 unchanged lines hidden (view full) --- 92 ufs_itimes(vp); 93 ip = VTOI(vp); 94 if ((ip->i_flag & IN_MODIFIED) == 0) 95 return (0); 96 ip->i_flag &= ~(IN_LAZYMOD | IN_MODIFIED); 97 if (vp->v_mount->mnt_flag & MNT_RDONLY) 98 return (0); 99 fs = ip->i_e2fs; | 1/* 2 * modified for Lites 1.1 3 * 4 * Aug 1995, Godmar Back (gback@cs.utah.edu) 5 * University of Utah, Department of Computer Science 6 */ 7/* 8 * Copyright (c) 1982, 1986, 1989, 1993 --- 83 unchanged lines hidden (view full) --- 92 ufs_itimes(vp); 93 ip = VTOI(vp); 94 if ((ip->i_flag & IN_MODIFIED) == 0) 95 return (0); 96 ip->i_flag &= ~(IN_LAZYMOD | IN_MODIFIED); 97 if (vp->v_mount->mnt_flag & MNT_RDONLY) 98 return (0); 99 fs = ip->i_e2fs; |
100 if (error = bread(ip->i_devvp, | 100 if ((error = bread(ip->i_devvp, |
101 fsbtodb(fs, ino_to_fsba(fs, ip->i_number)), | 101 fsbtodb(fs, ino_to_fsba(fs, ip->i_number)), |
102 (int)fs->s_blocksize, NOCRED, &bp)) { | 102 (int)fs->s_blocksize, NOCRED, &bp)) != 0) { |
103 brelse(bp); 104 return (error); 105 } 106 ext2_di2ei( &ip->i_din, (struct ext2_inode *) ((char *)bp->b_data + EXT2_INODE_SIZE * 107 ino_to_fsbo(fs, ip->i_number))); 108/* 109 if (waitfor && (vp->v_mount->mnt_flag & MNT_ASYNC) == 0) 110 return (bwrite(bp)); --- 54 unchanged lines hidden (view full) --- 165 oip->i_flag |= IN_CHANGE | IN_UPDATE; 166 return (UFS_UPDATE(ovp, 1)); 167 } 168 if (oip->i_size == length) { 169 oip->i_flag |= IN_CHANGE | IN_UPDATE; 170 return (UFS_UPDATE(ovp, 0)); 171 } 172#if QUOTA | 103 brelse(bp); 104 return (error); 105 } 106 ext2_di2ei( &ip->i_din, (struct ext2_inode *) ((char *)bp->b_data + EXT2_INODE_SIZE * 107 ino_to_fsbo(fs, ip->i_number))); 108/* 109 if (waitfor && (vp->v_mount->mnt_flag & MNT_ASYNC) == 0) 110 return (bwrite(bp)); --- 54 unchanged lines hidden (view full) --- 165 oip->i_flag |= IN_CHANGE | IN_UPDATE; 166 return (UFS_UPDATE(ovp, 1)); 167 } 168 if (oip->i_size == length) { 169 oip->i_flag |= IN_CHANGE | IN_UPDATE; 170 return (UFS_UPDATE(ovp, 0)); 171 } 172#if QUOTA |
173 if (error = getinoquota(oip)) | 173 if ((error = getinoquota(oip)) != 0) |
174 return (error); 175#endif 176 fs = oip->i_e2fs; 177 osize = oip->i_size; 178 ext2_discard_prealloc(oip); 179 /* 180 * Lengthen the size of the file. We must ensure that the 181 * last byte of the file is allocated. Since the smallest 182 * value of oszie is 0, length will be at least 1. 183 */ 184 if (osize < length) { 185 offset = blkoff(fs, length - 1); 186 lbn = lblkno(fs, length - 1); 187 aflags = B_CLRBUF; 188 if (flags & IO_SYNC) 189 aflags |= B_SYNC; 190 vnode_pager_setsize(ovp, length); | 174 return (error); 175#endif 176 fs = oip->i_e2fs; 177 osize = oip->i_size; 178 ext2_discard_prealloc(oip); 179 /* 180 * Lengthen the size of the file. We must ensure that the 181 * last byte of the file is allocated. Since the smallest 182 * value of oszie is 0, length will be at least 1. 183 */ 184 if (osize < length) { 185 offset = blkoff(fs, length - 1); 186 lbn = lblkno(fs, length - 1); 187 aflags = B_CLRBUF; 188 if (flags & IO_SYNC) 189 aflags |= B_SYNC; 190 vnode_pager_setsize(ovp, length); |
191 if (error = ext2_balloc(oip, lbn, offset + 1, cred, &bp, 192 aflags)) | 191 if ((error = ext2_balloc(oip, lbn, offset + 1, cred, &bp, 192 aflags)) != 0) |
193 return (error); 194 oip->i_size = length; 195 if (aflags & IO_SYNC) 196 bwrite(bp); 197 else 198 bawrite(bp); 199 oip->i_flag |= IN_CHANGE | IN_UPDATE; 200 return (UFS_UPDATE(ovp, 1)); --- 9 unchanged lines hidden (view full) --- 210 offset = blkoff(fs, length); 211 if (offset == 0) { 212 oip->i_size = length; 213 } else { 214 lbn = lblkno(fs, length); 215 aflags = B_CLRBUF; 216 if (flags & IO_SYNC) 217 aflags |= B_SYNC; | 193 return (error); 194 oip->i_size = length; 195 if (aflags & IO_SYNC) 196 bwrite(bp); 197 else 198 bawrite(bp); 199 oip->i_flag |= IN_CHANGE | IN_UPDATE; 200 return (UFS_UPDATE(ovp, 1)); --- 9 unchanged lines hidden (view full) --- 210 offset = blkoff(fs, length); 211 if (offset == 0) { 212 oip->i_size = length; 213 } else { 214 lbn = lblkno(fs, length); 215 aflags = B_CLRBUF; 216 if (flags & IO_SYNC) 217 aflags |= B_SYNC; |
218 if (error = ext2_balloc(oip, lbn, offset, cred, &bp, 219 aflags)) | 218 if ((error = ext2_balloc(oip, lbn, offset, cred, &bp, 219 aflags)) != 0) |
220 return (error); 221 oip->i_size = length; 222 size = blksize(fs, oip, lbn); 223 bzero((char *)bp->b_data + offset, (u_int)(size - offset)); 224 allocbuf(bp, size); 225 if (aflags & IO_SYNC) 226 bwrite(bp); 227 else --- 218 unchanged lines hidden (view full) --- 446 * Recursively free totally unused blocks. 447 */ 448 for (i = NINDIR(fs) - 1, nlbn = lbn + 1 - i * factor; i > last; 449 i--, nlbn += factor) { 450 nb = bap[i]; 451 if (nb == 0) 452 continue; 453 if (level > SINGLE) { | 220 return (error); 221 oip->i_size = length; 222 size = blksize(fs, oip, lbn); 223 bzero((char *)bp->b_data + offset, (u_int)(size - offset)); 224 allocbuf(bp, size); 225 if (aflags & IO_SYNC) 226 bwrite(bp); 227 else --- 218 unchanged lines hidden (view full) --- 446 * Recursively free totally unused blocks. 447 */ 448 for (i = NINDIR(fs) - 1, nlbn = lbn + 1 - i * factor; i > last; 449 i--, nlbn += factor) { 450 nb = bap[i]; 451 if (nb == 0) 452 continue; 453 if (level > SINGLE) { |
454 if (error = ext2_indirtrunc(ip, nlbn, 455 fsbtodb(fs, nb), (daddr_t)-1, level - 1, &blkcount)) | 454 if ((error = ext2_indirtrunc(ip, nlbn, 455 fsbtodb(fs, nb), (daddr_t)-1, level - 1, &blkcount)) != 0) |
456 allerror = error; 457 blocksreleased += blkcount; 458 } 459 ext2_blkfree(ip, nb, fs->s_blocksize); 460 blocksreleased += nblocks; 461 } 462 463 /* 464 * Recursively free last partial block. 465 */ 466 if (level > SINGLE && lastbn >= 0) { 467 last = lastbn % factor; 468 nb = bap[i]; 469 if (nb != 0) { | 456 allerror = error; 457 blocksreleased += blkcount; 458 } 459 ext2_blkfree(ip, nb, fs->s_blocksize); 460 blocksreleased += nblocks; 461 } 462 463 /* 464 * Recursively free last partial block. 465 */ 466 if (level > SINGLE && lastbn >= 0) { 467 last = lastbn % factor; 468 nb = bap[i]; 469 if (nb != 0) { |
470 if (error = ext2_indirtrunc(ip, nlbn, fsbtodb(fs, nb), 471 last, level - 1, &blkcount)) | 470 if ((error = ext2_indirtrunc(ip, nlbn, fsbtodb(fs, nb), 471 last, level - 1, &blkcount)) != 0) |
472 allerror = error; 473 blocksreleased += blkcount; 474 } 475 } 476 FREE(copy, M_TEMP); 477 *countp = blocksreleased; 478 return (allerror); 479} --- 14 unchanged lines hidden --- | 472 allerror = error; 473 blocksreleased += blkcount; 474 } 475 } 476 FREE(copy, M_TEMP); 477 *countp = blocksreleased; 478 return (allerror); 479} --- 14 unchanged lines hidden --- |