Changes in / [64cbf94:8b58fc1] in mainline
- Location:
- uspace/srv/fs/fat
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/fat/fat_fat.c
r64cbf94 r8b58fc1 451 451 } 452 452 453 void454 fat_zero_cluster(struct fat_bs *bs, dev_handle_t dev_handle, fat_cluster_t c)455 {456 int i;457 block_t *b;458 unsigned bps;459 460 bps = uint16_t_le2host(bs->bps);461 462 for (i = 0; i < bs->spc; i++) {463 b = _fat_block_get(bs, dev_handle, c, i, BLOCK_FLAGS_NOREAD);464 memset(b->data, 0, bps);465 b->dirty = true;466 block_put(b);467 }468 }469 470 453 /** 471 454 * @} -
uspace/srv/fs/fat/fat_fat.h
r64cbf94 r8b58fc1 84 84 extern void fat_fill_gap(struct fat_bs *, struct fat_node *, fat_cluster_t, 85 85 off_t); 86 extern void fat_zero_cluster(struct fat_bs *, dev_handle_t, fat_cluster_t);87 86 88 87 #endif -
uspace/srv/fs/fat/fat_ops.c
r64cbf94 r8b58fc1 332 332 /* idxp->lock held */ 333 333 if (flags & L_DIRECTORY) { 334 /* Populate the new cluster with unused dentries. */ 335 fat_zero_cluster(bs, dev_handle, mcl); 334 int i; 335 block_t *b; 336 337 /* 338 * Populate the new cluster with unused dentries. 339 */ 340 for (i = 0; i < bs->spc; i++) { 341 b = _fat_block_get(bs, dev_handle, mcl, i, 342 BLOCK_FLAGS_NOREAD); 343 /* mark all dentries as never-used */ 344 memset(b->data, 0, bps); 345 b->dirty = false; 346 block_put(b); 347 } 336 348 nodep->type = FAT_DIRECTORY; 337 349 nodep->firstc = mcl; … … 450 462 * We need to grow the parent in order to create a new unused dentry. 451 463 */ 452 if (parentp-> firstc == FAT_CLST_ROOT) {464 if (parentp->idx->pfc == FAT_CLST_ROOT) { 453 465 /* Can't grow the root directory. */ 454 466 fibril_mutex_unlock(&parentp->idx->lock); … … 460 472 return rc; 461 473 } 462 fat_zero_cluster(bs, parentp->idx->dev_handle, mcl);463 474 fat_append_clusters(bs, parentp, mcl); 464 parentp->size += bps * bs->spc; 465 parentp->dirty = true; /* need to sync node */ 466 b = fat_block_get(bs, parentp, i, BLOCK_FLAGS_NONE); 475 b = fat_block_get(bs, parentp, i, BLOCK_FLAGS_NOREAD); 467 476 d = (fat_dentry_t *)b->data; 477 /* 478 * Clear all dentries in the block except for the first one (the first 479 * dentry will be cleared in the next step). 480 */ 481 memset(d + 1, 0, bps - sizeof(fat_dentry_t)); 468 482 469 483 hit:
Note:
See TracChangeset
for help on using the changeset viewer.