.. | .. |
---|
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 | |
---|