Lines Matching refs:sdp
49 unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct, in gfs2_struct2blk() argument
56 first = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / ssize; in gfs2_struct2blk()
59 second = (sdp->sd_sb.sb_bsize - in gfs2_struct2blk()
93 static int gfs2_ail1_start_one(struct gfs2_sbd *sdp, in gfs2_ail1_start_one() argument
97 __releases(&sdp->sd_ail_lock) in gfs2_ail1_start_one()
98 __acquires(&sdp->sd_ail_lock) in gfs2_ail1_start_one()
108 gfs2_assert(sdp, bd->bd_tr == tr); in gfs2_ail1_start_one()
112 gfs2_io_error_bh(sdp, bh); in gfs2_ail1_start_one()
128 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_start_one()
130 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_start_one()
149 void gfs2_ail1_flush(struct gfs2_sbd *sdp, struct writeback_control *wbc) in gfs2_ail1_flush() argument
151 struct list_head *head = &sdp->sd_ail1_list; in gfs2_ail1_flush()
156 trace_gfs2_ail_flush(sdp, wbc, 1); in gfs2_ail1_flush()
158 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_flush()
163 if (gfs2_ail1_start_one(sdp, wbc, tr, &withdraw)) in gfs2_ail1_flush()
166 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_flush()
169 gfs2_lm_withdraw(sdp, NULL); in gfs2_ail1_flush()
170 trace_gfs2_ail_flush(sdp, wbc, 0); in gfs2_ail1_flush()
178 static void gfs2_ail1_start(struct gfs2_sbd *sdp) in gfs2_ail1_start() argument
187 return gfs2_ail1_flush(sdp, &wbc); in gfs2_ail1_start()
197 static void gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr, in gfs2_ail1_empty_one() argument
206 gfs2_assert(sdp, bd->bd_tr == tr); in gfs2_ail1_empty_one()
210 gfs2_io_error_bh(sdp, bh); in gfs2_ail1_empty_one()
224 static int gfs2_ail1_empty(struct gfs2_sbd *sdp) in gfs2_ail1_empty() argument
231 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_empty()
232 list_for_each_entry_safe_reverse(tr, s, &sdp->sd_ail1_list, tr_list) { in gfs2_ail1_empty()
233 gfs2_ail1_empty_one(sdp, tr, &withdraw); in gfs2_ail1_empty()
235 list_move(&tr->tr_list, &sdp->sd_ail2_list); in gfs2_ail1_empty()
239 ret = list_empty(&sdp->sd_ail1_list); in gfs2_ail1_empty()
240 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_empty()
243 gfs2_lm_withdraw(sdp, "fatal: I/O error(s)\n"); in gfs2_ail1_empty()
248 static void gfs2_ail1_wait(struct gfs2_sbd *sdp) in gfs2_ail1_wait() argument
254 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_wait()
255 list_for_each_entry_reverse(tr, &sdp->sd_ail1_list, tr_list) { in gfs2_ail1_wait()
261 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_wait()
267 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_wait()
277 static void gfs2_ail2_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr) in gfs2_ail2_empty_one() argument
285 gfs2_assert(sdp, bd->bd_tr == tr); in gfs2_ail2_empty_one()
290 static void ail2_empty(struct gfs2_sbd *sdp, unsigned int new_tail) in ail2_empty() argument
293 unsigned int old_tail = sdp->sd_log_tail; in ail2_empty()
297 spin_lock(&sdp->sd_ail_lock); in ail2_empty()
299 list_for_each_entry_safe(tr, safe, &sdp->sd_ail2_list, tr_list) { in ail2_empty()
306 gfs2_ail2_empty_one(sdp, tr); in ail2_empty()
308 gfs2_assert_warn(sdp, list_empty(&tr->tr_ail1_list)); in ail2_empty()
309 gfs2_assert_warn(sdp, list_empty(&tr->tr_ail2_list)); in ail2_empty()
313 spin_unlock(&sdp->sd_ail_lock); in ail2_empty()
323 void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks) in gfs2_log_release() argument
326 atomic_add(blks, &sdp->sd_log_blks_free); in gfs2_log_release()
327 trace_gfs2_log_blocks(sdp, blks); in gfs2_log_release()
328 gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= in gfs2_log_release()
329 sdp->sd_jdesc->jd_blocks); in gfs2_log_release()
330 up_read(&sdp->sd_log_flush_lock); in gfs2_log_release()
353 int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks) in gfs2_log_reserve() argument
356 unsigned reserved_blks = 7 * (4096 / sdp->sd_vfs->s_blocksize); in gfs2_log_reserve()
362 if (gfs2_assert_warn(sdp, blks) || in gfs2_log_reserve()
363 gfs2_assert_warn(sdp, blks <= sdp->sd_jdesc->jd_blocks)) in gfs2_log_reserve()
365 atomic_add(blks, &sdp->sd_log_blks_needed); in gfs2_log_reserve()
367 free_blocks = atomic_read(&sdp->sd_log_blks_free); in gfs2_log_reserve()
370 prepare_to_wait_exclusive(&sdp->sd_log_waitq, &wait, in gfs2_log_reserve()
372 wake_up(&sdp->sd_logd_waitq); in gfs2_log_reserve()
374 if (atomic_read(&sdp->sd_log_blks_free) <= wanted) in gfs2_log_reserve()
376 free_blocks = atomic_read(&sdp->sd_log_blks_free); in gfs2_log_reserve()
378 finish_wait(&sdp->sd_log_waitq, &wait); in gfs2_log_reserve()
380 atomic_inc(&sdp->sd_reserving_log); in gfs2_log_reserve()
381 if (atomic_cmpxchg(&sdp->sd_log_blks_free, free_blocks, in gfs2_log_reserve()
383 if (atomic_dec_and_test(&sdp->sd_reserving_log)) in gfs2_log_reserve()
384 wake_up(&sdp->sd_reserving_log_wait); in gfs2_log_reserve()
387 atomic_sub(blks, &sdp->sd_log_blks_needed); in gfs2_log_reserve()
388 trace_gfs2_log_blocks(sdp, -blks); in gfs2_log_reserve()
395 wake_up(&sdp->sd_log_waitq); in gfs2_log_reserve()
397 down_read(&sdp->sd_log_flush_lock); in gfs2_log_reserve()
398 if (unlikely(!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))) { in gfs2_log_reserve()
399 gfs2_log_release(sdp, blks); in gfs2_log_reserve()
402 if (atomic_dec_and_test(&sdp->sd_reserving_log)) in gfs2_log_reserve()
403 wake_up(&sdp->sd_reserving_log_wait); in gfs2_log_reserve()
419 static inline unsigned int log_distance(struct gfs2_sbd *sdp, unsigned int newer, in log_distance() argument
426 dist += sdp->sd_jdesc->jd_blocks; in log_distance()
456 static unsigned int calc_reserved(struct gfs2_sbd *sdp) in calc_reserved() argument
461 struct gfs2_trans *tr = sdp->sd_log_tr; in calc_reserved()
468 reserved += DIV_ROUND_UP(mbuf, buf_limit(sdp)); in calc_reserved()
469 reserved += DIV_ROUND_UP(dbuf, databuf_limit(sdp)); in calc_reserved()
472 if (sdp->sd_log_commited_revoke > 0) in calc_reserved()
473 reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke, in calc_reserved()
481 static unsigned int current_tail(struct gfs2_sbd *sdp) in current_tail() argument
486 spin_lock(&sdp->sd_ail_lock); in current_tail()
488 if (list_empty(&sdp->sd_ail1_list)) { in current_tail()
489 tail = sdp->sd_log_head; in current_tail()
491 tr = list_entry(sdp->sd_ail1_list.prev, struct gfs2_trans, in current_tail()
496 spin_unlock(&sdp->sd_ail_lock); in current_tail()
501 static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail) in log_pull_tail() argument
503 unsigned int dist = log_distance(sdp, new_tail, sdp->sd_log_tail); in log_pull_tail()
505 ail2_empty(sdp, new_tail); in log_pull_tail()
507 atomic_add(dist, &sdp->sd_log_blks_free); in log_pull_tail()
508 trace_gfs2_log_blocks(sdp, dist); in log_pull_tail()
509 gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= in log_pull_tail()
510 sdp->sd_jdesc->jd_blocks); in log_pull_tail()
512 sdp->sd_log_tail = new_tail; in log_pull_tail()
516 static void log_flush_wait(struct gfs2_sbd *sdp) in log_flush_wait() argument
520 if (atomic_read(&sdp->sd_log_in_flight)) { in log_flush_wait()
522 prepare_to_wait(&sdp->sd_log_flush_wait, &wait, in log_flush_wait()
524 if (atomic_read(&sdp->sd_log_in_flight)) in log_flush_wait()
526 } while(atomic_read(&sdp->sd_log_in_flight)); in log_flush_wait()
527 finish_wait(&sdp->sd_log_flush_wait, &wait); in log_flush_wait()
545 static void gfs2_ordered_write(struct gfs2_sbd *sdp) in gfs2_ordered_write() argument
550 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
551 list_sort(NULL, &sdp->sd_log_le_ordered, &ip_cmp); in gfs2_ordered_write()
552 while (!list_empty(&sdp->sd_log_le_ordered)) { in gfs2_ordered_write()
553 ip = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_inode, i_ordered); in gfs2_ordered_write()
560 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
562 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
564 list_splice(&written, &sdp->sd_log_le_ordered); in gfs2_ordered_write()
565 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
568 static void gfs2_ordered_wait(struct gfs2_sbd *sdp) in gfs2_ordered_wait() argument
572 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
573 while (!list_empty(&sdp->sd_log_le_ordered)) { in gfs2_ordered_wait()
574 ip = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_inode, i_ordered); in gfs2_ordered_wait()
579 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
581 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
583 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
588 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); in gfs2_ordered_del_inode() local
590 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_del_inode()
593 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_del_inode()
596 void gfs2_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) in gfs2_add_revoke() argument
606 sdp->sd_log_num_revoke++; in gfs2_add_revoke()
609 list_add(&bd->bd_list, &sdp->sd_log_le_revoke); in gfs2_add_revoke()
612 void gfs2_write_revokes(struct gfs2_sbd *sdp) in gfs2_write_revokes() argument
617 int max_revokes = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / sizeof(u64); in gfs2_write_revokes()
619 gfs2_ail1_empty(sdp); in gfs2_write_revokes()
620 spin_lock(&sdp->sd_ail_lock); in gfs2_write_revokes()
621 list_for_each_entry(tr, &sdp->sd_ail1_list, tr_list) { in gfs2_write_revokes()
630 spin_unlock(&sdp->sd_ail_lock); in gfs2_write_revokes()
633 while (sdp->sd_log_num_revoke > max_revokes) in gfs2_write_revokes()
634 max_revokes += (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header)) / sizeof(u64); in gfs2_write_revokes()
635 max_revokes -= sdp->sd_log_num_revoke; in gfs2_write_revokes()
636 if (!sdp->sd_log_num_revoke) { in gfs2_write_revokes()
637 atomic_dec(&sdp->sd_log_blks_free); in gfs2_write_revokes()
640 if (!sdp->sd_log_blks_reserved) in gfs2_write_revokes()
641 atomic_dec(&sdp->sd_log_blks_free); in gfs2_write_revokes()
643 gfs2_log_lock(sdp); in gfs2_write_revokes()
644 spin_lock(&sdp->sd_ail_lock); in gfs2_write_revokes()
645 list_for_each_entry(tr, &sdp->sd_ail1_list, tr_list) { in gfs2_write_revokes()
651 gfs2_add_revoke(sdp, bd); in gfs2_write_revokes()
656 spin_unlock(&sdp->sd_ail_lock); in gfs2_write_revokes()
657 gfs2_log_unlock(sdp); in gfs2_write_revokes()
659 if (!sdp->sd_log_num_revoke) { in gfs2_write_revokes()
660 atomic_inc(&sdp->sd_log_blks_free); in gfs2_write_revokes()
661 if (!sdp->sd_log_blks_reserved) in gfs2_write_revokes()
662 atomic_inc(&sdp->sd_log_blks_free); in gfs2_write_revokes()
678 void gfs2_write_log_header(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd, in gfs2_write_log_header() argument
684 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_write_log_header()
686 struct super_block *sb = sdp->sd_vfs; in gfs2_write_log_header()
696 lh->lh_header.mh_jid = cpu_to_be32(sdp->sd_jdesc->jd_jid); in gfs2_write_log_header()
700 lh->lh_blkno = cpu_to_be32(sdp->sd_log_flush_head); in gfs2_write_log_header()
707 addr = gfs2_log_bmap(sdp); in gfs2_write_log_header()
716 cpu_to_be64(GFS2_I(sdp->sd_sc_inode)->i_no_addr); in gfs2_write_log_header()
718 cpu_to_be64(GFS2_I(sdp->sd_qc_inode)->i_no_addr); in gfs2_write_log_header()
720 spin_lock(&sdp->sd_statfs_spin); in gfs2_write_log_header()
724 spin_unlock(&sdp->sd_statfs_spin); in gfs2_write_log_header()
733 gfs2_log_write(sdp, page, sb->s_blocksize, 0, addr); in gfs2_write_log_header()
734 gfs2_log_flush_bio(sdp, REQ_OP_WRITE, op_flags); in gfs2_write_log_header()
735 log_flush_wait(sdp); in gfs2_write_log_header()
746 static void log_write_header(struct gfs2_sbd *sdp, u32 flags) in log_write_header() argument
750 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state); in log_write_header()
752 gfs2_assert_withdraw(sdp, (state != SFS_FROZEN)); in log_write_header()
753 tail = current_tail(sdp); in log_write_header()
755 if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) { in log_write_header()
756 gfs2_ordered_wait(sdp); in log_write_header()
757 log_flush_wait(sdp); in log_write_header()
760 sdp->sd_log_idle = (tail == sdp->sd_log_flush_head); in log_write_header()
761 gfs2_write_log_header(sdp, sdp->sd_jdesc, sdp->sd_log_sequence++, tail, in log_write_header()
764 if (sdp->sd_log_tail != tail) in log_write_header()
765 log_pull_tail(sdp, tail); in log_write_header()
776 void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags) in gfs2_log_flush() argument
779 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state); in gfs2_log_flush()
781 down_write(&sdp->sd_log_flush_lock); in gfs2_log_flush()
785 up_write(&sdp->sd_log_flush_lock); in gfs2_log_flush()
788 trace_gfs2_log_flush(sdp, 1, flags); in gfs2_log_flush()
791 clear_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags); in gfs2_log_flush()
793 sdp->sd_log_flush_head = sdp->sd_log_head; in gfs2_log_flush()
794 tr = sdp->sd_log_tr; in gfs2_log_flush()
796 sdp->sd_log_tr = NULL; in gfs2_log_flush()
799 tr->tr_first = sdp->sd_log_flush_head; in gfs2_log_flush()
801 gfs2_assert_withdraw(sdp, !tr->tr_num_buf_new && !tr->tr_num_databuf_new); in gfs2_log_flush()
805 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke); in gfs2_log_flush()
806 gfs2_assert_withdraw(sdp, in gfs2_log_flush()
807 sdp->sd_log_num_revoke == sdp->sd_log_commited_revoke); in gfs2_log_flush()
809 gfs2_ordered_write(sdp); in gfs2_log_flush()
810 lops_before_commit(sdp, tr); in gfs2_log_flush()
811 gfs2_log_flush_bio(sdp, REQ_OP_WRITE, 0); in gfs2_log_flush()
813 if (sdp->sd_log_head != sdp->sd_log_flush_head) { in gfs2_log_flush()
814 log_flush_wait(sdp); in gfs2_log_flush()
815 log_write_header(sdp, flags); in gfs2_log_flush()
816 } else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ in gfs2_log_flush()
817 atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ in gfs2_log_flush()
818 trace_gfs2_log_blocks(sdp, -1); in gfs2_log_flush()
819 log_write_header(sdp, flags); in gfs2_log_flush()
821 lops_after_commit(sdp, tr); in gfs2_log_flush()
823 gfs2_log_lock(sdp); in gfs2_log_flush()
824 sdp->sd_log_head = sdp->sd_log_flush_head; in gfs2_log_flush()
825 sdp->sd_log_blks_reserved = 0; in gfs2_log_flush()
826 sdp->sd_log_commited_revoke = 0; in gfs2_log_flush()
828 spin_lock(&sdp->sd_ail_lock); in gfs2_log_flush()
830 list_add(&tr->tr_list, &sdp->sd_ail1_list); in gfs2_log_flush()
833 spin_unlock(&sdp->sd_ail_lock); in gfs2_log_flush()
834 gfs2_log_unlock(sdp); in gfs2_log_flush()
837 if (!sdp->sd_log_idle) { in gfs2_log_flush()
839 gfs2_ail1_start(sdp); in gfs2_log_flush()
840 gfs2_ail1_wait(sdp); in gfs2_log_flush()
841 if (gfs2_ail1_empty(sdp)) in gfs2_log_flush()
844 atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ in gfs2_log_flush()
845 trace_gfs2_log_blocks(sdp, -1); in gfs2_log_flush()
846 log_write_header(sdp, flags); in gfs2_log_flush()
847 sdp->sd_log_head = sdp->sd_log_flush_head; in gfs2_log_flush()
851 gfs2_log_shutdown(sdp); in gfs2_log_flush()
853 atomic_set(&sdp->sd_freeze_state, SFS_FROZEN); in gfs2_log_flush()
856 trace_gfs2_log_flush(sdp, 0, flags); in gfs2_log_flush()
857 up_write(&sdp->sd_log_flush_lock); in gfs2_log_flush()
883 static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) in log_refund() argument
889 gfs2_log_lock(sdp); in log_refund()
891 if (sdp->sd_log_tr) { in log_refund()
892 gfs2_merge_trans(sdp->sd_log_tr, tr); in log_refund()
894 gfs2_assert_withdraw(sdp, test_bit(TR_ALLOCED, &tr->tr_flags)); in log_refund()
895 sdp->sd_log_tr = tr; in log_refund()
899 sdp->sd_log_commited_revoke += tr->tr_num_revoke - tr->tr_num_revoke_rm; in log_refund()
900 reserved = calc_reserved(sdp); in log_refund()
901 maxres = sdp->sd_log_blks_reserved + tr->tr_reserved; in log_refund()
902 gfs2_assert_withdraw(sdp, maxres >= reserved); in log_refund()
904 atomic_add(unused, &sdp->sd_log_blks_free); in log_refund()
905 trace_gfs2_log_blocks(sdp, unused); in log_refund()
906 gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= in log_refund()
907 sdp->sd_jdesc->jd_blocks); in log_refund()
908 sdp->sd_log_blks_reserved = reserved; in log_refund()
910 gfs2_log_unlock(sdp); in log_refund()
928 void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) in gfs2_log_commit() argument
930 log_refund(sdp, tr); in gfs2_log_commit()
932 if (atomic_read(&sdp->sd_log_pinned) > atomic_read(&sdp->sd_log_thresh1) || in gfs2_log_commit()
933 ((sdp->sd_jdesc->jd_blocks - atomic_read(&sdp->sd_log_blks_free)) > in gfs2_log_commit()
934 atomic_read(&sdp->sd_log_thresh2))) in gfs2_log_commit()
935 wake_up(&sdp->sd_logd_waitq); in gfs2_log_commit()
944 void gfs2_log_shutdown(struct gfs2_sbd *sdp) in gfs2_log_shutdown() argument
946 gfs2_assert_withdraw(sdp, !sdp->sd_log_blks_reserved); in gfs2_log_shutdown()
947 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke); in gfs2_log_shutdown()
948 gfs2_assert_withdraw(sdp, list_empty(&sdp->sd_ail1_list)); in gfs2_log_shutdown()
950 sdp->sd_log_flush_head = sdp->sd_log_head; in gfs2_log_shutdown()
952 log_write_header(sdp, GFS2_LOG_HEAD_UNMOUNT | GFS2_LFC_SHUTDOWN); in gfs2_log_shutdown()
954 gfs2_assert_warn(sdp, sdp->sd_log_head == sdp->sd_log_tail); in gfs2_log_shutdown()
955 gfs2_assert_warn(sdp, list_empty(&sdp->sd_ail2_list)); in gfs2_log_shutdown()
957 sdp->sd_log_head = sdp->sd_log_flush_head; in gfs2_log_shutdown()
958 sdp->sd_log_tail = sdp->sd_log_head; in gfs2_log_shutdown()
961 static inline int gfs2_jrnl_flush_reqd(struct gfs2_sbd *sdp) in gfs2_jrnl_flush_reqd() argument
963 return (atomic_read(&sdp->sd_log_pinned) + in gfs2_jrnl_flush_reqd()
964 atomic_read(&sdp->sd_log_blks_needed) >= in gfs2_jrnl_flush_reqd()
965 atomic_read(&sdp->sd_log_thresh1)); in gfs2_jrnl_flush_reqd()
968 static inline int gfs2_ail_flush_reqd(struct gfs2_sbd *sdp) in gfs2_ail_flush_reqd() argument
970 unsigned int used_blocks = sdp->sd_jdesc->jd_blocks - atomic_read(&sdp->sd_log_blks_free); in gfs2_ail_flush_reqd()
972 if (test_and_clear_bit(SDF_FORCE_AIL_FLUSH, &sdp->sd_flags)) in gfs2_ail_flush_reqd()
975 return used_blocks + atomic_read(&sdp->sd_log_blks_needed) >= in gfs2_ail_flush_reqd()
976 atomic_read(&sdp->sd_log_thresh2); in gfs2_ail_flush_reqd()
989 struct gfs2_sbd *sdp = data; in gfs2_logd() local
997 if (sdp->sd_log_error) { in gfs2_logd()
998 gfs2_lm_withdraw(sdp, in gfs2_logd()
1002 sdp->sd_fsname, sdp->sd_log_error); in gfs2_logd()
1006 if (gfs2_jrnl_flush_reqd(sdp) || t == 0) { in gfs2_logd()
1007 gfs2_ail1_empty(sdp); in gfs2_logd()
1008 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL | in gfs2_logd()
1013 if (gfs2_ail_flush_reqd(sdp)) { in gfs2_logd()
1014 gfs2_ail1_start(sdp); in gfs2_logd()
1015 gfs2_ail1_wait(sdp); in gfs2_logd()
1016 gfs2_ail1_empty(sdp); in gfs2_logd()
1017 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL | in gfs2_logd()
1022 if (!gfs2_ail_flush_reqd(sdp) || did_flush) in gfs2_logd()
1023 wake_up(&sdp->sd_log_waitq); in gfs2_logd()
1025 t = gfs2_tune_get(sdp, gt_logd_secs) * HZ; in gfs2_logd()
1030 prepare_to_wait(&sdp->sd_logd_waitq, &wait, in gfs2_logd()
1032 if (!gfs2_ail_flush_reqd(sdp) && in gfs2_logd()
1033 !gfs2_jrnl_flush_reqd(sdp) && in gfs2_logd()
1036 } while(t && !gfs2_ail_flush_reqd(sdp) && in gfs2_logd()
1037 !gfs2_jrnl_flush_reqd(sdp) && in gfs2_logd()
1039 finish_wait(&sdp->sd_logd_waitq, &wait); in gfs2_logd()