aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/log.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2012-02-03 10:21:59 -0500
committerSteven Whitehouse <swhiteho@redhat.com>2012-02-28 12:09:59 -0500
commit47ac5537a794fc71f89d51af492a945bd233f70c (patch)
tree65c9c68c8b14ceb0fae31f5a03ec4d811fdbec99 /fs/gfs2/log.c
parenta245769f254bbbea868e2cf8dc42daa061cd276f (diff)
GFS2: Move two functions from log.c to lops.c
gfs2_log_get_buf() and gfs2_log_fake_buf() are both used only in lops.c, so move them next to their callers and they can then become static. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/log.c')
-rw-r--r--fs/gfs2/log.c101
1 files changed, 4 insertions, 97 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index 756fae9eaf8f..4d31379265cb 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -358,7 +358,7 @@ retry:
358 return 0; 358 return 0;
359} 359}
360 360
361static u64 log_bmap(struct gfs2_sbd *sdp, unsigned int lbn) 361u64 gfs2_log_bmap(struct gfs2_sbd *sdp, unsigned int lbn)
362{ 362{
363 struct gfs2_journal_extent *je; 363 struct gfs2_journal_extent *je;
364 364
@@ -467,8 +467,8 @@ static unsigned int current_tail(struct gfs2_sbd *sdp)
467 467
468void gfs2_log_incr_head(struct gfs2_sbd *sdp) 468void gfs2_log_incr_head(struct gfs2_sbd *sdp)
469{ 469{
470 if (sdp->sd_log_flush_head == sdp->sd_log_tail) 470 BUG_ON((sdp->sd_log_flush_head == sdp->sd_log_tail) &&
471 BUG_ON(sdp->sd_log_flush_head != sdp->sd_log_head); 471 (sdp->sd_log_flush_head != sdp->sd_log_head));
472 472
473 if (++sdp->sd_log_flush_head == sdp->sd_jdesc->jd_blocks) { 473 if (++sdp->sd_log_flush_head == sdp->sd_jdesc->jd_blocks) {
474 sdp->sd_log_flush_head = 0; 474 sdp->sd_log_flush_head = 0;
@@ -476,99 +476,6 @@ void gfs2_log_incr_head(struct gfs2_sbd *sdp)
476 } 476 }
477} 477}
478 478
479/**
480 * gfs2_log_write_endio - End of I/O for a log buffer
481 * @bh: The buffer head
482 * @uptodate: I/O Status
483 *
484 */
485
486static void gfs2_log_write_endio(struct buffer_head *bh, int uptodate)
487{
488 struct gfs2_sbd *sdp = bh->b_private;
489 bh->b_private = NULL;
490
491 end_buffer_write_sync(bh, uptodate);
492 if (atomic_dec_and_test(&sdp->sd_log_in_flight))
493 wake_up(&sdp->sd_log_flush_wait);
494}
495
496/**
497 * gfs2_log_get_buf - Get and initialize a buffer to use for log control data
498 * @sdp: The GFS2 superblock
499 *
500 * Returns: the buffer_head
501 */
502
503struct buffer_head *gfs2_log_get_buf(struct gfs2_sbd *sdp)
504{
505 u64 blkno = log_bmap(sdp, sdp->sd_log_flush_head);
506 struct buffer_head *bh;
507
508 bh = sb_getblk(sdp->sd_vfs, blkno);
509 lock_buffer(bh);
510 memset(bh->b_data, 0, bh->b_size);
511 set_buffer_uptodate(bh);
512 clear_buffer_dirty(bh);
513 gfs2_log_incr_head(sdp);
514 atomic_inc(&sdp->sd_log_in_flight);
515 bh->b_private = sdp;
516 bh->b_end_io = gfs2_log_write_endio;
517
518 return bh;
519}
520
521/**
522 * gfs2_fake_write_endio -
523 * @bh: The buffer head
524 * @uptodate: The I/O Status
525 *
526 */
527
528static void gfs2_fake_write_endio(struct buffer_head *bh, int uptodate)
529{
530 struct buffer_head *real_bh = bh->b_private;
531 struct gfs2_bufdata *bd = real_bh->b_private;
532 struct gfs2_sbd *sdp = bd->bd_gl->gl_sbd;
533
534 end_buffer_write_sync(bh, uptodate);
535 free_buffer_head(bh);
536 unlock_buffer(real_bh);
537 brelse(real_bh);
538 if (atomic_dec_and_test(&sdp->sd_log_in_flight))
539 wake_up(&sdp->sd_log_flush_wait);
540}
541
542/**
543 * gfs2_log_fake_buf - Build a fake buffer head to write metadata buffer to log
544 * @sdp: the filesystem
545 * @data: the data the buffer_head should point to
546 *
547 * Returns: the log buffer descriptor
548 */
549
550struct buffer_head *gfs2_log_fake_buf(struct gfs2_sbd *sdp,
551 struct buffer_head *real)
552{
553 u64 blkno = log_bmap(sdp, sdp->sd_log_flush_head);
554 struct buffer_head *bh;
555
556 bh = alloc_buffer_head(GFP_NOFS | __GFP_NOFAIL);
557 atomic_set(&bh->b_count, 1);
558 bh->b_state = (1 << BH_Mapped) | (1 << BH_Uptodate) | (1 << BH_Lock);
559 set_bh_page(bh, real->b_page, bh_offset(real));
560 bh->b_blocknr = blkno;
561 bh->b_size = sdp->sd_sb.sb_bsize;
562 bh->b_bdev = sdp->sd_vfs->s_bdev;
563 bh->b_private = real;
564 bh->b_end_io = gfs2_fake_write_endio;
565
566 gfs2_log_incr_head(sdp);
567 atomic_inc(&sdp->sd_log_in_flight);
568
569 return bh;
570}
571
572static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail) 479static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail)
573{ 480{
574 unsigned int dist = log_distance(sdp, new_tail, sdp->sd_log_tail); 481 unsigned int dist = log_distance(sdp, new_tail, sdp->sd_log_tail);
@@ -592,7 +499,7 @@ static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail)
592 499
593static void log_write_header(struct gfs2_sbd *sdp, u32 flags, int pull) 500static void log_write_header(struct gfs2_sbd *sdp, u32 flags, int pull)
594{ 501{
595 u64 blkno = log_bmap(sdp, sdp->sd_log_flush_head); 502 u64 blkno = gfs2_log_bmap(sdp, sdp->sd_log_flush_head);
596 struct buffer_head *bh; 503 struct buffer_head *bh;
597 struct gfs2_log_header *lh; 504 struct gfs2_log_header *lh;
598 unsigned int tail; 505 unsigned int tail;