log.c 26.1 KB
Newer Older
D
David Teigland 已提交
1 2
/*
 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
B
Bob Peterson 已提交
3
 * Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
D
David Teigland 已提交
4 5 6
 *
 * This copyrighted material is made available to anyone wishing to use,
 * modify, copy, or redistribute it subject to the terms and conditions
7
 * of the GNU General Public License version 2.
D
David Teigland 已提交
8 9 10 11 12 13 14
 */

#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/completion.h>
#include <linux/buffer_head.h>
15
#include <linux/gfs2_ondisk.h>
16
#include <linux/crc32.h>
17
#include <linux/delay.h>
18 19
#include <linux/kthread.h>
#include <linux/freezer.h>
20
#include <linux/bio.h>
S
Steven Whitehouse 已提交
21
#include <linux/blkdev.h>
22
#include <linux/writeback.h>
B
Bob Peterson 已提交
23
#include <linux/list_sort.h>
D
David Teigland 已提交
24 25

#include "gfs2.h"
26
#include "incore.h"
D
David Teigland 已提交
27 28 29 30 31
#include "bmap.h"
#include "glock.h"
#include "log.h"
#include "lops.h"
#include "meta_io.h"
32
#include "util.h"
33
#include "dir.h"
S
Steven Whitehouse 已提交
34
#include "trace_gfs2.h"
D
David Teigland 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

/**
 * gfs2_struct2blk - compute stuff
 * @sdp: the filesystem
 * @nstruct: the number of structures
 * @ssize: the size of the structures
 *
 * Compute the number of log descriptor blocks needed to hold a certain number
 * of structures of a certain size.
 *
 * Returns: the number of blocks needed (minimum is always 1)
 */

unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct,
			     unsigned int ssize)
{
	unsigned int blks;
	unsigned int first, second;

	blks = 1;
S
Steven Whitehouse 已提交
55
	first = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / ssize;
D
David Teigland 已提交
56 57

	if (nstruct > first) {
58 59
		second = (sdp->sd_sb.sb_bsize -
			  sizeof(struct gfs2_meta_header)) / ssize;
60
		blks += DIV_ROUND_UP(nstruct - first, second);
D
David Teigland 已提交
61 62 63 64 65
	}

	return blks;
}

66 67 68 69 70
/**
 * gfs2_remove_from_ail - Remove an entry from the ail lists, updating counters
 * @mapping: The associated mapping (maybe NULL)
 * @bd: The gfs2_bufdata to remove
 *
71
 * The ail lock _must_ be held when calling this function
72 73 74
 *
 */

75
void gfs2_remove_from_ail(struct gfs2_bufdata *bd)
76
{
77
	bd->bd_tr = NULL;
78 79
	list_del_init(&bd->bd_ail_st_list);
	list_del_init(&bd->bd_ail_gl_list);
80 81 82 83
	atomic_dec(&bd->bd_gl->gl_ail_count);
	brelse(bd->bd_bh);
}

84 85 86
/**
 * gfs2_ail1_start_one - Start I/O on a part of the AIL
 * @sdp: the filesystem
87 88
 * @wbc: The writeback control structure
 * @ai: The ail structure
89 90 91
 *
 */

S
Steven Whitehouse 已提交
92 93
static int gfs2_ail1_start_one(struct gfs2_sbd *sdp,
			       struct writeback_control *wbc,
94
			       struct gfs2_trans *tr)
D
Dave Chinner 已提交
95 96
__releases(&sdp->sd_ail_lock)
__acquires(&sdp->sd_ail_lock)
97
{
98
	struct gfs2_glock *gl = NULL;
99
	struct address_space *mapping;
100 101 102
	struct gfs2_bufdata *bd, *s;
	struct buffer_head *bh;

103
	list_for_each_entry_safe_reverse(bd, s, &tr->tr_ail1_list, bd_ail_st_list) {
104
		bh = bd->bd_bh;
105

106
		gfs2_assert(sdp, bd->bd_tr == tr);
107

108 109 110
		if (!buffer_busy(bh)) {
			if (!buffer_uptodate(bh))
				gfs2_io_error_bh(sdp, bh);
111
			list_move(&bd->bd_ail_st_list, &tr->tr_ail2_list);
112 113 114 115 116 117 118 119
			continue;
		}

		if (!buffer_dirty(bh))
			continue;
		if (gl == bd->bd_gl)
			continue;
		gl = bd->bd_gl;
120
		list_move(&bd->bd_ail_st_list, &tr->tr_ail1_list);
121
		mapping = bh->b_page->mapping;
S
Steven Whitehouse 已提交
122 123
		if (!mapping)
			continue;
124 125 126 127 128
		spin_unlock(&sdp->sd_ail_lock);
		generic_writepages(mapping, wbc);
		spin_lock(&sdp->sd_ail_lock);
		if (wbc->nr_to_write <= 0)
			break;
S
Steven Whitehouse 已提交
129
		return 1;
130
	}
S
Steven Whitehouse 已提交
131 132

	return 0;
133
}
134 135


136 137 138 139 140 141 142 143
/**
 * gfs2_ail1_flush - start writeback of some ail1 entries 
 * @sdp: The super block
 * @wbc: The writeback control structure
 *
 * Writes back some ail1 entries, according to the limits in the
 * writeback control structure
 */
