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