mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 17:59:32 +00:00
![Steven Whitehouse](/assets/img/avatar_default.png)
This patch fixes a race condition where we can receive recovery requests part way through processing a umount. This was causing problems since the recovery thread had already gone away. Looking in more detail at the recovery code, it was really trying to implement a slight variation on a work queue, and that happens to align nicely with the recently introduced slow-work subsystem. As a result I've updated the code to use slow-work, rather than its own home grown variety of work queue. When using the wait_on_bit() function, I noticed that the wait function that was supplied as an argument was appearing in the WCHAN field, so I've updated the function names in order to produce more meaningful output. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
34 lines
1.1 KiB
C
34 lines
1.1 KiB
C
/*
|
|
* Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
|
* Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
|
|
*
|
|
* This copyrighted material is made available to anyone wishing to use,
|
|
* modify, copy, or redistribute it subject to the terms and conditions
|
|
* of the GNU General Public License version 2.
|
|
*/
|
|
|
|
#ifndef __RECOVERY_DOT_H__
|
|
#define __RECOVERY_DOT_H__
|
|
|
|
#include "incore.h"
|
|
|
|
static inline void gfs2_replay_incr_blk(struct gfs2_sbd *sdp, unsigned int *blk)
|
|
{
|
|
if (++*blk == sdp->sd_jdesc->jd_blocks)
|
|
*blk = 0;
|
|
}
|
|
|
|
extern int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk,
|
|
struct buffer_head **bh);
|
|
|
|
extern int gfs2_revoke_add(struct gfs2_sbd *sdp, u64 blkno, unsigned int where);
|
|
extern int gfs2_revoke_check(struct gfs2_sbd *sdp, u64 blkno, unsigned int where);
|
|
extern void gfs2_revoke_clean(struct gfs2_sbd *sdp);
|
|
|
|
extern int gfs2_find_jhead(struct gfs2_jdesc *jd,
|
|
struct gfs2_log_header_host *head);
|
|
extern int gfs2_recover_journal(struct gfs2_jdesc *gfs2_jd);
|
|
extern struct slow_work_ops gfs2_recover_ops;
|
|
|
|
#endif /* __RECOVERY_DOT_H__ */
|
|
|