144

145 146 147
void gfs2_ail1_flush(struct gfs2_sbd *sdp, struct writeback_control *wbc)
{
	struct list_head *head = &sdp->sd_ail1_list;
148
	struct gfs2_trans *tr;
S
Steven Whitehouse 已提交
149
	struct blk_plug plug;
150

151
	trace_gfs2_ail_flush(sdp, wbc, 1);
S
Steven Whitehouse 已提交
152
	blk_start_plug(&plug);
153
	spin_lock(&sdp->sd_ail_lock);
S
Steven Whitehouse 已提交
154
restart:
155
	list_for_each_entry_reverse(tr, head, tr_list) {
156
		if (wbc->nr_to_write <= 0)
157
			break;
158
		if (gfs2_ail1_start_one(sdp, wbc, tr))
S
Steven Whitehouse 已提交
159
			goto restart;
160 161
	}
	spin_unlock(&sdp->sd_ail_lock);
S
Steven Whitehouse 已提交
162
	blk_finish_plug(&plug);
163
	trace_gfs2_ail_flush(sdp, wbc, 0);
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
}

/**
 * gfs2_ail1_start - start writeback of all ail1 entries
 * @sdp: The superblock
 */

static void gfs2_ail1_start(struct gfs2_sbd *sdp)
{
	struct writeback_control wbc = {
		.sync_mode = WB_SYNC_NONE,
		.nr_to_write = LONG_MAX,
		.range_start = 0,
		.range_end = LLONG_MAX,
	};

	return gfs2_ail1_flush(sdp, &wbc);
181 182 183 184 185 186 187 188 189
}

/**
 * gfs2_ail1_empty_one - Check whether or not a trans in the AIL has been synced
 * @sdp: the filesystem
 * @ai: the AIL entry
 *
 */

190
static void gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
191 192 193 194
{
	struct gfs2_bufdata *bd, *s;
	struct buffer_head *bh;

195
	list_for_each_entry_safe_reverse(bd, s, &tr->tr_ail1_list,
196 197
					 bd_ail_st_list) {
		bh = bd->bd_bh;
198
		gfs2_assert(sdp, bd->bd_tr == tr);
199 200
		if (buffer_busy(bh))
			continue;
201 202
		if (!buffer_uptodate(bh))
			gfs2_io_error_bh(sdp, bh);
203
		list_move(&bd->bd_ail_st_list, &tr->tr_ail2_list);
204 205 206 207
	}

}

208 209 210 211 212 213
/**
 * gfs2_ail1_empty - Try to empty the ail1 lists
 * @sdp: The superblock
 *
 * Tries to empty the ail1 lists, starting with the oldest first
 */
D
David Teigland 已提交
214

215
static int gfs2_ail1_empty(struct gfs2_sbd *sdp)
D
David Teigland 已提交
216
{
217
	struct gfs2_trans *tr, *s;
218
	int oldest_tr = 1;
D
David Teigland 已提交
219 220
	int ret;

D
Dave Chinner 已提交
221
	spin_lock(&sdp->sd_ail_lock);
222 223
	list_for_each_entry_safe_reverse(tr, s, &sdp->sd_ail1_list, tr_list) {
		gfs2_ail1_empty_one(sdp, tr);
224
		if (list_empty(&tr->tr_ail1_list) && oldest_tr)
225
			list_move(&tr->tr_list, &sdp->sd_ail2_list);
226
		else
227
			oldest_tr = 0;
D
David Teigland 已提交
228 229
	}
	ret = list_empty(&sdp->sd_ail1_list);
D
Dave Chinner 已提交
230
	spin_unlock(&sdp->sd_ail_lock);
D
David Teigland 已提交
231 232 233 234

	return ret;
}

235 236
static void gfs2_ail1_wait(struct gfs2_sbd *sdp)
{
237
	struct gfs2_trans *tr;
238 239 240 241
	struct gfs2_bufdata *bd;
	struct buffer_head *bh;

	spin_lock(&sdp->sd_ail_lock);
242 243
	list_for_each_entry_reverse(tr, &sdp->sd_ail1_list, tr_list) {
		list_for_each_entry(bd, &tr->tr_ail1_list, bd_ail_st_list) {
244 245 246 247 248 249 250 251 252 253 254 255
			bh = bd->bd_bh;
			if (!buffer_locked(bh))
				continue;
			get_bh(bh);
			spin_unlock(&sdp->sd_ail_lock);
			wait_on_buffer(bh);
			brelse(bh);
			return;
		}
	}
	spin_unlock(&sdp->sd_ail_lock);
}
256 257 258 259 260 261 262 263

/**
 * gfs2_ail2_empty_one - Check whether or not a trans in the AIL has been synced
 * @sdp: the filesystem
 * @ai: the AIL entry
 *
 */

264
static void gfs2_ail2_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
265
{
266
	struct list_head *head = &tr->tr_ail2_list;
267 268 269 270 271
	struct gfs2_bufdata *bd;

	while (!list_empty(head)) {
		bd = list_entry(head->prev, struct gfs2_bufdata,
				bd_ail_st_list);
272
		gfs2_assert(sdp, bd->bd_tr == tr);
273
		gfs2_remove_from_ail(bd);
274 275 276
	}
}

