This patch is needed to allow sharing the kernel with 1.8, and until the MGS and llog code has been moved over to using the OSD interface. Index: linux-2.6.22.5/fs/dcache.c =================================================================== --- linux-2.6.22.5.orig/fs/dcache.c 2008-02-21 00:56:29.000000000 -0700 +++ linux-2.6.22.5/fs/dcache.c 2008-02-21 00:57:02.000000000 -0700 @@ -1441,13 +1441,22 @@ * Adds a dentry to the hash according to its name. */ -void d_rehash(struct dentry * entry) +void d_rehash_cond(struct dentry * entry, int lock) { - spin_lock(&dcache_lock); + if (lock) + spin_lock(&dcache_lock); spin_lock(&entry->d_lock); _d_rehash(entry); spin_unlock(&entry->d_lock); - spin_unlock(&dcache_lock); + if (lock) + spin_unlock(&dcache_lock); +} + +EXPORT_SYMBOL(d_rehash_cond); + +void d_rehash(struct dentry * entry) +{ + d_rehash_cond(entry, 1); } #define do_switch(x,y) do { \ @@ -1537,7 +1546,7 @@ * Update the dcache to reflect the move of a file name. Negative * dcache entries should not be moved in this way. */ -static void d_move_locked(struct dentry * dentry, struct dentry * target) +void d_move_locked(struct dentry * dentry, struct dentry * target) { struct hlist_head *list; @@ -1595,6 +1604,7 @@ spin_unlock(&dentry->d_lock); write_sequnlock(&rename_lock); } +EXPORT_SYMBOL(d_move_locked); /** * d_move - move a dentry Index: linux-2.6.22.5/include/linux/dcache.h =================================================================== --- linux-2.6.22.5.orig/include/linux/dcache.h 2008-02-21 00:56:29.000000000 -0700 +++ linux-2.6.22.5/include/linux/dcache.h 2008-02-21 00:57:02.000000000 -0700 @@ -251,6 +251,7 @@ extern int have_submounts(struct dentry * This adds the entry to the hash queues. */ extern void d_rehash(struct dentry *); +extern void d_rehash_cond(struct dentry *, int lock); /** * d_add - add dentry to hash queues @@ -286,6 +287,7 @@ static inline struct dentry *d_add_uniqu /* used for rename() and baskets */ extern void d_move(struct dentry *, struct dentry *); +extern void d_move_locked(struct dentry *, struct dentry *); /* appendix may either be NULL or be used for transname suffixes */ extern struct dentry * d_lookup(struct dentry *, struct qstr *);