I think my previous change may have opened a race conditio.
This patch does the same thing, with no change in semantics.
This commit is contained in:
parent
4475598f18
commit
40715905a7
@ -538,8 +538,6 @@ ext2_vfree(ap)
|
||||
int mode;
|
||||
|
||||
pip = VTOI(ap->a_pvp);
|
||||
/* Remove the inode from its hash chain */
|
||||
ufs_ihashrem(pip);
|
||||
fs = pip->i_e2fs;
|
||||
if ((u_int)ino >= fs->s_inodes_per_group * fs->s_groups_count)
|
||||
panic("ifree: range: dev = 0x%x, ino = %d, fs = %s",
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ufs_ihash.c 8.7 (Berkeley) 5/17/95
|
||||
* $Id: ufs_ihash.c,v 1.8 1997/02/22 09:47:47 peter Exp $
|
||||
* $Id: ufs_ihash.c,v 1.9 1997/10/12 20:26:21 phk Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -131,6 +131,7 @@ ufs_ihashins(ip)
|
||||
simple_lock(&ufs_ihash_slock);
|
||||
ipp = INOHASH(ip->i_dev, ip->i_number);
|
||||
LIST_INSERT_HEAD(ipp, ip, i_hash);
|
||||
ip->i_flags |= IN_HASHED;
|
||||
simple_unlock(&ufs_ihash_slock);
|
||||
}
|
||||
|
||||
@ -142,10 +143,12 @@ ufs_ihashrem(ip)
|
||||
struct inode *ip;
|
||||
{
|
||||
simple_lock(&ufs_ihash_slock);
|
||||
LIST_REMOVE(ip, i_hash);
|
||||
if (ip->i_flags & IN_HASHED) {
|
||||
LIST_REMOVE(ip, i_hash);
|
||||
#ifdef DIAGNOSTIC
|
||||
ip->i_hash.le_next = NULL;
|
||||
ip->i_hash.le_prev = NULL;
|
||||
ip->i_hash.le_next = NULL;
|
||||
ip->i_hash.le_prev = NULL;
|
||||
#endif
|
||||
}
|
||||
simple_unlock(&ufs_ihash_slock);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.15 1997/05/22 07:30:55 phk Exp $
|
||||
* $Id: inode.h,v 1.16 1997/07/13 15:40:31 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -121,6 +121,7 @@ struct inode {
|
||||
#define IN_RENAME 0x0010 /* Inode is being renamed. */
|
||||
#define IN_SHLOCK 0x0020 /* File has shared lock. */
|
||||
#define IN_EXLOCK 0x0040 /* File has exclusive lock. */
|
||||
#define IN_HASHED 0x0080 /* Inode is on hash list */
|
||||
|
||||
#ifdef KERNEL
|
||||
/*
|
||||
|
@ -538,8 +538,6 @@ ext2_vfree(ap)
|
||||
int mode;
|
||||
|
||||
pip = VTOI(ap->a_pvp);
|
||||
/* Remove the inode from its hash chain */
|
||||
ufs_ihashrem(pip);
|
||||
fs = pip->i_e2fs;
|
||||
if ((u_int)ino >= fs->s_inodes_per_group * fs->s_groups_count)
|
||||
panic("ifree: range: dev = 0x%x, ino = %d, fs = %s",
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.15 1997/05/22 07:30:55 phk Exp $
|
||||
* $Id: inode.h,v 1.16 1997/07/13 15:40:31 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -121,6 +121,7 @@ struct inode {
|
||||
#define IN_RENAME 0x0010 /* Inode is being renamed. */
|
||||
#define IN_SHLOCK 0x0020 /* File has shared lock. */
|
||||
#define IN_EXLOCK 0x0040 /* File has exclusive lock. */
|
||||
#define IN_HASHED 0x0080 /* Inode is on hash list */
|
||||
|
||||
#ifdef KERNEL
|
||||
/*
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ffs_alloc.c 8.18 (Berkeley) 5/26/95
|
||||
* $Id: ffs_alloc.c,v 1.37 1997/09/19 11:13:16 phk Exp $
|
||||
* $Id: ffs_alloc.c,v 1.38 1997/10/14 14:22:23 phk Exp $
|
||||
*/
|
||||
|
||||
#include "opt_quota.h"
|
||||
@ -48,7 +48,6 @@
|
||||
|
||||
#include <ufs/ufs/quota.h>
|
||||
#include <ufs/ufs/inode.h>
|
||||
#include <ufs/ufs/ufs_extern.h>
|
||||
|
||||
#include <ufs/ffs/fs.h>
|
||||
#include <ufs/ffs/ffs_extern.h>
|
||||
@ -1420,8 +1419,6 @@ ffs_vfree(ap)
|
||||
int error, cg;
|
||||
|
||||
pip = VTOI(ap->a_pvp);
|
||||
/* Remove the inode from its hash chain */
|
||||
ufs_ihashrem(pip);
|
||||
fs = pip->i_fs;
|
||||
if ((u_int)ino >= fs->fs_ipg * fs->fs_ncg)
|
||||
panic("ffs_vfree: range: dev = 0x%x, ino = %d, fs = %s",
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)lfs_alloc.c 8.7 (Berkeley) 5/14/95
|
||||
* $Id: lfs_alloc.c,v 1.15 1997/08/02 14:33:19 bde Exp $
|
||||
* $Id: lfs_alloc.c,v 1.16 1997/10/14 14:22:29 phk Exp $
|
||||
*/
|
||||
|
||||
#include "opt_quota.h"
|
||||
@ -223,8 +223,6 @@ lfs_vfree(ap)
|
||||
|
||||
/* Get the inode number and file system. */
|
||||
ip = VTOI(ap->a_pvp);
|
||||
/* Remove the inode from its hash chain */
|
||||
ufs_ihashrem(ip);
|
||||
fs = ip->i_lfs;
|
||||
ino = ip->i_number;
|
||||
if (ip->i_flag & IN_MODIFIED) {
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.15 1997/05/22 07:30:55 phk Exp $
|
||||
* $Id: inode.h,v 1.16 1997/07/13 15:40:31 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -121,6 +121,7 @@ struct inode {
|
||||
#define IN_RENAME 0x0010 /* Inode is being renamed. */
|
||||
#define IN_SHLOCK 0x0020 /* File has shared lock. */
|
||||
#define IN_EXLOCK 0x0040 /* File has exclusive lock. */
|
||||
#define IN_HASHED 0x0080 /* Inode is on hash list */
|
||||
|
||||
#ifdef KERNEL
|
||||
/*
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ufs_ihash.c 8.7 (Berkeley) 5/17/95
|
||||
* $Id: ufs_ihash.c,v 1.8 1997/02/22 09:47:47 peter Exp $
|
||||
* $Id: ufs_ihash.c,v 1.9 1997/10/12 20:26:21 phk Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -131,6 +131,7 @@ ufs_ihashins(ip)
|
||||
simple_lock(&ufs_ihash_slock);
|
||||
ipp = INOHASH(ip->i_dev, ip->i_number);
|
||||
LIST_INSERT_HEAD(ipp, ip, i_hash);
|
||||
ip->i_flags |= IN_HASHED;
|
||||
simple_unlock(&ufs_ihash_slock);
|
||||
}
|
||||
|
||||
@ -142,10 +143,12 @@ ufs_ihashrem(ip)
|
||||
struct inode *ip;
|
||||
{
|
||||
simple_lock(&ufs_ihash_slock);
|
||||
LIST_REMOVE(ip, i_hash);
|
||||
if (ip->i_flags & IN_HASHED) {
|
||||
LIST_REMOVE(ip, i_hash);
|
||||
#ifdef DIAGNOSTIC
|
||||
ip->i_hash.le_next = NULL;
|
||||
ip->i_hash.le_prev = NULL;
|
||||
ip->i_hash.le_next = NULL;
|
||||
ip->i_hash.le_prev = NULL;
|
||||
#endif
|
||||
}
|
||||
simple_unlock(&ufs_ihash_slock);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ufs_inode.c 8.9 (Berkeley) 5/14/95
|
||||
* $Id: ufs_inode.c,v 1.16 1997/10/10 18:18:12 phk Exp $
|
||||
* $Id: ufs_inode.c,v 1.17 1997/10/14 14:22:31 phk Exp $
|
||||
*/
|
||||
|
||||
#include "opt_quota.h"
|
||||
@ -123,6 +123,11 @@ ufs_reclaim(ap)
|
||||
|
||||
if (prtactive && vp->v_usecount != 0)
|
||||
vprint("ufs_reclaim: pushing active", vp);
|
||||
/*
|
||||
* Remove the inode from its hash chain.
|
||||
*/
|
||||
ip = VTOI(vp);
|
||||
ufs_ihashrem(ip);
|
||||
/*
|
||||
* Purge old data structures associated with the inode.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user