D
David Teigland 已提交
277 278
static void ail2_empty(struct gfs2_sbd *sdp, unsigned int new_tail)
{
279
	struct gfs2_trans *tr, *safe;
D
David Teigland 已提交
280 281 282 283
	unsigned int old_tail = sdp->sd_log_tail;
	int wrap = (new_tail < old_tail);
	int a, b, rm;

D
Dave Chinner 已提交
284
	spin_lock(&sdp->sd_ail_lock);
D
David Teigland 已提交
285

286 287 288
	list_for_each_entry_safe(tr, safe, &sdp->sd_ail2_list, tr_list) {
		a = (old_tail <= tr->tr_first);
		b = (tr->tr_first < new_tail);
D
David Teigland 已提交
289 290 291 292
		rm = (wrap) ? (a || b) : (a && b);
		if (!rm)
			continue;

293 294 295 296 297
		gfs2_ail2_empty_one(sdp, tr);
		list_del(&tr->tr_list);
		gfs2_assert_warn(sdp, list_empty(&tr->tr_ail1_list));
		gfs2_assert_warn(sdp, list_empty(&tr->tr_ail2_list));
		kfree(tr);
D
David Teigland 已提交
298 299
	}

D
Dave Chinner 已提交
300
	spin_unlock(&sdp->sd_ail_lock);
D
David Teigland 已提交
301 302
}

303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
/**
 * gfs2_log_release - Release a given number of log blocks
 * @sdp: The GFS2 superblock
 * @blks: The number of blocks
 *
 */

void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks)
{

	atomic_add(blks, &sdp->sd_log_blks_free);
	trace_gfs2_log_blocks(sdp, blks);
	gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <=
				  sdp->sd_jdesc->jd_blocks);
	up_read(&sdp->sd_log_flush_lock);
}

D
David Teigland 已提交
320 321 322 323 324
/**
 * gfs2_log_reserve - Make a log reservation
 * @sdp: The GFS2 superblock
 * @blks: The number of blocks to reserve
 *
325
 * Note that we never give out the last few blocks of the journal. Thats
326
 * due to the fact that there is a small number of header blocks
327 328 329 330
 * associated with each log flush. The exact number can't be known until
 * flush time, so we ensure that we have just enough free blocks at all
 * times to avoid running out during a log flush.
 *
331 332 333 334 335 336
 * We no longer flush the log here, instead we wake up logd to do that
 * for us. To avoid the thundering herd and to ensure that we deal fairly
 * with queued waiters, we use an exclusive wait. This means that when we
 * get woken with enough journal space to get our reservation, we need to
 * wake the next waiter on the list.
 *
D
David Teigland 已提交
337 338 339 340 341
 * Returns: errno
 */

int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks)
{
342
	int ret = 0;
343
	unsigned reserved_blks = 7 * (4096 / sdp->sd_vfs->s_blocksize);
344 345 346 347
	unsigned wanted = blks + reserved_blks;
	DEFINE_WAIT(wait);
	int did_wait = 0;
	unsigned int free_blocks;
D
David Teigland 已提交
348 349 350 351

	if (gfs2_assert_warn(sdp, blks) ||
	    gfs2_assert_warn(sdp, blks <= sdp->sd_jdesc->jd_blocks))
		return -EINVAL;
352
	atomic_add(blks, &sdp->sd_log_blks_needed);
353 354 355 356 357 358 359 360 361 362 363 364 365
retry:
	free_blocks = atomic_read(&sdp->sd_log_blks_free);
	if (unlikely(free_blocks <= wanted)) {
		do {
			prepare_to_wait_exclusive(&sdp->sd_log_waitq, &wait,
					TASK_UNINTERRUPTIBLE);
			wake_up(&sdp->sd_logd_waitq);
			did_wait = 1;
			if (atomic_read(&sdp->sd_log_blks_free) <= wanted)
				io_schedule();
			free_blocks = atomic_read(&sdp->sd_log_blks_free);
		} while(free_blocks <= wanted);
		finish_wait(&sdp->sd_log_waitq, &wait);
D
David Teigland 已提交
366
	}
367
	atomic_inc(&sdp->sd_reserving_log);
368
	if (atomic_cmpxchg(&sdp->sd_log_blks_free, free_blocks,
369 370 371
				free_blocks - blks) != free_blocks) {
		if (atomic_dec_and_test(&sdp->sd_reserving_log))
			wake_up(&sdp->sd_reserving_log_wait);
372
		goto retry;
373
	}
374
	atomic_sub(blks, &sdp->sd_log_blks_needed);
S
Steven Whitehouse 已提交
375
	trace_gfs2_log_blocks(sdp, -blks);
376 377 378 379 380 381 382

	/*
	 * If we waited, then so might others, wake them up _after_ we get
	 * our share of the log.
	 */
	if (unlikely(did_wait))
		wake_up(&sdp->sd_log_waitq);
383 384

	down_read(&sdp->sd_log_flush_lock);
385 386
	if (unlikely(!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))) {
		gfs2_log_release(sdp, blks);
387
		ret = -EROFS;
388
	}
389 390 391
	if (atomic_dec_and_test(&sdp->sd_reserving_log))
		wake_up(&sdp->sd_reserving_log_wait);
	return ret;
