Lines Matching refs:sdp
48 unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct, in gfs2_struct2blk() argument
55 first = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / ssize; in gfs2_struct2blk()
58 second = (sdp->sd_sb.sb_bsize - in gfs2_struct2blk()
92 static int gfs2_ail1_start_one(struct gfs2_sbd *sdp, in gfs2_ail1_start_one() argument
95 __releases(&sdp->sd_ail_lock) in gfs2_ail1_start_one()
96 __acquires(&sdp->sd_ail_lock) in gfs2_ail1_start_one()
106 gfs2_assert(sdp, bd->bd_tr == tr); in gfs2_ail1_start_one()
110 gfs2_io_error_bh(sdp, bh); in gfs2_ail1_start_one()
124 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_start_one()
126 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_start_one()
145 void gfs2_ail1_flush(struct gfs2_sbd *sdp, struct writeback_control *wbc) in gfs2_ail1_flush() argument
147 struct list_head *head = &sdp->sd_ail1_list; in gfs2_ail1_flush()
151 trace_gfs2_ail_flush(sdp, wbc, 1); in gfs2_ail1_flush()
153 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_flush()
158 if (gfs2_ail1_start_one(sdp, wbc, tr)) in gfs2_ail1_flush()
161 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_flush()
163 trace_gfs2_ail_flush(sdp, wbc, 0); in gfs2_ail1_flush()
171 static void gfs2_ail1_start(struct gfs2_sbd *sdp) in gfs2_ail1_start() argument
180 return gfs2_ail1_flush(sdp, &wbc); in gfs2_ail1_start()
190 static void gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr) in gfs2_ail1_empty_one() argument
198 gfs2_assert(sdp, bd->bd_tr == tr); in gfs2_ail1_empty_one()
202 gfs2_io_error_bh(sdp, bh); in gfs2_ail1_empty_one()
215 static int gfs2_ail1_empty(struct gfs2_sbd *sdp) in gfs2_ail1_empty() argument
221 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_empty()
222 list_for_each_entry_safe_reverse(tr, s, &sdp->sd_ail1_list, tr_list) { in gfs2_ail1_empty()
223 gfs2_ail1_empty_one(sdp, tr); in gfs2_ail1_empty()
225 list_move(&tr->tr_list, &sdp->sd_ail2_list); in gfs2_ail1_empty()
229 ret = list_empty(&sdp->sd_ail1_list); in gfs2_ail1_empty()
230 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_empty()
235 static void gfs2_ail1_wait(struct gfs2_sbd *sdp) in gfs2_ail1_wait() argument
241 spin_lock(&sdp->sd_ail_lock); in gfs2_ail1_wait()
242 list_for_each_entry_reverse(tr, &sdp->sd_ail1_list, tr_list) { in gfs2_ail1_wait()
248 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_wait()
254 spin_unlock(&sdp->sd_ail_lock); in gfs2_ail1_wait()
264 static void gfs2_ail2_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr) in gfs2_ail2_empty_one() argument
272 gfs2_assert(sdp, bd->bd_tr == tr); in gfs2_ail2_empty_one()
277 static void ail2_empty(struct gfs2_sbd *sdp, unsigned int new_tail) in ail2_empty() argument
280 unsigned int old_tail = sdp->sd_log_tail; in ail2_empty()
284 spin_lock(&sdp->sd_ail_lock); in ail2_empty()
286 list_for_each_entry_safe(tr, safe, &sdp->sd_ail2_list, tr_list) { in ail2_empty()
293 gfs2_ail2_empty_one(sdp, tr); in ail2_empty()
295 gfs2_assert_warn(sdp, list_empty(&tr->tr_ail1_list)); in ail2_empty()
296 gfs2_assert_warn(sdp, list_empty(&tr->tr_ail2_list)); in ail2_empty()
300 spin_unlock(&sdp->sd_ail_lock); in ail2_empty()
310 void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks) in gfs2_log_release() argument
313 atomic_add(blks, &sdp->sd_log_blks_free); in gfs2_log_release()
314 trace_gfs2_log_blocks(sdp, blks); in gfs2_log_release()
315 gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= in gfs2_log_release()
316 sdp->sd_jdesc->jd_blocks); in gfs2_log_release()
317 up_read(&sdp->sd_log_flush_lock); in gfs2_log_release()
340 int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks) in gfs2_log_reserve() argument
343 unsigned reserved_blks = 7 * (4096 / sdp->sd_vfs->s_blocksize); in gfs2_log_reserve()
349 if (gfs2_assert_warn(sdp, blks) || in gfs2_log_reserve()
350 gfs2_assert_warn(sdp, blks <= sdp->sd_jdesc->jd_blocks)) in gfs2_log_reserve()
353 free_blocks = atomic_read(&sdp->sd_log_blks_free); in gfs2_log_reserve()
356 prepare_to_wait_exclusive(&sdp->sd_log_waitq, &wait, in gfs2_log_reserve()
358 wake_up(&sdp->sd_logd_waitq); in gfs2_log_reserve()
360 if (atomic_read(&sdp->sd_log_blks_free) <= wanted) in gfs2_log_reserve()
362 free_blocks = atomic_read(&sdp->sd_log_blks_free); in gfs2_log_reserve()
364 finish_wait(&sdp->sd_log_waitq, &wait); in gfs2_log_reserve()
366 atomic_inc(&sdp->sd_reserving_log); in gfs2_log_reserve()
367 if (atomic_cmpxchg(&sdp->sd_log_blks_free, free_blocks, in gfs2_log_reserve()
369 if (atomic_dec_and_test(&sdp->sd_reserving_log)) in gfs2_log_reserve()
370 wake_up(&sdp->sd_reserving_log_wait); in gfs2_log_reserve()
373 trace_gfs2_log_blocks(sdp, -blks); in gfs2_log_reserve()
380 wake_up(&sdp->sd_log_waitq); in gfs2_log_reserve()
382 down_read(&sdp->sd_log_flush_lock); in gfs2_log_reserve()
383 if (unlikely(!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))) { in gfs2_log_reserve()
384 gfs2_log_release(sdp, blks); in gfs2_log_reserve()
387 if (atomic_dec_and_test(&sdp->sd_reserving_log)) in gfs2_log_reserve()
388 wake_up(&sdp->sd_reserving_log_wait); in gfs2_log_reserve()
404 static inline unsigned int log_distance(struct gfs2_sbd *sdp, unsigned int newer, in log_distance() argument
411 dist += sdp->sd_jdesc->jd_blocks; in log_distance()
441 static unsigned int calc_reserved(struct gfs2_sbd *sdp) in calc_reserved() argument
446 struct gfs2_trans *tr = sdp->sd_log_tr; in calc_reserved()
453 reserved += DIV_ROUND_UP(mbuf, buf_limit(sdp)); in calc_reserved()
454 reserved += DIV_ROUND_UP(dbuf, databuf_limit(sdp)); in calc_reserved()
457 if (sdp->sd_log_commited_revoke > 0) in calc_reserved()
458 reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke, in calc_reserved()
466 static unsigned int current_tail(struct gfs2_sbd *sdp) in current_tail() argument
471 spin_lock(&sdp->sd_ail_lock); in current_tail()
473 if (list_empty(&sdp->sd_ail1_list)) { in current_tail()
474 tail = sdp->sd_log_head; in current_tail()
476 tr = list_entry(sdp->sd_ail1_list.prev, struct gfs2_trans, in current_tail()
481 spin_unlock(&sdp->sd_ail_lock); in current_tail()
486 static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail) in log_pull_tail() argument
488 unsigned int dist = log_distance(sdp, new_tail, sdp->sd_log_tail); in log_pull_tail()
490 ail2_empty(sdp, new_tail); in log_pull_tail()
492 atomic_add(dist, &sdp->sd_log_blks_free); in log_pull_tail()
493 trace_gfs2_log_blocks(sdp, dist); in log_pull_tail()
494 gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= in log_pull_tail()
495 sdp->sd_jdesc->jd_blocks); in log_pull_tail()
497 sdp->sd_log_tail = new_tail; in log_pull_tail()
501 static void log_flush_wait(struct gfs2_sbd *sdp) in log_flush_wait() argument
505 if (atomic_read(&sdp->sd_log_in_flight)) { in log_flush_wait()
507 prepare_to_wait(&sdp->sd_log_flush_wait, &wait, in log_flush_wait()
509 if (atomic_read(&sdp->sd_log_in_flight)) in log_flush_wait()
511 } while(atomic_read(&sdp->sd_log_in_flight)); in log_flush_wait()
512 finish_wait(&sdp->sd_log_flush_wait, &wait); in log_flush_wait()
530 static void gfs2_ordered_write(struct gfs2_sbd *sdp) in gfs2_ordered_write() argument
535 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
536 list_sort(NULL, &sdp->sd_log_le_ordered, &ip_cmp); in gfs2_ordered_write()
537 while (!list_empty(&sdp->sd_log_le_ordered)) { in gfs2_ordered_write()
538 ip = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_inode, i_ordered); in gfs2_ordered_write()
542 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
544 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
546 list_splice(&written, &sdp->sd_log_le_ordered); in gfs2_ordered_write()
547 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_write()
550 static void gfs2_ordered_wait(struct gfs2_sbd *sdp) in gfs2_ordered_wait() argument
554 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
555 while (!list_empty(&sdp->sd_log_le_ordered)) { in gfs2_ordered_wait()
556 ip = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_inode, i_ordered); in gfs2_ordered_wait()
561 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
563 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
565 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_wait()
570 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); in gfs2_ordered_del_inode() local
572 spin_lock(&sdp->sd_ordered_lock); in gfs2_ordered_del_inode()
575 spin_unlock(&sdp->sd_ordered_lock); in gfs2_ordered_del_inode()
578 void gfs2_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd) in gfs2_add_revoke() argument
588 sdp->sd_log_num_revoke++; in gfs2_add_revoke()
591 list_add(&bd->bd_list, &sdp->sd_log_le_revoke); in gfs2_add_revoke()
594 void gfs2_write_revokes(struct gfs2_sbd *sdp) in gfs2_write_revokes() argument
599 int max_revokes = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / sizeof(u64); in gfs2_write_revokes()
601 gfs2_ail1_empty(sdp); in gfs2_write_revokes()
602 spin_lock(&sdp->sd_ail_lock); in gfs2_write_revokes()
603 list_for_each_entry(tr, &sdp->sd_ail1_list, tr_list) { in gfs2_write_revokes()
612 spin_unlock(&sdp->sd_ail_lock); in gfs2_write_revokes()
615 while (sdp->sd_log_num_revoke > max_revokes) in gfs2_write_revokes()
616 max_revokes += (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header)) / sizeof(u64); in gfs2_write_revokes()
617 max_revokes -= sdp->sd_log_num_revoke; in gfs2_write_revokes()
618 if (!sdp->sd_log_num_revoke) { in gfs2_write_revokes()
619 atomic_dec(&sdp->sd_log_blks_free); in gfs2_write_revokes()
622 if (!sdp->sd_log_blks_reserved) in gfs2_write_revokes()
623 atomic_dec(&sdp->sd_log_blks_free); in gfs2_write_revokes()
625 gfs2_log_lock(sdp); in gfs2_write_revokes()
626 spin_lock(&sdp->sd_ail_lock); in gfs2_write_revokes()
627 list_for_each_entry(tr, &sdp->sd_ail1_list, tr_list) { in gfs2_write_revokes()
633 gfs2_add_revoke(sdp, bd); in gfs2_write_revokes()
638 spin_unlock(&sdp->sd_ail_lock); in gfs2_write_revokes()
639 gfs2_log_unlock(sdp); in gfs2_write_revokes()
641 if (!sdp->sd_log_num_revoke) { in gfs2_write_revokes()
642 atomic_inc(&sdp->sd_log_blks_free); in gfs2_write_revokes()
643 if (!sdp->sd_log_blks_reserved) in gfs2_write_revokes()
644 atomic_inc(&sdp->sd_log_blks_free); in gfs2_write_revokes()
655 static void log_write_header(struct gfs2_sbd *sdp, u32 flags) in log_write_header() argument
662 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state); in log_write_header()
666 gfs2_assert_withdraw(sdp, (state != SFS_FROZEN)); in log_write_header()
668 tail = current_tail(sdp); in log_write_header()
674 lh->lh_header.mh_jid = cpu_to_be32(sdp->sd_jdesc->jd_jid); in log_write_header()
675 lh->lh_sequence = cpu_to_be64(sdp->sd_log_sequence++); in log_write_header()
678 lh->lh_blkno = cpu_to_be32(sdp->sd_log_flush_head); in log_write_header()
682 if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) { in log_write_header()
683 gfs2_ordered_wait(sdp); in log_write_header()
684 log_flush_wait(sdp); in log_write_header()
688 sdp->sd_log_idle = (tail == sdp->sd_log_flush_head); in log_write_header()
689 gfs2_log_write_page(sdp, page); in log_write_header()
690 gfs2_log_flush_bio(sdp, rw); in log_write_header()
691 log_flush_wait(sdp); in log_write_header()
693 if (sdp->sd_log_tail != tail) in log_write_header()
694 log_pull_tail(sdp, tail); in log_write_header()
704 void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, in gfs2_log_flush() argument
708 enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state); in gfs2_log_flush()
710 down_write(&sdp->sd_log_flush_lock); in gfs2_log_flush()
714 up_write(&sdp->sd_log_flush_lock); in gfs2_log_flush()
717 trace_gfs2_log_flush(sdp, 1); in gfs2_log_flush()
719 sdp->sd_log_flush_head = sdp->sd_log_head; in gfs2_log_flush()
720 sdp->sd_log_flush_wrapped = 0; in gfs2_log_flush()
721 tr = sdp->sd_log_tr; in gfs2_log_flush()
723 sdp->sd_log_tr = NULL; in gfs2_log_flush()
726 tr->tr_first = sdp->sd_log_flush_head; in gfs2_log_flush()
728 gfs2_assert_withdraw(sdp, !tr->tr_num_buf_new && !tr->tr_num_databuf_new); in gfs2_log_flush()
732 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke); in gfs2_log_flush()
733 gfs2_assert_withdraw(sdp, in gfs2_log_flush()
734 sdp->sd_log_num_revoke == sdp->sd_log_commited_revoke); in gfs2_log_flush()
736 gfs2_ordered_write(sdp); in gfs2_log_flush()
737 lops_before_commit(sdp, tr); in gfs2_log_flush()
738 gfs2_log_flush_bio(sdp, WRITE); in gfs2_log_flush()
740 if (sdp->sd_log_head != sdp->sd_log_flush_head) { in gfs2_log_flush()
741 log_flush_wait(sdp); in gfs2_log_flush()
742 log_write_header(sdp, 0); in gfs2_log_flush()
743 } else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ in gfs2_log_flush()
744 atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ in gfs2_log_flush()
745 trace_gfs2_log_blocks(sdp, -1); in gfs2_log_flush()
746 log_write_header(sdp, 0); in gfs2_log_flush()
748 lops_after_commit(sdp, tr); in gfs2_log_flush()
750 gfs2_log_lock(sdp); in gfs2_log_flush()
751 sdp->sd_log_head = sdp->sd_log_flush_head; in gfs2_log_flush()
752 sdp->sd_log_blks_reserved = 0; in gfs2_log_flush()
753 sdp->sd_log_commited_revoke = 0; in gfs2_log_flush()
755 spin_lock(&sdp->sd_ail_lock); in gfs2_log_flush()
757 list_add(&tr->tr_list, &sdp->sd_ail1_list); in gfs2_log_flush()
760 spin_unlock(&sdp->sd_ail_lock); in gfs2_log_flush()
761 gfs2_log_unlock(sdp); in gfs2_log_flush()
764 if (!sdp->sd_log_idle) { in gfs2_log_flush()
766 gfs2_ail1_start(sdp); in gfs2_log_flush()
767 gfs2_ail1_wait(sdp); in gfs2_log_flush()
768 if (gfs2_ail1_empty(sdp)) in gfs2_log_flush()
771 atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ in gfs2_log_flush()
772 trace_gfs2_log_blocks(sdp, -1); in gfs2_log_flush()
773 sdp->sd_log_flush_wrapped = 0; in gfs2_log_flush()
774 log_write_header(sdp, 0); in gfs2_log_flush()
775 sdp->sd_log_head = sdp->sd_log_flush_head; in gfs2_log_flush()
778 gfs2_log_shutdown(sdp); in gfs2_log_flush()
780 atomic_set(&sdp->sd_freeze_state, SFS_FROZEN); in gfs2_log_flush()
783 trace_gfs2_log_flush(sdp, 0); in gfs2_log_flush()
784 up_write(&sdp->sd_log_flush_lock); in gfs2_log_flush()
810 static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) in log_refund() argument
816 gfs2_log_lock(sdp); in log_refund()
818 if (sdp->sd_log_tr) { in log_refund()
819 gfs2_merge_trans(sdp->sd_log_tr, tr); in log_refund()
821 gfs2_assert_withdraw(sdp, tr->tr_alloced); in log_refund()
822 sdp->sd_log_tr = tr; in log_refund()
826 sdp->sd_log_commited_revoke += tr->tr_num_revoke - tr->tr_num_revoke_rm; in log_refund()
827 reserved = calc_reserved(sdp); in log_refund()
828 maxres = sdp->sd_log_blks_reserved + tr->tr_reserved; in log_refund()
829 gfs2_assert_withdraw(sdp, maxres >= reserved); in log_refund()
831 atomic_add(unused, &sdp->sd_log_blks_free); in log_refund()
832 trace_gfs2_log_blocks(sdp, unused); in log_refund()
833 gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= in log_refund()
834 sdp->sd_jdesc->jd_blocks); in log_refund()
835 sdp->sd_log_blks_reserved = reserved; in log_refund()
837 gfs2_log_unlock(sdp); in log_refund()
855 void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) in gfs2_log_commit() argument
857 log_refund(sdp, tr); in gfs2_log_commit()
859 if (atomic_read(&sdp->sd_log_pinned) > atomic_read(&sdp->sd_log_thresh1) || in gfs2_log_commit()
860 ((sdp->sd_jdesc->jd_blocks - atomic_read(&sdp->sd_log_blks_free)) > in gfs2_log_commit()
861 atomic_read(&sdp->sd_log_thresh2))) in gfs2_log_commit()
862 wake_up(&sdp->sd_logd_waitq); in gfs2_log_commit()
871 void gfs2_log_shutdown(struct gfs2_sbd *sdp) in gfs2_log_shutdown() argument
873 gfs2_assert_withdraw(sdp, !sdp->sd_log_blks_reserved); in gfs2_log_shutdown()
874 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke); in gfs2_log_shutdown()
875 gfs2_assert_withdraw(sdp, list_empty(&sdp->sd_ail1_list)); in gfs2_log_shutdown()
877 sdp->sd_log_flush_head = sdp->sd_log_head; in gfs2_log_shutdown()
878 sdp->sd_log_flush_wrapped = 0; in gfs2_log_shutdown()
880 log_write_header(sdp, GFS2_LOG_HEAD_UNMOUNT); in gfs2_log_shutdown()
882 gfs2_assert_warn(sdp, sdp->sd_log_head == sdp->sd_log_tail); in gfs2_log_shutdown()
883 gfs2_assert_warn(sdp, list_empty(&sdp->sd_ail2_list)); in gfs2_log_shutdown()
885 sdp->sd_log_head = sdp->sd_log_flush_head; in gfs2_log_shutdown()
886 sdp->sd_log_tail = sdp->sd_log_head; in gfs2_log_shutdown()
889 static inline int gfs2_jrnl_flush_reqd(struct gfs2_sbd *sdp) in gfs2_jrnl_flush_reqd() argument
891 return (atomic_read(&sdp->sd_log_pinned) >= atomic_read(&sdp->sd_log_thresh1)); in gfs2_jrnl_flush_reqd()
894 static inline int gfs2_ail_flush_reqd(struct gfs2_sbd *sdp) in gfs2_ail_flush_reqd() argument
896 unsigned int used_blocks = sdp->sd_jdesc->jd_blocks - atomic_read(&sdp->sd_log_blks_free); in gfs2_ail_flush_reqd()
897 return used_blocks >= atomic_read(&sdp->sd_log_thresh2); in gfs2_ail_flush_reqd()
910 struct gfs2_sbd *sdp = data; in gfs2_logd() local
916 if (gfs2_jrnl_flush_reqd(sdp) || t == 0) { in gfs2_logd()
917 gfs2_ail1_empty(sdp); in gfs2_logd()
918 gfs2_log_flush(sdp, NULL, NORMAL_FLUSH); in gfs2_logd()
921 if (gfs2_ail_flush_reqd(sdp)) { in gfs2_logd()
922 gfs2_ail1_start(sdp); in gfs2_logd()
923 gfs2_ail1_wait(sdp); in gfs2_logd()
924 gfs2_ail1_empty(sdp); in gfs2_logd()
925 gfs2_log_flush(sdp, NULL, NORMAL_FLUSH); in gfs2_logd()
928 if (!gfs2_ail_flush_reqd(sdp)) in gfs2_logd()
929 wake_up(&sdp->sd_log_waitq); in gfs2_logd()
931 t = gfs2_tune_get(sdp, gt_logd_secs) * HZ; in gfs2_logd()
936 prepare_to_wait(&sdp->sd_logd_waitq, &wait, in gfs2_logd()
938 if (!gfs2_ail_flush_reqd(sdp) && in gfs2_logd()
939 !gfs2_jrnl_flush_reqd(sdp) && in gfs2_logd()
942 } while(t && !gfs2_ail_flush_reqd(sdp) && in gfs2_logd()
943 !gfs2_jrnl_flush_reqd(sdp) && in gfs2_logd()
945 finish_wait(&sdp->sd_logd_waitq, &wait); in gfs2_logd()