diff -urN oldtree/fs/squashfs/inode.c newtree/fs/squashfs/inode.c --- oldtree/fs/squashfs/inode.c 2006-08-20 06:03:34.824530750 -0400 +++ newtree/fs/squashfs/inode.c 2006-08-20 07:03:53.730698250 -0400 @@ -45,7 +45,7 @@ #include "squashfs.h" static void squashfs_put_super(struct super_block *); -static int squashfs_statfs(struct super_block *, struct kstatfs *); +static int squashfs_statfs(struct dentry *, struct kstatfs *); static int squashfs_symlink_readpage(struct file *file, struct page *page); static int squashfs_readpage(struct file *file, struct page *page); static int squashfs_readpage4K(struct file *file, struct page *page); @@ -60,8 +60,8 @@ static long long read_blocklist(struct inode *inode, int index, int readahead_blks, char *block_list, unsigned short **block_p, unsigned int *bsize); -static struct super_block *squashfs_get_sb(struct file_system_type *, int, - const char *, void *); +static int squashfs_get_sb(struct file_system_type *, int, + const char *, void *, struct vfsmount *); static z_stream stream; @@ -607,7 +607,6 @@ i->i_fop = &generic_ro_fops; i->i_mode |= S_IFREG; i->i_blocks = ((i->i_size - 1) >> 9) + 1; - i->i_blksize = PAGE_CACHE_SIZE; SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; SQUASHFS_I(i)->u.s1.fragment_size = frag_size; SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; @@ -660,7 +659,6 @@ i->i_fop = &generic_ro_fops; i->i_mode |= S_IFREG; i->i_blocks = ((i->i_size - 1) >> 9) + 1; - i->i_blksize = PAGE_CACHE_SIZE; SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; SQUASHFS_I(i)->u.s1.fragment_size = frag_size; SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; @@ -1148,17 +1146,16 @@ } -static int squashfs_statfs(struct super_block *s, struct kstatfs *buf) +static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf) { - struct squashfs_sb_info *msblk = s->s_fs_info; - struct squashfs_super_block *sblk = &msblk->sblk; + struct squashfs_super_block *sblk = dentry->d_sb; TRACE("Entered squashfs_statfs\n"); buf->f_type = SQUASHFS_MAGIC; buf->f_bsize = sblk->block_size; buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1; - buf->f_bfree = buf->f_bavail = 0; + buf->f_bfree = 0; buf->f_files = sblk->inodes; buf->f_ffree = 0; buf->f_namelen = SQUASHFS_NAME_LEN; @@ -2030,10 +2027,10 @@ } -static struct super_block *squashfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) +static int squashfs_get_sb(struct file_system_type *fs_type, + int flags, const char *dev_name, void *data, struct vfsmount *mnt) { - return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super); + return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt); } diff -urN oldtree/fs/squashfs/squashfs2_0.c newtree/fs/squashfs/squashfs2_0.c --- oldtree/fs/squashfs/squashfs2_0.c 2006-08-20 06:03:34.836531500 -0400 +++ newtree/fs/squashfs/squashfs2_0.c 2006-08-20 07:04:01.219166250 -0400 @@ -228,7 +228,6 @@ i->i_atime.tv_sec = inodep->mtime; i->i_ctime.tv_sec = inodep->mtime; i->i_blocks = ((i->i_size - 1) >> 9) + 1; - i->i_blksize = PAGE_CACHE_SIZE; SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; SQUASHFS_I(i)->u.s1.fragment_size = frag_size; SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; diff -urN oldtree/fs/unionfs/unionfs.h newtree/fs/unionfs/unionfs.h --- oldtree/fs/unionfs/unionfs.h 2006-08-20 06:03:56.989916000 -0400 +++ newtree/fs/unionfs/unionfs.h 2006-08-20 07:06:30.192476500 -0400 @@ -514,7 +514,6 @@ dest->i_atime = src->i_atime; dest->i_mtime = src->i_mtime; dest->i_ctime = src->i_ctime; - dest->i_blksize = src->i_blksize; dest->i_blkbits = src->i_blkbits; dest->i_size = src->i_size; dest->i_blocks = src->i_blocks; diff -urN oldtree/include/linux/init_task.h newtree/include/linux/init_task.h --- oldtree/include/linux/init_task.h 2006-08-19 09:15:21.000000000 -0400 +++ newtree/include/linux/init_task.h 2006-08-20 06:17:46.065730000 -0400 @@ -91,6 +91,7 @@ * INIT_TASK is used to set up the first task table, touch at * your own risk!. Base=0, limit=0x1fffff (=2MB) */ +#ifdef CONFIG_INGOSCHED #define INIT_TASK(tsk) \ { \ .state = 0, \ @@ -98,16 +99,9 @@ .usage = ATOMIC_INIT(2), \ .flags = 0, \ .lock_depth = -1, \ -#ifdef CONFIG_INGOSCHED \ .prio = MAX_PRIO-20, \ .static_prio = MAX_PRIO-20, \ .normal_prio = MAX_PRIO-20, \ -#endif \ -#ifdef CONFIG_STAIRCASE \ - .prio = MAX_PRIO-21, \ - .static_prio = MAX_PRIO-21, \ - .normal_prio = MAX_PRIO-21, \ -#endif \ .policy = SCHED_NORMAL, \ .cpus_allowed = CPU_MASK_ALL, \ .mm = NULL, \ @@ -141,6 +135,7 @@ .signal = {{0}}}, \ .blocked = {{0}}, \ .alloc_lock = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock), \ + .mutexes_held = 0, \ .journal_info = NULL, \ .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ .fs_excl = ATOMIC_INIT(0), \ @@ -148,7 +143,60 @@ INIT_TRACE_IRQFLAGS \ INIT_LOCKDEP \ } +#endif +#ifdef CONFIG_STAIRCASE +#define INIT_TASK(tsk) \ +{ \ + .state = 0, \ + .thread_info = &init_thread_info, \ + .usage = ATOMIC_INIT(2), \ + .flags = 0, \ + .lock_depth = -1, \ + .prio = MAX_PRIO-21, \ + .static_prio = MAX_PRIO-21, \ + .normal_prio = MAX_PRIO-21, \ + .policy = SCHED_NORMAL, \ + .cpus_allowed = CPU_MASK_ALL, \ + .mm = NULL, \ + .active_mm = &init_mm, \ + .run_list = LIST_HEAD_INIT(tsk.run_list), \ + .ioprio = 0, \ + .time_slice = HZ, \ + .tasks = LIST_HEAD_INIT(tsk.tasks), \ + .ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children), \ + .ptrace_list = LIST_HEAD_INIT(tsk.ptrace_list), \ + .real_parent = &tsk, \ + .parent = &tsk, \ + .children = LIST_HEAD_INIT(tsk.children), \ + .sibling = LIST_HEAD_INIT(tsk.sibling), \ + .group_leader = &tsk, \ + .group_info = &init_groups, \ + .cap_effective = CAP_INIT_EFF_SET, \ + .cap_inheritable = CAP_INIT_INH_SET, \ + .cap_permitted = CAP_FULL_SET, \ + .keep_capabilities = 0, \ + .user = INIT_USER, \ + .comm = "swapper", \ + .thread = INIT_THREAD, \ + .fs = &init_fs, \ + .files = &init_files, \ + .signal = &init_signals, \ + .sighand = &init_sighand, \ + .nsproxy = &init_nsproxy, \ + .pending = { \ + .list = LIST_HEAD_INIT(tsk.pending.list), \ + .signal = {{0}}}, \ + .blocked = {{0}}, \ + .alloc_lock = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock), \ + .journal_info = NULL, \ + .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ + .fs_excl = ATOMIC_INIT(0), \ + .pi_lock = SPIN_LOCK_UNLOCKED, \ + INIT_TRACE_IRQFLAGS \ + INIT_LOCKDEP \ +} +#endif #define INIT_CPU_TIMERS(cpu_timers) \ { \ diff -urN oldtree/include/linux/sched.h newtree/include/linux/sched.h --- oldtree/include/linux/sched.h 2006-08-20 05:15:43.000000000 -0400 +++ newtree/include/linux/sched.h 2006-08-20 06:17:46.077730750 -0400 @@ -862,7 +862,9 @@ unsigned long policy; cpumask_t cpus_allowed; +#ifdef CONFIG_INGOSCHED unsigned int time_slice, first_time_slice; +#endif #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) struct sched_info sched_info; @@ -1022,6 +1024,7 @@ struct held_lock held_locks[MAX_LOCK_DEPTH]; unsigned int lockdep_recursion; #endif + unsigned long mutexes_held; /* journalling filesystem info */ void *journal_info; diff -urN oldtree/kernel/fork.c newtree/kernel/fork.c --- oldtree/kernel/fork.c 2006-08-20 05:15:43.000000000 -0400 +++ newtree/kernel/fork.c 2006-08-20 06:17:46.093731750 -0400 @@ -1082,6 +1082,7 @@ p->io_context = NULL; p->io_wait = NULL; p->audit_context = NULL; + p->mutexes_held = 0; cpuset_fork(p); #ifdef CONFIG_NUMA p->mempolicy = mpol_copy(p->mempolicy); diff -urN oldtree/kernel/mutex.c newtree/kernel/mutex.c --- oldtree/kernel/mutex.c 2006-08-18 15:01:22.000000000 -0400 +++ newtree/kernel/mutex.c 2006-08-20 06:17:46.097732000 -0400 @@ -60,6 +60,16 @@ static void fastcall noinline __sched __mutex_lock_slowpath(atomic_t *lock_count); +static inline void inc_mutex_count(void) +{ + current->mutexes_held++; +} + +static inline void dec_mutex_count(void) +{ + current->mutexes_held--; +} + /*** * mutex_lock - acquire the mutex * @lock: the mutex to be acquired @@ -89,6 +99,7 @@ * 'unlocked' into 'locked' state. */ __mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath); + inc_mutex_count(); } EXPORT_SYMBOL(mutex_lock); @@ -114,6 +125,7 @@ * into 'unlocked' state: */ __mutex_fastpath_unlock(&lock->count, __mutex_unlock_slowpath); + dec_mutex_count(); } EXPORT_SYMBOL(mutex_unlock); @@ -274,9 +286,14 @@ */ int fastcall __sched mutex_lock_interruptible(struct mutex *lock) { + int ret; + might_sleep(); - return __mutex_fastpath_lock_retval + ret = __mutex_fastpath_lock_retval (&lock->count, __mutex_lock_interruptible_slowpath); + if (likely(!ret)) + inc_mutex_count(); + return ret; } EXPORT_SYMBOL(mutex_lock_interruptible); @@ -331,8 +348,12 @@ */ int fastcall __sched mutex_trylock(struct mutex *lock) { - return __mutex_fastpath_trylock(&lock->count, + int ret = __mutex_fastpath_trylock(&lock->count, __mutex_trylock_slowpath); + + if (likely(ret)) + inc_mutex_count(); + return ret; } EXPORT_SYMBOL(mutex_trylock); diff -urN oldtree/kernel/sched_ingosched.c newtree/kernel/sched_ingosched.c --- oldtree/kernel/sched_ingosched.c 2006-08-20 05:13:15.000000000 -0400 +++ newtree/kernel/sched_ingosched.c 2006-08-20 06:19:48.841403000 -0400 @@ -423,7 +423,7 @@ /* runqueue-specific stats */ seq_printf(seq, - "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", + "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", cpu, rq->yld_both_empty, rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt, rq->sched_switch, rq->sched_cnt, rq->sched_goidle, diff -urN oldtree/kernel/sched_staircase.c newtree/kernel/sched_staircase.c --- oldtree/kernel/sched_staircase.c 2006-08-20 05:09:46.000000000 -0400 +++ newtree/kernel/sched_staircase.c 2006-08-20 06:20:05.954472500 -0400 @@ -346,7 +346,7 @@ /* runqueue-specific stats */ seq_printf(seq, - "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", + "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", cpu, rq->yld_both_empty, rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt, rq->sched_switch, rq->sched_cnt, rq->sched_goidle, @@ -493,7 +493,7 @@ if (t->sched_info.last_queued) delta_jiffies = now - t->sched_info.last_queued; sched_info_dequeued(t); - t->sched_info.max_delay = max(t->sched_info.max_delay, diff); + t->sched_info.max_delay = max(t->sched_info.max_delay, delta_jiffies); t->sched_info.run_delay += delta_jiffies; t->sched_info.last_arrival = now; t->sched_info.pcnt++;