D
David Teigland 已提交
392 393 394 395 396 397 398 399 400 401 402 403 404 405
}

/**
 * log_distance - Compute distance between two journal blocks
 * @sdp: The GFS2 superblock
 * @newer: The most recent journal block of the pair
 * @older: The older journal block of the pair
 *
 *   Compute the distance (in the journal direction) between two
 *   blocks in the journal
 *
 * Returns: the distance in blocks
 */

S
Steven Whitehouse 已提交
406
static inline unsigned int log_distance(struct gfs2_sbd *sdp, unsigned int newer,
D
David Teigland 已提交
407 408 409 410 411 412 413 414 415 416 417
					unsigned int older)
{
	int dist;

	dist = newer - older;
	if (dist < 0)
		dist += sdp->sd_jdesc->jd_blocks;

	return dist;
}

418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
/**
 * calc_reserved - Calculate the number of blocks to reserve when
 *                 refunding a transaction's unused buffers.
 * @sdp: The GFS2 superblock
 *
 * This is complex.  We need to reserve room for all our currently used
 * metadata buffers (e.g. normal file I/O rewriting file time stamps) and 
 * all our journaled data buffers for journaled files (e.g. files in the 
 * meta_fs like rindex, or files for which chattr +j was done.)
 * If we don't reserve enough space, gfs2_log_refund and gfs2_log_flush
 * will count it as free space (sd_log_blks_free) and corruption will follow.
 *
 * We can have metadata bufs and jdata bufs in the same journal.  So each
 * type gets its own log header, for which we need to reserve a block.
 * In fact, each type has the potential for needing more than one header 
 * in cases where we have more buffers than will fit on a journal page.
 * Metadata journal entries take up half the space of journaled buffer entries.
 * Thus, metadata entries have buf_limit (502) and journaled buffers have
 * databuf_limit (251) before they cause a wrap around.
 *
 * Also, we need to reserve blocks for revoke journal entries and one for an
 * overall header for the lot.
 *
 * Returns: the number of blocks reserved
 */
static unsigned int calc_reserved(struct gfs2_sbd *sdp)
{
	unsigned int reserved = 0;
446 447 448
	unsigned int mbuf;
	unsigned int dbuf;
	struct gfs2_trans *tr = sdp->sd_log_tr;
449

450 451 452 453 454 455 456 457
	if (tr) {
		mbuf = tr->tr_num_buf_new - tr->tr_num_buf_rm;
		dbuf = tr->tr_num_databuf_new - tr->tr_num_databuf_rm;
		reserved = mbuf + dbuf;
		/* Account for header blocks */
		reserved += DIV_ROUND_UP(mbuf, buf_limit(sdp));
		reserved += DIV_ROUND_UP(dbuf, databuf_limit(sdp));
	}
458

459
	if (sdp->sd_log_commited_revoke > 0)
460
		reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke,
461 462 463 464 465 466 467
					  sizeof(u64));
	/* One for the overall header */
	if (reserved)
		reserved++;
	return reserved;
}

D
David Teigland 已提交
468 469
static unsigned int current_tail(struct gfs2_sbd *sdp)
{
470
	struct gfs2_trans *tr;
D
David Teigland 已提交
471 472
	unsigned int tail;

D
Dave Chinner 已提交
473
	spin_lock(&sdp->sd_ail_lock);
D
David Teigland 已提交
474

S
Steven Whitehouse 已提交
475
	if (list_empty(&sdp->sd_ail1_list)) {
D
David Teigland 已提交
476
		tail = sdp->sd_log_head;
S
Steven Whitehouse 已提交
477
	} else {
478 479 480
		tr = list_entry(sdp->sd_ail1_list.prev, struct gfs2_trans,
				tr_list);
		tail = tr->tr_first;
D
David Teigland 已提交
481 482
	}

D
Dave Chinner 已提交
483
	spin_unlock(&sdp->sd_ail_lock);
D
David Teigland 已提交
484 485 486 487

	return tail;
}

488
static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail)
D
David Teigland 已提交
489 490 491 492 493
{
	unsigned int dist = log_distance(sdp, new_tail, sdp->sd_log_tail);

	ail2_empty(sdp, new_tail);

494
	atomic_add(dist, &sdp->sd_log_blks_free);
S
Steven Whitehouse 已提交
495
	trace_gfs2_log_blocks(sdp, dist);
496 497
	gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <=
			     sdp->sd_jdesc->jd_blocks);
D
David Teigland 已提交
498 499 500 501 502

	sdp->sd_log_tail = new_tail;
}


503
static void log_flush_wait(struct gfs2_sbd *sdp)
D
David Teigland 已提交
504
{
505 506 507 508 509 510 511 512 513 514
	DEFINE_WAIT(wait);

	if (atomic_read(&sdp->sd_log_in_flight)) {
		do {
			prepare_to_wait(&sdp->sd_log_flush_wait, &wait,
					TASK_UNINTERRUPTIBLE);
			if (atomic_read(&sdp->sd_log_in_flight))
				io_schedule();
		} while(atomic_read(&sdp->sd_log_in_flight));
		finish_wait(&sdp->sd_log_flush_wait, &wait);
D
David Teigland 已提交
515 516 517
	}
}

