| .. | .. |
|---|
| 171 | 171 | down_write(&NILFS_MDT(sufile)->mi_sem); |
|---|
| 172 | 172 | for (seg = segnumv; seg < segnumv + nsegs; seg++) { |
|---|
| 173 | 173 | if (unlikely(*seg >= nilfs_sufile_get_nsegments(sufile))) { |
|---|
| 174 | | - nilfs_msg(sufile->i_sb, KERN_WARNING, |
|---|
| 175 | | - "%s: invalid segment number: %llu", |
|---|
| 176 | | - __func__, (unsigned long long)*seg); |
|---|
| 174 | + nilfs_warn(sufile->i_sb, |
|---|
| 175 | + "%s: invalid segment number: %llu", |
|---|
| 176 | + __func__, (unsigned long long)*seg); |
|---|
| 177 | 177 | nerr++; |
|---|
| 178 | 178 | } |
|---|
| 179 | 179 | } |
|---|
| .. | .. |
|---|
| 230 | 230 | int ret; |
|---|
| 231 | 231 | |
|---|
| 232 | 232 | if (unlikely(segnum >= nilfs_sufile_get_nsegments(sufile))) { |
|---|
| 233 | | - nilfs_msg(sufile->i_sb, KERN_WARNING, |
|---|
| 234 | | - "%s: invalid segment number: %llu", |
|---|
| 235 | | - __func__, (unsigned long long)segnum); |
|---|
| 233 | + nilfs_warn(sufile->i_sb, "%s: invalid segment number: %llu", |
|---|
| 234 | + __func__, (unsigned long long)segnum); |
|---|
| 236 | 235 | return -EINVAL; |
|---|
| 237 | 236 | } |
|---|
| 238 | 237 | down_write(&NILFS_MDT(sufile)->mi_sem); |
|---|
| .. | .. |
|---|
| 410 | 409 | kaddr = kmap_atomic(su_bh->b_page); |
|---|
| 411 | 410 | su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); |
|---|
| 412 | 411 | if (unlikely(!nilfs_segment_usage_clean(su))) { |
|---|
| 413 | | - nilfs_msg(sufile->i_sb, KERN_WARNING, |
|---|
| 414 | | - "%s: segment %llu must be clean", __func__, |
|---|
| 415 | | - (unsigned long long)segnum); |
|---|
| 412 | + nilfs_warn(sufile->i_sb, "%s: segment %llu must be clean", |
|---|
| 413 | + __func__, (unsigned long long)segnum); |
|---|
| 416 | 414 | kunmap_atomic(kaddr); |
|---|
| 417 | 415 | return; |
|---|
| 418 | 416 | } |
|---|
| .. | .. |
|---|
| 468 | 466 | kaddr = kmap_atomic(su_bh->b_page); |
|---|
| 469 | 467 | su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); |
|---|
| 470 | 468 | if (nilfs_segment_usage_clean(su)) { |
|---|
| 471 | | - nilfs_msg(sufile->i_sb, KERN_WARNING, |
|---|
| 472 | | - "%s: segment %llu is already clean", |
|---|
| 473 | | - __func__, (unsigned long long)segnum); |
|---|
| 469 | + nilfs_warn(sufile->i_sb, "%s: segment %llu is already clean", |
|---|
| 470 | + __func__, (unsigned long long)segnum); |
|---|
| 474 | 471 | kunmap_atomic(kaddr); |
|---|
| 475 | 472 | return; |
|---|
| 476 | 473 | } |
|---|
| .. | .. |
|---|
| 498 | 495 | int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum) |
|---|
| 499 | 496 | { |
|---|
| 500 | 497 | struct buffer_head *bh; |
|---|
| 498 | + void *kaddr; |
|---|
| 499 | + struct nilfs_segment_usage *su; |
|---|
| 501 | 500 | int ret; |
|---|
| 502 | 501 | |
|---|
| 502 | + down_write(&NILFS_MDT(sufile)->mi_sem); |
|---|
| 503 | 503 | ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh); |
|---|
| 504 | 504 | if (!ret) { |
|---|
| 505 | 505 | mark_buffer_dirty(bh); |
|---|
| 506 | 506 | nilfs_mdt_mark_dirty(sufile); |
|---|
| 507 | + kaddr = kmap_atomic(bh->b_page); |
|---|
| 508 | + su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr); |
|---|
| 509 | + nilfs_segment_usage_set_dirty(su); |
|---|
| 510 | + kunmap_atomic(kaddr); |
|---|
| 507 | 511 | brelse(bh); |
|---|
| 508 | 512 | } |
|---|
| 513 | + up_write(&NILFS_MDT(sufile)->mi_sem); |
|---|
| 509 | 514 | return ret; |
|---|
| 510 | 515 | } |
|---|
| 511 | 516 | |
|---|
| .. | .. |
|---|
| 549 | 554 | /** |
|---|
| 550 | 555 | * nilfs_sufile_get_stat - get segment usage statistics |
|---|
| 551 | 556 | * @sufile: inode of segment usage file |
|---|
| 552 | | - * @stat: pointer to a structure of segment usage statistics |
|---|
| 557 | + * @sustat: pointer to a structure of segment usage statistics |
|---|
| 553 | 558 | * |
|---|
| 554 | 559 | * Description: nilfs_sufile_get_stat() returns information about segment |
|---|
| 555 | 560 | * usage. |
|---|
| 556 | 561 | * |
|---|
| 557 | 562 | * Return Value: On success, 0 is returned, and segment usage information is |
|---|
| 558 | | - * stored in the place pointed by @stat. On error, one of the following |
|---|
| 563 | + * stored in the place pointed by @sustat. On error, one of the following |
|---|
| 559 | 564 | * negative error codes is returned. |
|---|
| 560 | 565 | * |
|---|
| 561 | 566 | * %-EIO - I/O error. |
|---|
| .. | .. |
|---|
| 774 | 779 | goto out_header; |
|---|
| 775 | 780 | |
|---|
| 776 | 781 | sui->ncleansegs -= nsegs - newnsegs; |
|---|
| 782 | + |
|---|
| 783 | + /* |
|---|
| 784 | + * If the sufile is successfully truncated, immediately adjust |
|---|
| 785 | + * the segment allocation space while locking the semaphore |
|---|
| 786 | + * "mi_sem" so that nilfs_sufile_alloc() never allocates |
|---|
| 787 | + * segments in the truncated space. |
|---|
| 788 | + */ |
|---|
| 789 | + sui->allocmax = newnsegs - 1; |
|---|
| 790 | + sui->allocmin = 0; |
|---|
| 777 | 791 | } |
|---|
| 778 | 792 | |
|---|
| 779 | 793 | kaddr = kmap_atomic(header_bh->b_page); |
|---|
| .. | .. |
|---|
| 1168 | 1182 | int err; |
|---|
| 1169 | 1183 | |
|---|
| 1170 | 1184 | if (susize > sb->s_blocksize) { |
|---|
| 1171 | | - nilfs_msg(sb, KERN_ERR, |
|---|
| 1172 | | - "too large segment usage size: %zu bytes", susize); |
|---|
| 1185 | + nilfs_err(sb, "too large segment usage size: %zu bytes", |
|---|
| 1186 | + susize); |
|---|
| 1173 | 1187 | return -EINVAL; |
|---|
| 1174 | 1188 | } else if (susize < NILFS_MIN_SEGMENT_USAGE_SIZE) { |
|---|
| 1175 | | - nilfs_msg(sb, KERN_ERR, |
|---|
| 1176 | | - "too small segment usage size: %zu bytes", susize); |
|---|
| 1189 | + nilfs_err(sb, "too small segment usage size: %zu bytes", |
|---|
| 1190 | + susize); |
|---|
| 1177 | 1191 | return -EINVAL; |
|---|
| 1178 | 1192 | } |
|---|
| 1179 | 1193 | |
|---|