mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
3af165ac4d
There was a use-after-free with the GFS2 super block during umount. This patch moves almost all of the umount code from ->put_super into ->kill_sb, the only bit that cannot be moved being the glock hash clearing which has to remain as ->put_super due to umount ordering requirements. As a result its now obvious that the kfree is the final operation, whereas before it was hidden in ->put_super. Also gfs2_jindex_free is then only referenced from a single file so thats moved and marked static too. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
52 lines
1.5 KiB
C
52 lines
1.5 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 __SUPER_DOT_H__
|
|
#define __SUPER_DOT_H__
|
|
|
|
#include <linux/fs.h>
|
|
#include <linux/dcache.h>
|
|
#include "incore.h"
|
|
|
|
void gfs2_lm_unmount(struct gfs2_sbd *sdp);
|
|
|
|
static inline unsigned int gfs2_jindex_size(struct gfs2_sbd *sdp)
|
|
{
|
|
unsigned int x;
|
|
spin_lock(&sdp->sd_jindex_spin);
|
|
x = sdp->sd_journals;
|
|
spin_unlock(&sdp->sd_jindex_spin);
|
|
return x;
|
|
}
|
|
|
|
struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid);
|
|
int gfs2_jdesc_check(struct gfs2_jdesc *jd);
|
|
|
|
int gfs2_lookup_in_master_dir(struct gfs2_sbd *sdp, char *filename,
|
|
struct gfs2_inode **ipp);
|
|
|
|
int gfs2_make_fs_rw(struct gfs2_sbd *sdp);
|
|
int gfs2_make_fs_ro(struct gfs2_sbd *sdp);
|
|
|
|
int gfs2_statfs_init(struct gfs2_sbd *sdp);
|
|
void gfs2_statfs_change(struct gfs2_sbd *sdp,
|
|
s64 total, s64 free, s64 dinodes);
|
|
int gfs2_statfs_sync(struct gfs2_sbd *sdp);
|
|
|
|
int gfs2_freeze_fs(struct gfs2_sbd *sdp);
|
|
void gfs2_unfreeze_fs(struct gfs2_sbd *sdp);
|
|
|
|
extern struct file_system_type gfs2_fs_type;
|
|
extern struct file_system_type gfs2meta_fs_type;
|
|
extern const struct export_operations gfs2_export_ops;
|
|
extern const struct super_operations gfs2_super_ops;
|
|
extern struct dentry_operations gfs2_dops;
|
|
|
|
#endif /* __SUPER_DOT_H__ */
|
|
|