diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2011-01-29 15:37:25 -0500 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2011-01-29 15:37:25 -0500 |
commit | dd1a220a6575d060bbc7cbf1efd3fef1da80333d (patch) | |
tree | 2b714f13ce6471f01bcf290dc60eb10aaee9fc04 | |
parent | 95e9f0bf422408eb10f696c4b77cbaa9540adfbf (diff) | |
download | rt-patches-dd1a220a6575d060bbc7cbf1efd3fef1da80333d.tar.gz |
fix xfs lock patch after xfs lock rewrite upstreamv2.6.33-1076-g9872315v2.6.33-1061-g4cbd551v2.6.33-1056-gb305956
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r-- | series | 2 | ||||
-rw-r--r-- | xfs-Convert-mr_lock-m_peraglock-to-rw_anon_semaphore.patch | 445 | ||||
-rw-r--r-- | xfs-Convert-mr_lock-to-rw_anon_semaphore.patch | 77 |
3 files changed, 78 insertions, 446 deletions
@@ -85,7 +85,7 @@ printk-Make-console_sem-a-semaphore-not-a-pseudo-mut.patch semaphore-Remove-mutex-emulation.patch rw_semaphores-Add-rw_anon_semaphores.patch fs-Convert-i_alloc_sem-to-rw_anon_semaphore.patch -xfs-Convert-mr_lock-m_peraglock-to-rw_anon_semaphore.patch +xfs-Convert-mr_lock-to-rw_anon_semaphore.patch signals-allow-rt-tasks-to-cache-one-sigqueue-struct.patch kthreads-fix-softirq-startup-hang.patch cpu-hotplug-get_cpu_var_locked-online-aware.patch diff --git a/xfs-Convert-mr_lock-m_peraglock-to-rw_anon_semaphore.patch b/xfs-Convert-mr_lock-m_peraglock-to-rw_anon_semaphore.patch deleted file mode 100644 index 2afe5a7..0000000 --- a/xfs-Convert-mr_lock-m_peraglock-to-rw_anon_semaphore.patch +++ /dev/null @@ -1,445 +0,0 @@ -From b8d5f48ecbe1251b97219de48e7e936745b22a6f Mon Sep 17 00:00:00 2001 -From: Thomas Gleixner <tglx@linutronix.de> -Date: Sun, 26 Jul 2009 17:48:08 +0200 -Subject: [PATCH] xfs: Convert mr_lock, m_peraglock to rw_anon_semaphore - -commit fa9298a53b64755ca4beb90ade84628af5a5249f in tip. - -Both locks have no struct owner rules and therefor preempt-rt must -keep them as real semaphores. Convert them to rw_anon_semaphores and -annotate their semantics hereby. - -Signed-off-by: Thomas Gleixner <tglx@linutronix.de> -Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> - -diff --git a/fs/xfs/linux-2.6/mrlock.h b/fs/xfs/linux-2.6/mrlock.h -index ff6a198..77de2c2 100644 ---- a/fs/xfs/linux-2.6/mrlock.h -+++ b/fs/xfs/linux-2.6/mrlock.h -@@ -21,7 +21,7 @@ - #include <linux/rwsem.h> - - typedef struct { -- struct rw_semaphore mr_lock; -+ struct rw_anon_semaphore mr_lock; - #ifdef DEBUG - int mr_writer; - #endif -@@ -29,10 +29,10 @@ typedef struct { - - #ifdef DEBUG - #define mrinit(mrp, name) \ -- do { (mrp)->mr_writer = 0; init_rwsem(&(mrp)->mr_lock); } while (0) -+ do { (mrp)->mr_writer = 0; init_anon_rwsem(&(mrp)->mr_lock); } while (0) - #else - #define mrinit(mrp, name) \ -- do { init_rwsem(&(mrp)->mr_lock); } while (0) -+ do { init_anon_rwsem(&(mrp)->mr_lock); } while (0) - #endif - - #define mrlock_init(mrp, t,n,s) mrinit(mrp, n) -@@ -40,12 +40,12 @@ typedef struct { - - static inline void mraccess_nested(mrlock_t *mrp, int subclass) - { -- down_read_nested(&mrp->mr_lock, subclass); -+ anon_down_read_nested(&mrp->mr_lock, subclass); - } - - static inline void mrupdate_nested(mrlock_t *mrp, int subclass) - { -- down_write_nested(&mrp->mr_lock, subclass); -+ anon_down_write_nested(&mrp->mr_lock, subclass); - #ifdef DEBUG - mrp->mr_writer = 1; - #endif -@@ -53,12 +53,12 @@ static inline void mrupdate_nested(mrlock_t *mrp, int subclass) - - static inline int mrtryaccess(mrlock_t *mrp) - { -- return down_read_trylock(&mrp->mr_lock); -+ return anon_down_read_trylock(&mrp->mr_lock); - } - - static inline int mrtryupdate(mrlock_t *mrp) - { -- if (!down_write_trylock(&mrp->mr_lock)) -+ if (!anon_down_write_trylock(&mrp->mr_lock)) - return 0; - #ifdef DEBUG - mrp->mr_writer = 1; -@@ -71,12 +71,12 @@ static inline void mrunlock_excl(mrlock_t *mrp) - #ifdef DEBUG - mrp->mr_writer = 0; - #endif -- up_write(&mrp->mr_lock); -+ anon_up_write(&mrp->mr_lock); - } - - static inline void mrunlock_shared(mrlock_t *mrp) - { -- up_read(&mrp->mr_lock); -+ anon_up_read(&mrp->mr_lock); - } - - static inline void mrdemote(mrlock_t *mrp) -@@ -84,7 +84,7 @@ static inline void mrdemote(mrlock_t *mrp) - #ifdef DEBUG - mrp->mr_writer = 0; - #endif -- downgrade_write(&mrp->mr_lock); -+ anon_downgrade_write(&mrp->mr_lock); - } - - #endif /* __XFS_SUPPORT_MRLOCK_H__ */ -diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c -index 275b1f4..8c5422a 100644 ---- a/fs/xfs/xfs_alloc.c -+++ b/fs/xfs/xfs_alloc.c -@@ -2270,7 +2270,7 @@ xfs_alloc_vextent( - * These three force us into a single a.g. - */ - args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - args->pag = &mp->m_perag[args->agno]; - args->minleft = 0; - error = xfs_alloc_fix_freelist(args, 0); -@@ -2280,14 +2280,14 @@ xfs_alloc_vextent( - goto error0; - } - if (!args->agbp) { -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - trace_xfs_alloc_vextent_noagbp(args); - break; - } - args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); - if ((error = xfs_alloc_ag_vextent(args))) - goto error0; -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - break; - case XFS_ALLOCTYPE_START_BNO: - /* -@@ -2339,7 +2339,7 @@ xfs_alloc_vextent( - * Loop over allocation groups twice; first time with - * trylock set, second time without. - */ -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - for (;;) { - args->pag = &mp->m_perag[args->agno]; - if (no_min) args->minleft = 0; -@@ -2401,7 +2401,7 @@ xfs_alloc_vextent( - } - } - } -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - if (bump_rotor || (type == XFS_ALLOCTYPE_ANY_AG)) { - if (args->agno == sagno) - mp->m_agfrotor = (mp->m_agfrotor + 1) % -@@ -2429,7 +2429,7 @@ xfs_alloc_vextent( - } - return 0; - error0: -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return error; - } - -@@ -2454,7 +2454,7 @@ xfs_free_extent( - args.agno = XFS_FSB_TO_AGNO(args.mp, bno); - ASSERT(args.agno < args.mp->m_sb.sb_agcount); - args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); -- down_read(&args.mp->m_peraglock); -+ anon_down_read(&args.mp->m_peraglock); - args.pag = &args.mp->m_perag[args.agno]; - if ((error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING))) - goto error0; -@@ -2465,7 +2465,7 @@ xfs_free_extent( - #endif - error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0); - error0: -- up_read(&args.mp->m_peraglock); -+ anon_up_read(&args.mp->m_peraglock); - return error; - } - -diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c -index 98251cd..3326ac8 100644 ---- a/fs/xfs/xfs_bmap.c -+++ b/fs/xfs/xfs_bmap.c -@@ -2629,13 +2629,13 @@ xfs_bmap_btalloc( - if (startag == NULLAGNUMBER) - startag = ag = 0; - notinit = 0; -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - while (blen < ap->alen) { - pag = &mp->m_perag[ag]; - if (!pag->pagf_init && - (error = xfs_alloc_pagf_init(mp, args.tp, - ag, XFS_ALLOC_FLAG_TRYLOCK))) { -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return error; - } - /* -@@ -2668,7 +2668,7 @@ xfs_bmap_btalloc( - - error = xfs_filestream_new_ag(ap, &ag); - if (error) { -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return error; - } - -@@ -2682,7 +2682,7 @@ xfs_bmap_btalloc( - if (ag == startag) - break; - } -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - /* - * Since the above loop did a BUF_TRYLOCK, it is - * possible that there is space for this request. -diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c -index a631e14..1dbe404 100644 ---- a/fs/xfs/xfs_filestream.c -+++ b/fs/xfs/xfs_filestream.c -@@ -526,7 +526,7 @@ xfs_filestream_associate( - - mp = pip->i_mount; - cache = mp->m_filestream; -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - - /* - * We have a problem, Houston. -@@ -544,7 +544,7 @@ xfs_filestream_associate( - * So, if we can't get the iolock without sleeping then just give up - */ - if (!xfs_ilock_nowait(pip, XFS_IOLOCK_EXCL)) { -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return 1; - } - -@@ -601,7 +601,7 @@ exit_did_pick: - - exit: - xfs_iunlock(pip, XFS_IOLOCK_EXCL); -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return -err; - } - -diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c -index a13919a..ce3baff 100644 ---- a/fs/xfs/xfs_fsops.c -+++ b/fs/xfs/xfs_fsops.c -@@ -177,14 +177,14 @@ xfs_growfs_data_private( - if (!new_perag) - return XFS_ERROR(ENOMEM); - -- down_write(&mp->m_peraglock); -+ anon_down_write(&mp->m_peraglock); - memcpy(new_perag, mp->m_perag, sizeof(xfs_perag_t) * oagcount); - old_perag = mp->m_perag; - mp->m_perag = new_perag; - - mp->m_flags |= XFS_MOUNT_32BITINODES; - nagimax = xfs_initialize_perag(mp, nagcount); -- up_write(&mp->m_peraglock); -+ anon_up_write(&mp->m_peraglock); - - kmem_free(old_perag); - } -diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c -index cb907ba..303a3fe 100644 ---- a/fs/xfs/xfs_ialloc.c -+++ b/fs/xfs/xfs_ialloc.c -@@ -382,9 +382,9 @@ xfs_ialloc_ag_alloc( - newino = XFS_OFFBNO_TO_AGINO(args.mp, args.agbno, 0); - be32_add_cpu(&agi->agi_count, newlen); - be32_add_cpu(&agi->agi_freecount, newlen); -- down_read(&args.mp->m_peraglock); -+ anon_down_read(&args.mp->m_peraglock); - args.mp->m_perag[agno].pagi_freecount += newlen; -- up_read(&args.mp->m_peraglock); -+ anon_up_read(&args.mp->m_peraglock); - agi->agi_newino = cpu_to_be32(newino); - - /* -@@ -486,7 +486,7 @@ xfs_ialloc_ag_select( - */ - agno = pagno; - flags = XFS_ALLOC_FLAG_TRYLOCK; -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - for (;;) { - pag = &mp->m_perag[agno]; - if (!pag->pagi_init) { -@@ -527,7 +527,7 @@ xfs_ialloc_ag_select( - agbp = NULL; - goto nextag; - } -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return agbp; - } - } -@@ -540,7 +540,7 @@ nextag: - * down. - */ - if (XFS_FORCED_SHUTDOWN(mp)) { -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return NULL; - } - agno++; -@@ -548,7 +548,7 @@ nextag: - agno = 0; - if (agno == pagno) { - if (flags == 0) { -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - return NULL; - } - flags = 0; -@@ -771,13 +771,13 @@ nextag: - *inop = NULLFSINO; - return noroom ? ENOSPC : 0; - } -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - if (mp->m_perag[tagno].pagi_inodeok == 0) { -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - goto nextag; - } - error = xfs_ialloc_read_agi(mp, tp, tagno, &agbp); -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - if (error) - goto nextag; - agi = XFS_BUF_TO_AGI(agbp); -@@ -1006,9 +1006,9 @@ alloc_inode: - goto error0; - be32_add_cpu(&agi->agi_freecount, -1); - xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT); -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - mp->m_perag[tagno].pagi_freecount--; -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - - error = xfs_check_agi_freecount(cur, agi); - if (error) -@@ -1088,9 +1088,9 @@ xfs_difree( - /* - * Get the allocation group header. - */ -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - error = xfs_ialloc_read_agi(mp, tp, agno, &agbp); -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - if (error) { - cmn_err(CE_WARN, - "xfs_difree: xfs_ialloc_read_agi() returned an error %d on %s. Returning error.", -@@ -1157,9 +1157,9 @@ xfs_difree( - be32_add_cpu(&agi->agi_count, -ilen); - be32_add_cpu(&agi->agi_freecount, -(ilen - 1)); - xfs_ialloc_log_agi(tp, agbp, XFS_AGI_COUNT | XFS_AGI_FREECOUNT); -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - mp->m_perag[agno].pagi_freecount -= ilen - 1; -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - xfs_trans_mod_sb(tp, XFS_TRANS_SB_ICOUNT, -ilen); - xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, -(ilen - 1)); - -@@ -1188,9 +1188,9 @@ xfs_difree( - */ - be32_add_cpu(&agi->agi_freecount, 1); - xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT); -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - mp->m_perag[agno].pagi_freecount++; -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, 1); - } - -@@ -1312,9 +1312,9 @@ xfs_imap( - xfs_buf_t *agbp; /* agi buffer */ - int i; /* temp state */ - -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - error = xfs_ialloc_read_agi(mp, tp, agno, &agbp); -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - if (error) { - xfs_fs_cmn_err(CE_ALERT, mp, "xfs_imap: " - "xfs_ialloc_read_agi() returned " -diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c -index 62efab2..521bc20 100644 ---- a/fs/xfs/xfs_itable.c -+++ b/fs/xfs/xfs_itable.c -@@ -420,9 +420,9 @@ xfs_bulkstat( - while (XFS_BULKSTAT_UBLEFT(ubleft) && agno < mp->m_sb.sb_agcount) { - cond_resched(); - bp = NULL; -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp); -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - if (error) { - /* - * Skip this allocation group and go to the next one. -@@ -849,9 +849,9 @@ xfs_inumbers( - agbp = NULL; - while (left > 0 && agno < mp->m_sb.sb_agcount) { - if (agbp == NULL) { -- down_read(&mp->m_peraglock); -+ anon_down_read(&mp->m_peraglock); - error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp); -- up_read(&mp->m_peraglock); -+ anon_up_read(&mp->m_peraglock); - if (error) { - /* - * If we can't read the AGI of this ag, -diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c -index eb403b4..95997a6 100644 ---- a/fs/xfs/xfs_mount.c -+++ b/fs/xfs/xfs_mount.c -@@ -1152,7 +1152,7 @@ xfs_mountfs( - /* - * Allocate and initialize the per-ag data. - */ -- init_rwsem(&mp->m_peraglock); -+ init_anon_rwsem(&mp->m_peraglock); - mp->m_perag = kmem_zalloc(sbp->sb_agcount * sizeof(xfs_perag_t), - KM_MAYFAIL); - if (!mp->m_perag) -diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h -index 1df7e45..0088311 100644 ---- a/fs/xfs/xfs_mount.h -+++ b/fs/xfs/xfs_mount.h -@@ -208,7 +208,7 @@ typedef struct xfs_mount { - uint m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */ - uint m_in_maxlevels; /* max inobt btree levels. */ - struct xfs_perag *m_perag; /* per-ag accounting info */ -- struct rw_semaphore m_peraglock; /* lock for m_perag (pointer) */ -+ struct rw_anon_semaphore m_peraglock; /* lock for m_perag (pointer) */ - struct mutex m_growlock; /* growfs mutex */ - int m_fixedfsid[2]; /* unchanged for life of FS */ - uint m_dmevmask; /* DMI events for this FS */ --- -1.7.1.1 - diff --git a/xfs-Convert-mr_lock-to-rw_anon_semaphore.patch b/xfs-Convert-mr_lock-to-rw_anon_semaphore.patch new file mode 100644 index 0000000..e210daa --- /dev/null +++ b/xfs-Convert-mr_lock-to-rw_anon_semaphore.patch @@ -0,0 +1,77 @@ +From f20b3284acb500658675610d8030c89c21067fd7 Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner <tglx@linutronix.de> +Date: Sun, 26 Jul 2009 17:48:08 +0200 +Subject: [PATCH] xfs: Convert mr_lock to rw_anon_semaphore + +commit fa9298a53b64755ca4beb90ade84628af5a5249f in tip. + +This lock has no struct owner rules and therefore preempt-rt must +keep them as real semaphores. Convert them to rw_anon_semaphores and +annotate their semantics hereby. + +[PG: m_pergalock is gone in 34+, just mr_lock remains] + +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> + +diff --git a/fs/xfs/linux-2.6/mrlock.h b/fs/xfs/linux-2.6/mrlock.h +index ff6a198..f55cf5b 100644 +--- a/fs/xfs/linux-2.6/mrlock.h ++++ b/fs/xfs/linux-2.6/mrlock.h +@@ -40,12 +40,12 @@ typedef struct { + + static inline void mraccess_nested(mrlock_t *mrp, int subclass) + { +- down_read_nested(&mrp->mr_lock, subclass); ++ anon_down_read_nested(&mrp->mr_lock, subclass); + } + + static inline void mrupdate_nested(mrlock_t *mrp, int subclass) + { +- down_write_nested(&mrp->mr_lock, subclass); ++ anon_down_write_nested(&mrp->mr_lock, subclass); + #ifdef DEBUG + mrp->mr_writer = 1; + #endif +@@ -53,12 +53,12 @@ static inline void mrupdate_nested(mrlock_t *mrp, int subclass) + + static inline int mrtryaccess(mrlock_t *mrp) + { +- return down_read_trylock(&mrp->mr_lock); ++ return anon_down_read_trylock(&mrp->mr_lock); + } + + static inline int mrtryupdate(mrlock_t *mrp) + { +- if (!down_write_trylock(&mrp->mr_lock)) ++ if (!anon_down_write_trylock(&mrp->mr_lock)) + return 0; + #ifdef DEBUG + mrp->mr_writer = 1; +@@ -71,12 +71,12 @@ static inline void mrunlock_excl(mrlock_t *mrp) + #ifdef DEBUG + mrp->mr_writer = 0; + #endif +- up_write(&mrp->mr_lock); ++ anon_up_write(&mrp->mr_lock); + } + + static inline void mrunlock_shared(mrlock_t *mrp) + { +- up_read(&mrp->mr_lock); ++ anon_up_read(&mrp->mr_lock); + } + + static inline void mrdemote(mrlock_t *mrp) +@@ -84,7 +84,7 @@ static inline void mrdemote(mrlock_t *mrp) + #ifdef DEBUG + mrp->mr_writer = 0; + #endif +- downgrade_write(&mrp->mr_lock); ++ anon_downgrade_write(&mrp->mr_lock); + } + + #endif /* __XFS_SUPPORT_MRLOCK_H__ */ +-- +1.7.1 + |