| Date | Mon, 29 May 2006 18:35:39 -0700 | From | Andrew Morton <> | Subject | Re: [patch 37/61] lock validator: special locking: dcache |
| |
On Mon, 29 May 2006 23:26:08 +0200 Ingo Molnar <mingo@elte.hu> wrote:
> From: Ingo Molnar <mingo@elte.hu> > > teach special (recursive) locking code to the lock validator. Has no > effect on non-lockdep kernels. > > Signed-off-by: Ingo Molnar <mingo@elte.hu> > Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> > --- > fs/dcache.c | 6 +++--- > include/linux/dcache.h | 12 ++++++++++++ > 2 files changed, 15 insertions(+), 3 deletions(-) > > Index: linux/fs/dcache.c > =================================================================== > --- linux.orig/fs/dcache.c > +++ linux/fs/dcache.c > @@ -1380,10 +1380,10 @@ void d_move(struct dentry * dentry, stru > */ > if (target < dentry) { > spin_lock(&target->d_lock); > - spin_lock(&dentry->d_lock); > + spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); > } else { > spin_lock(&dentry->d_lock); > - spin_lock(&target->d_lock); > + spin_lock_nested(&target->d_lock, DENTRY_D_LOCK_NESTED); > } > > /* Move the dentry to the target hash queue, if on different bucket */ > @@ -1420,7 +1420,7 @@ already_unhashed: > } > > list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs); > - spin_unlock(&target->d_lock); > + spin_unlock_non_nested(&target->d_lock); > fsnotify_d_move(dentry); > spin_unlock(&dentry->d_lock); > write_sequnlock(&rename_lock); > Index: linux/include/linux/dcache.h > =================================================================== > --- linux.orig/include/linux/dcache.h > +++ linux/include/linux/dcache.h > @@ -114,6 +114,18 @@ struct dentry { > unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */ > }; > > +/* > + * dentry->d_lock spinlock nesting types: > + * > + * 0: normal > + * 1: nested > + */ > +enum dentry_d_lock_type > +{ > + DENTRY_D_LOCK_NORMAL, > + DENTRY_D_LOCK_NESTED > +}; > + > struct dentry_operations { > int (*d_revalidate)(struct dentry *, struct nameidata *); > int (*d_hash) (struct dentry *, struct qstr *);
DENTRY_D_LOCK_NORMAL isn't used anywhere.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|