log.c (969183bc68bc27d637d6d29e81d71cf854d0ca61) | log.c (9592ea80ad13fe06d7848028af6c917aa1cd0aaa) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 4 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. 5 */ 6 7#include <linux/sched.h> 8#include <linux/slab.h> --- 125 unchanged lines hidden (view full) --- 134 if (ret || wbc->nr_to_write <= 0) 135 break; 136 return -EBUSY; 137 } 138 139 return ret; 140} 141 | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 4 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. 5 */ 6 7#include <linux/sched.h> 8#include <linux/slab.h> --- 125 unchanged lines hidden (view full) --- 134 if (ret || wbc->nr_to_write <= 0) 135 break; 136 return -EBUSY; 137 } 138 139 return ret; 140} 141 |
142static void dump_ail_list(struct gfs2_sbd *sdp) 143{ 144 struct gfs2_trans *tr; 145 struct gfs2_bufdata *bd; 146 struct buffer_head *bh; |
|
142 | 147 |
148 fs_err(sdp, "Error: In gfs2_ail1_flush for ten minutes! t=%d\n", 149 current->journal_info ? 1 : 0); 150 151 list_for_each_entry_reverse(tr, &sdp->sd_ail1_list, tr_list) { 152 list_for_each_entry_reverse(bd, &tr->tr_ail1_list, 153 bd_ail_st_list) { 154 bh = bd->bd_bh; 155 fs_err(sdp, "bd %p: blk:0x%llx bh=%p ", bd, 156 (unsigned long long)bd->bd_blkno, bh); 157 if (!bh) { 158 fs_err(sdp, "\n"); 159 continue; 160 } 161 fs_err(sdp, "0x%llx up2:%d dirt:%d lkd:%d req:%d " 162 "map:%d new:%d ar:%d aw:%d delay:%d " 163 "io err:%d unwritten:%d dfr:%d pin:%d esc:%d\n", 164 (unsigned long long)bh->b_blocknr, 165 buffer_uptodate(bh), buffer_dirty(bh), 166 buffer_locked(bh), buffer_req(bh), 167 buffer_mapped(bh), buffer_new(bh), 168 buffer_async_read(bh), buffer_async_write(bh), 169 buffer_delay(bh), buffer_write_io_error(bh), 170 buffer_unwritten(bh), 171 buffer_defer_completion(bh), 172 buffer_pinned(bh), buffer_escaped(bh)); 173 } 174 } 175} 176 |
|
143/** 144 * gfs2_ail1_flush - start writeback of some ail1 entries 145 * @sdp: The super block 146 * @wbc: The writeback control structure 147 * 148 * Writes back some ail1 entries, according to the limits in the 149 * writeback control structure 150 */ 151 152void gfs2_ail1_flush(struct gfs2_sbd *sdp, struct writeback_control *wbc) 153{ 154 struct list_head *head = &sdp->sd_ail1_list; 155 struct gfs2_trans *tr; 156 struct blk_plug plug; 157 int ret = 0; | 177/** 178 * gfs2_ail1_flush - start writeback of some ail1 entries 179 * @sdp: The super block 180 * @wbc: The writeback control structure 181 * 182 * Writes back some ail1 entries, according to the limits in the 183 * writeback control structure 184 */ 185 186void gfs2_ail1_flush(struct gfs2_sbd *sdp, struct writeback_control *wbc) 187{ 188 struct list_head *head = &sdp->sd_ail1_list; 189 struct gfs2_trans *tr; 190 struct blk_plug plug; 191 int ret = 0; |
192 unsigned long flush_start = jiffies; |
|
158 159 trace_gfs2_ail_flush(sdp, wbc, 1); 160 blk_start_plug(&plug); 161 spin_lock(&sdp->sd_ail_lock); 162restart: | 193 194 trace_gfs2_ail_flush(sdp, wbc, 1); 195 blk_start_plug(&plug); 196 spin_lock(&sdp->sd_ail_lock); 197restart: |
198 if (time_after(jiffies, flush_start + (HZ * 600))) { 199 dump_ail_list(sdp); 200 goto out; 201 } |
|
163 list_for_each_entry_reverse(tr, head, tr_list) { 164 if (wbc->nr_to_write <= 0) 165 break; 166 ret = gfs2_ail1_start_one(sdp, wbc, tr); 167 if (ret) { 168 if (ret == -EBUSY) 169 goto restart; 170 break; 171 } 172 } | 202 list_for_each_entry_reverse(tr, head, tr_list) { 203 if (wbc->nr_to_write <= 0) 204 break; 205 ret = gfs2_ail1_start_one(sdp, wbc, tr); 206 if (ret) { 207 if (ret == -EBUSY) 208 goto restart; 209 break; 210 } 211 } |
212out: |
|
173 spin_unlock(&sdp->sd_ail_lock); 174 blk_finish_plug(&plug); 175 if (ret) { 176 gfs2_lm(sdp, "gfs2_ail1_start_one (generic_writepages) " 177 "returned: %d\n", ret); 178 gfs2_withdraw(sdp); 179 } 180 trace_gfs2_ail_flush(sdp, wbc, 0); --- 962 unchanged lines hidden --- | 213 spin_unlock(&sdp->sd_ail_lock); 214 blk_finish_plug(&plug); 215 if (ret) { 216 gfs2_lm(sdp, "gfs2_ail1_start_one (generic_writepages) " 217 "returned: %d\n", ret); 218 gfs2_withdraw(sdp); 219 } 220 trace_gfs2_ail_flush(sdp, wbc, 0); --- 962 unchanged lines hidden --- |