518
static int ip_cmp(void *priv, struct list_head *a, struct list_head *b)
B
Bob Peterson 已提交
519
{
520
	struct gfs2_inode *ipa, *ipb;
B
Bob Peterson 已提交
521

522 523
	ipa = list_entry(a, struct gfs2_inode, i_ordered);
	ipb = list_entry(b, struct gfs2_inode, i_ordered);
B
Bob Peterson 已提交
524

525
	if (ipa->i_no_addr < ipb->i_no_addr)
B
Bob Peterson 已提交
526
		return -1;
527
	if (ipa->i_no_addr > ipb->i_no_addr)
B
Bob Peterson 已提交
528 529 530 531
		return 1;
	return 0;
}

532 533
static void gfs2_ordered_write(struct gfs2_sbd *sdp)
{
534
	struct gfs2_inode *ip;
535 536
	LIST_HEAD(written);

537 538
	spin_lock(&sdp->sd_ordered_lock);
	list_sort(NULL, &sdp->sd_log_le_ordered, &ip_cmp);
539
	while (!list_empty(&sdp->sd_log_le_ordered)) {
540
		ip = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_inode, i_ordered);
541 542 543
		if (ip->i_inode.i_mapping->nrpages == 0) {
			test_and_clear_bit(GIF_ORDERED, &ip->i_flags);
			list_del(&ip->i_ordered);
544
			continue;
545 546
		}
		list_move(&ip->i_ordered, &written);
547 548 549
		spin_unlock(&sdp->sd_ordered_lock);
		filemap_fdatawrite(ip->i_inode.i_mapping);
		spin_lock(&sdp->sd_ordered_lock);
550 551
	}
	list_splice(&written, &sdp->sd_log_le_ordered);
552
	spin_unlock(&sdp->sd_ordered_lock);
553 554 555 556
}

static void gfs2_ordered_wait(struct gfs2_sbd *sdp)
{
557
	struct gfs2_inode *ip;
558

559
	spin_lock(&sdp->sd_ordered_lock);
560
	while (!list_empty(&sdp->sd_log_le_ordered)) {
561 562 563 564
		ip = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_inode, i_ordered);
		list_del(&ip->i_ordered);
		WARN_ON(!test_and_clear_bit(GIF_ORDERED, &ip->i_flags));
		if (ip->i_inode.i_mapping->nrpages == 0)
565
			continue;
566 567 568
		spin_unlock(&sdp->sd_ordered_lock);
		filemap_fdatawait(ip->i_inode.i_mapping);
		spin_lock(&sdp->sd_ordered_lock);
569
	}
570 571 572 573 574 575 576 577 578 579 580
	spin_unlock(&sdp->sd_ordered_lock);
}

void gfs2_ordered_del_inode(struct gfs2_inode *ip)
{
	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);

	spin_lock(&sdp->sd_ordered_lock);
	if (test_and_clear_bit(GIF_ORDERED, &ip->i_flags))
		list_del(&ip->i_ordered);
	spin_unlock(&sdp->sd_ordered_lock);
581 582
}

583 584 585 586 587 588 589
void gfs2_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
{
	struct buffer_head *bh = bd->bd_bh;
	struct gfs2_glock *gl = bd->bd_gl;

	bh->b_private = NULL;
	bd->bd_blkno = bh->b_blocknr;
590 591
	gfs2_remove_from_ail(bd); /* drops ref on bh */
	bd->bd_bh = NULL;
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652
	bd->bd_ops = &gfs2_revoke_lops;
	sdp->sd_log_num_revoke++;
	atomic_inc(&gl->gl_revokes);
	set_bit(GLF_LFLUSH, &gl->gl_flags);
	list_add(&bd->bd_list, &sdp->sd_log_le_revoke);
}

void gfs2_write_revokes(struct gfs2_sbd *sdp)
{
	struct gfs2_trans *tr;
	struct gfs2_bufdata *bd, *tmp;
	int have_revokes = 0;
	int max_revokes = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / sizeof(u64);

	gfs2_ail1_empty(sdp);
	spin_lock(&sdp->sd_ail_lock);
	list_for_each_entry(tr, &sdp->sd_ail1_list, tr_list) {
		list_for_each_entry(bd, &tr->tr_ail2_list, bd_ail_st_list) {
			if (list_empty(&bd->bd_list)) {
				have_revokes = 1;
				goto done;
			}
		}
	}
done:
	spin_unlock(&sdp->sd_ail_lock);
	if (have_revokes == 0)
		return;
	while (sdp->sd_log_num_revoke > max_revokes)
		max_revokes += (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header)) / sizeof(u64);
	max_revokes -= sdp->sd_log_num_revoke;
	if (!sdp->sd_log_num_revoke) {
		atomic_dec(&sdp->sd_log_blks_free);
		/* If no blocks have been reserved, we need to also
		 * reserve a block for the header */
		if (!sdp->sd_log_blks_reserved)
			atomic_dec(&sdp->sd_log_blks_free);
	}
	gfs2_log_lock(sdp);
	spin_lock(&sdp->sd_ail_lock);
	list_for_each_entry(tr, &sdp->sd_ail1_list, tr_list) {
		list_for_each_entry_safe(bd, tmp, &tr->tr_ail2_list, bd_ail_st_list) {
			if (max_revokes == 0)
				goto out_of_blocks;
			if (!list_empty(&bd->bd_list))
				continue;
			gfs2_add_revoke(sdp, bd);
			max_revokes--;
		}
	}
