On Wed, Jul 20, 2011 at 02:55:24PM +0100, Al Viro wrote: > On Wed, Jul 20, 2011 at 05:32:32PM +1000, Stephen Rothwell wrote: > > Hi all, > > > > After merging the final tree, today's linux-next build (sparc defconfig) > > failed like this: > > > And many more similar. Again, I assume some include files changed. > > Maybe commit 347727d3f51d ("superblock: introduce per-sb cache shrinker > > infrastructure") which included linux/mm.h in linux/fs.h ... > > > > I have left this again. > > diff --git a/include/linux/fs.h b/include/linux/fs.h > index 1ce9086..e0569e4 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -395,7 +395,7 @@ struct inodes_stat_t { > #include <linux/semaphore.h> > #include <linux/fiemap.h> > #include <linux/rculist_bl.h> > -#include <linux/mm.h> > +#include <linux/shrinker.h> > #include <linux/atomic.h> > > #include <asm/byteorder.h> > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 9b9777a..e3a1a9e 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -15,6 +15,7 @@ > #include <linux/range.h> > #include <linux/pfn.h> > #include <linux/bit_spinlock.h> > +#include <linux/shrinker.h> > > struct mempolicy; > struct anon_vma; > @@ -1121,45 +1122,6 @@ static inline void sync_mm_rss(struct task_struct *task, struct mm_struct *mm) > } > #endif > > -/* > - * This struct is used to pass information from page reclaim to the shrinkers. > - * We consolidate the values for easier extention later. > - */ > -struct shrink_control { > - gfp_t gfp_mask; > - > - /* How many slab objects shrinker() should scan and try to reclaim */ > - unsigned long nr_to_scan; > -}; > - > -/* > - * A callback you can register to apply pressure to ageable caches. > - * > - * 'sc' is passed shrink_control which includes a count 'nr_to_scan' > - * and a 'gfpmask'. It should look through the least-recently-used > - * 'nr_to_scan' entries and attempt to free them up. It should return > - * the number of objects which remain in the cache. If it returns -1, it means > - * it cannot do any scanning at this time (eg. there is a risk of deadlock). > - * > - * The 'gfpmask' refers to the allocation we are currently trying to > - * fulfil. > - * > - * Note that 'shrink' will be passed nr_to_scan == 0 when the VM is > - * querying the cache size, so a fastpath for that case is appropriate. > - */ > -struct shrinker { > - int (*shrink)(struct shrinker *, struct shrink_control *sc); > - int seeks; /* seeks to recreate an obj */ > - long batch; /* reclaim batch size, 0 = default */ > - > - /* These are for internal use */ > - struct list_head list; > - long nr; /* objs pending delete */ > -}; > -#define DEFAULT_SEEKS 2 /* A good number if you don't know better. */ > -extern void register_shrinker(struct shrinker *); > -extern void unregister_shrinker(struct shrinker *); > - > int vma_wants_writenotify(struct vm_area_struct *vma); > > extern pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr, > diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h > new file mode 100644 > index 0000000..790651b > --- /dev/null > +++ b/include/linux/shrinker.h > @@ -0,0 +1,42 @@ > +#ifndef _LINUX_SHRINKER_H > +#define _LINUX_SHRINKER_H > + > +/* > + * This struct is used to pass information from page reclaim to the shrinkers. > + * We consolidate the values for easier extention later. > + */ > +struct shrink_control { > + gfp_t gfp_mask; > + > + /* How many slab objects shrinker() should scan and try to reclaim */ > + unsigned long nr_to_scan; > +}; > + > +/* > + * A callback you can register to apply pressure to ageable caches. > + * > + * 'sc' is passed shrink_control which includes a count 'nr_to_scan' > + * and a 'gfpmask'. It should look through the least-recently-used > + * 'nr_to_scan' entries and attempt to free them up. It should return > + * the number of objects which remain in the cache. If it returns -1, it means > + * it cannot do any scanning at this time (eg. there is a risk of deadlock). > + * > + * The 'gfpmask' refers to the allocation we are currently trying to > + * fulfil. > + * > + * Note that 'shrink' will be passed nr_to_scan == 0 when the VM is > + * querying the cache size, so a fastpath for that case is appropriate. > + */ > +struct shrinker { > + int (*shrink)(struct shrinker *, struct shrink_control *sc); > + int seeks; /* seeks to recreate an obj */ > + long batch; /* reclaim batch size, 0 = default */ > + > + /* These are for internal use */ > + struct list_head list; > + long nr; /* objs pending delete */ > +}; > +#define DEFAULT_SEEKS 2 /* A good number if you don't know better. */ > +extern void register_shrinker(struct shrinker *); > +extern void unregister_shrinker(struct shrinker *); > +#endif Yup, that was what I was considering doing to fix it. Thanks, Al. Acked-by: Dave Chinner <dchinner@xxxxxxxxxx> -- Dave Chinner david@xxxxxxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html