out_of_blocks:
	spin_unlock(&sdp->sd_ail_lock);
	gfs2_log_unlock(sdp);

	if (!sdp->sd_log_num_revoke) {
		atomic_inc(&sdp->sd_log_blks_free);
		if (!sdp->sd_log_blks_reserved)
			atomic_inc(&sdp->sd_log_blks_free);
	}
}

653
/**
654
 * write_log_header - Write a journal log header buffer at sd_log_flush_head
655
 * @sdp: The GFS2 superblock
656 657 658 659
 * @seq: sequence number
 * @tail: tail of the log
 * @flags: log header flags
 * @op_flags: flags to pass to the bio
660 661 662 663
 *
 * Returns: the initialized log buffer descriptor
 */

664 665
void gfs2_write_log_header(struct gfs2_sbd *sdp, u64 seq, u32 tail,
			   u32 flags, int op_flags)
666 667 668
{
	struct gfs2_log_header *lh;
	u32 hash;
669
	struct page *page = mempool_alloc(gfs2_page_pool, GFP_NOIO);
670

671 672
	lh = page_address(page);
	clear_page(lh);
673 674 675 676 677 678

	lh->lh_header.mh_magic = cpu_to_be32(GFS2_MAGIC);
	lh->lh_header.mh_type = cpu_to_be32(GFS2_METATYPE_LH);
	lh->lh_header.__pad0 = cpu_to_be64(0);
	lh->lh_header.mh_format = cpu_to_be32(GFS2_FORMAT_LH);
	lh->lh_header.mh_jid = cpu_to_be32(sdp->sd_jdesc->jd_jid);
679
	lh->lh_sequence = cpu_to_be64(seq);
680 681 682
	lh->lh_flags = cpu_to_be32(flags);
	lh->lh_tail = cpu_to_be32(tail);
	lh->lh_blkno = cpu_to_be32(sdp->sd_log_flush_head);
683
	hash = ~crc32(~0, lh, sizeof(*lh));
684 685
	lh->lh_hash = cpu_to_be32(hash);

686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706
	gfs2_log_write_page(sdp, page);
	gfs2_log_flush_bio(sdp, REQ_OP_WRITE, op_flags);
	log_flush_wait(sdp);
}

/**
 * log_write_header - Get and initialize a journal header buffer
 * @sdp: The GFS2 superblock
 *
 * Returns: the initialized log buffer descriptor
 */

static void log_write_header(struct gfs2_sbd *sdp, u32 flags)
{
	unsigned int tail;
	int op_flags = REQ_PREFLUSH | REQ_FUA | REQ_META | REQ_SYNC;
	enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state);

	gfs2_assert_withdraw(sdp, (state != SFS_FROZEN));
	tail = current_tail(sdp);

707 708 709
	if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) {
		gfs2_ordered_wait(sdp);
		log_flush_wait(sdp);
710
		op_flags = REQ_SYNC | REQ_META | REQ_PRIO;
711
	}
712
	sdp->sd_log_idle = (tail == sdp->sd_log_flush_head);
713 714
	gfs2_write_log_header(sdp, sdp->sd_log_sequence++, tail, flags,
			      op_flags);
715 716 717 718 719

	if (sdp->sd_log_tail != tail)
		log_pull_tail(sdp, tail);
}

D
David Teigland 已提交
720
/**
721
 * gfs2_log_flush - flush incore transaction(s)
D
David Teigland 已提交
722 723 724 725 726
 * @sdp: the filesystem
 * @gl: The glock structure to flush.  If NULL, flush the whole incore log
 *
 */

727 728
void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl,
		    enum gfs2_flush_type type)
D
David Teigland 已提交
729
{
730
	struct gfs2_trans *tr;
731
	enum gfs2_freeze_state state = atomic_read(&sdp->sd_freeze_state);
D
David Teigland 已提交
732

733
	down_write(&sdp->sd_log_flush_lock);
734

735 736 737 738
	/* Log might have been flushed while we waited for the flush lock */
	if (gl && !test_bit(GLF_LFLUSH, &gl->gl_flags)) {
		up_write(&sdp->sd_log_flush_lock);
		return;
739
	}
S
Steven Whitehouse 已提交
740
	trace_gfs2_log_flush(sdp, 1);
741

742 743 744
	if (type == SHUTDOWN_FLUSH)
		clear_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);

745
	sdp->sd_log_flush_head = sdp->sd_log_head;
746 747 748 749 750
	tr = sdp->sd_log_tr;
	if (tr) {
		sdp->sd_log_tr = NULL;
		INIT_LIST_HEAD(&tr->tr_ail1_list);
		INIT_LIST_HEAD(&tr->tr_ail2_list);
751
		tr->tr_first = sdp->sd_log_flush_head;
752 753
		if (unlikely (state == SFS_FROZEN))
			gfs2_assert_withdraw(sdp, !tr->tr_num_buf_new && !tr->tr_num_databuf_new);
754
	}
D
David Teigland 已提交
755

756 757
	if (unlikely(state == SFS_FROZEN))
		gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke);
D
David Teigland 已提交
758 759 760
	gfs2_assert_withdraw(sdp,
			sdp->sd_log_num_revoke == sdp->sd_log_commited_revoke);

761
	gfs2_ordered_write(sdp);
762
	lops_before_commit(sdp, tr);
M
Mike Christie 已提交
763
	gfs2_log_flush_bio(sdp, REQ_OP_WRITE, 0);
764

765
	if (sdp->sd_log_head != sdp->sd_log_flush_head) {
766
		log_flush_wait(sdp);
767
		log_write_header(sdp, 0);
768
	} else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){
769
		atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */
S
Steven Whitehouse 已提交
770
		trace_gfs2_log_blocks(sdp, -1);
771
		log_write_header(sdp, 0);
772
	}
773
	lops_after_commit(sdp, tr);
774

775 776
	gfs2_log_lock(sdp);
	sdp->sd_log_head = sdp->sd_log_flush_head;
S
Steven Whitehouse 已提交
777 778
	sdp->sd_log_blks_reserved = 0;
	sdp->sd_log_commited_revoke = 0;
D
David Teigland 已提交
779

D
Dave Chinner 已提交
780
	spin_lock(&sdp->sd_ail_lock);
781 782 783
	if (tr && !list_empty(&tr->tr_ail1_list)) {
		list_add(&tr->tr_list, &sdp->sd_ail1_list);
		tr = NULL;
D
David Teigland 已提交
784
	}
D
Dave Chinner 已提交
785
	spin_unlock(&sdp->sd_ail_lock);
D
David Teigland 已提交
786
	gfs2_log_unlock(sdp);
787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802

	if (type != NORMAL_FLUSH) {
		if (!sdp->sd_log_idle) {
			for (;;) {
				gfs2_ail1_start(sdp);
				gfs2_ail1_wait(sdp);
				if (gfs2_ail1_empty(sdp))
					break;
			}
			atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */
			trace_gfs2_log_blocks(sdp, -1);
			log_write_header(sdp, 0);
			sdp->sd_log_head = sdp->sd_log_flush_head;
		}
		if (type == SHUTDOWN_FLUSH || type == FREEZE_FLUSH)
			gfs2_log_shutdown(sdp);
803 804
		if (type == FREEZE_FLUSH)
			atomic_set(&sdp->sd_freeze_state, SFS_FROZEN);
805 806
	}

S
Steven Whitehouse 已提交
807
	trace_gfs2_log_flush(sdp, 0);
808
	up_write(&sdp->sd_log_flush_lock);
D
David Teigland 已提交
809

810
	kfree(tr);
D
David Teigland 已提交
811 812
}

813 814 815 816 817 818 819 820
/**
 * gfs2_merge_trans - Merge a new transaction into a cached transaction
 * @old: Original transaction to be expanded
 * @new: New transaction to be merged
 */

static void gfs2_merge_trans(struct gfs2_trans *old, struct gfs2_trans *new)
{
821
	WARN_ON_ONCE(!test_bit(TR_ATTACHED, &old->tr_flags));
822 823 824 825 826 827 828 829 830 831 832 833

	old->tr_num_buf_new	+= new->tr_num_buf_new;
	old->tr_num_databuf_new	+= new->tr_num_databuf_new;
	old->tr_num_buf_rm	+= new->tr_num_buf_rm;
	old->tr_num_databuf_rm	+= new->tr_num_databuf_rm;
	old->tr_num_revoke	+= new->tr_num_revoke;
	old->tr_num_revoke_rm	+= new->tr_num_revoke_rm;

	list_splice_tail_init(&new->tr_databuf, &old->tr_databuf);
	list_splice_tail_init(&new->tr_buf, &old->tr_buf);
}

D
David Teigland 已提交
834 835
static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
{
836
	unsigned int reserved;
837
	unsigned int unused;
838
	unsigned int maxres;
D
David Teigland 已提交
839 840 841

	gfs2_log_lock(sdp);

842 843 844
	if (sdp->sd_log_tr) {
		gfs2_merge_trans(sdp->sd_log_tr, tr);
	} else if (tr->tr_num_buf_new || tr->tr_num_databuf_new) {
845
		gfs2_assert_withdraw(sdp, test_bit(TR_ALLOCED, &tr->tr_flags));
846
		sdp->sd_log_tr = tr;
847
		set_bit(TR_ATTACHED, &tr->tr_flags);
848 849
	}

D
David Teigland 已提交
850
	sdp->sd_log_commited_revoke += tr->tr_num_revoke - tr->tr_num_revoke_rm;
851
	reserved = calc_reserved(sdp);
852 853 854
	maxres = sdp->sd_log_blks_reserved + tr->tr_reserved;
	gfs2_assert_withdraw(sdp, maxres >= reserved);
	unused = maxres - reserved;
855
	atomic_add(unused, &sdp->sd_log_blks_free);
S
Steven Whitehouse 已提交
856
	trace_gfs2_log_blocks(sdp, unused);
857
	gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <=
858
			     sdp->sd_jdesc->jd_blocks);
D
David Teigland 已提交
859 860 861 862 863 864 865 866 867 868
	sdp->sd_log_blks_reserved = reserved;

	gfs2_log_unlock(sdp);
}

/**
 * gfs2_log_commit - Commit a transaction to the log
 * @sdp: the filesystem
 * @tr: the transaction
 *
869 870 871 872 873 874 875
 * We wake up gfs2_logd if the number of pinned blocks exceed thresh1
 * or the total number of used blocks (pinned blocks plus AIL blocks)
 * is greater than thresh2.
 *
 * At mount time thresh1 is 1/3rd of journal size, thresh2 is 2/3rd of
 * journal size.
 *
D
David Teigland 已提交
876 877 878 879 880 881 882
 * Returns: errno
 */

void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
{
	log_refund(sdp, tr);

883 884 885 886
	if (atomic_read(&sdp->sd_log_pinned) > atomic_read(&sdp->sd_log_thresh1) ||
	    ((sdp->sd_jdesc->jd_blocks - atomic_read(&sdp->sd_log_blks_free)) >
	    atomic_read(&sdp->sd_log_thresh2)))
		wake_up(&sdp->sd_logd_waitq);
D
David Teigland 已提交
887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
}

/**
 * gfs2_log_shutdown - write a shutdown header into a journal
 * @sdp: the filesystem
 *
 */

void gfs2_log_shutdown(struct gfs2_sbd *sdp)
{
	gfs2_assert_withdraw(sdp, !sdp->sd_log_blks_reserved);
	gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke);
	gfs2_assert_withdraw(sdp, list_empty(&sdp->sd_ail1_list));

	sdp->sd_log_flush_head = sdp->sd_log_head;

903
	log_write_header(sdp, GFS2_LOG_HEAD_UNMOUNT);
D
David Teigland 已提交
904

905 906
	gfs2_assert_warn(sdp, sdp->sd_log_head == sdp->sd_log_tail);
	gfs2_assert_warn(sdp, list_empty(&sdp->sd_ail2_list));
D
David Teigland 已提交
907 908 909

	sdp->sd_log_head = sdp->sd_log_flush_head;
	sdp->sd_log_tail = sdp->sd_log_head;
910 911
}

912 913
static inline int gfs2_jrnl_flush_reqd(struct gfs2_sbd *sdp)
{
914 915 916
	return (atomic_read(&sdp->sd_log_pinned) +
		atomic_read(&sdp->sd_log_blks_needed) >=
		atomic_read(&sdp->sd_log_thresh1));
917 918 919 920 921
}

static inline int gfs2_ail_flush_reqd(struct gfs2_sbd *sdp)
{
	unsigned int used_blocks = sdp->sd_jdesc->jd_blocks - atomic_read(&sdp->sd_log_blks_free);
922 923 924 925

	if (test_and_clear_bit(SDF_FORCE_AIL_FLUSH, &sdp->sd_flags))
		return 1;

926 927
	return used_blocks + atomic_read(&sdp->sd_log_blks_needed) >=
		atomic_read(&sdp->sd_log_thresh2);
928
}
929 930 931 932 933 934 935 936 937 938 939 940

/**
 * gfs2_logd - Update log tail as Active Items get flushed to in-place blocks
 * @sdp: Pointer to GFS2 superblock
 *
 * Also, periodically check to make sure that we're using the most recent
 * journal index.
 */

int gfs2_logd(void *data)
{
	struct gfs2_sbd *sdp = data;
941 942
	unsigned long t = 1;
	DEFINE_WAIT(wait);
943
	bool did_flush;
944 945 946

	while (!kthread_should_stop()) {

947 948 949 950 951 952 953 954 955
		/* Check for errors writing to the journal */
		if (sdp->sd_log_error) {
			gfs2_lm_withdraw(sdp,
					 "GFS2: fsid=%s: error %d: "
					 "withdrawing the file system to "
					 "prevent further damage.\n",
					 sdp->sd_fsname, sdp->sd_log_error);
		}

956
		did_flush = false;
957
		if (gfs2_jrnl_flush_reqd(sdp) || t == 0) {
958
			gfs2_ail1_empty(sdp);
959
			gfs2_log_flush(sdp, NULL, NORMAL_FLUSH);
960
			did_flush = true;
961
		}
962

963 964
		if (gfs2_ail_flush_reqd(sdp)) {
			gfs2_ail1_start(sdp);
965
			gfs2_ail1_wait(sdp);
966
			gfs2_ail1_empty(sdp);
967
			gfs2_log_flush(sdp, NULL, NORMAL_FLUSH);
968
			did_flush = true;
969 970
		}

971
		if (!gfs2_ail_flush_reqd(sdp) || did_flush)
972 973
			wake_up(&sdp->sd_log_waitq);

974
		t = gfs2_tune_get(sdp, gt_logd_secs) * HZ;
975 976

		try_to_freeze();
977 978 979

		do {
			prepare_to_wait(&sdp->sd_logd_waitq, &wait,
980
					TASK_INTERRUPTIBLE);
981 982 983 984 985 986 987 988
			if (!gfs2_ail_flush_reqd(sdp) &&
			    !gfs2_jrnl_flush_reqd(sdp) &&
			    !kthread_should_stop())
				t = schedule_timeout(t);
		} while(t && !gfs2_ail_flush_reqd(sdp) &&
			!gfs2_jrnl_flush_reqd(sdp) &&
			!kthread_should_stop());
		finish_wait(&sdp->sd_logd_waitq, &wait);
989 990 991 992 993
	}

	return 0;
}