2008-08-13 08:12:20

by Lachlan McIlroy

[permalink] [raw]
Subject: [GIT PULL] XFS update for 2.6.27-rc4

The following changes since commit 30a2f3c60a84092c8084dfe788b710f8d0768cd4:
Linus Torvalds (1):
Linux 2.6.27-rc3

are available in the git repository at:

git://oss.sgi.com:8090/xfs/linux-2.6 master

Christoph Hellwig (22):
[XFS] don't leak m_fsname/m_rtname/m_logname
[XFS] Remove vn_from_inode()
[XFS] kill vn_to_inode
[XFS] remove spurious VN_HOLD/VN_RELE calls from xfs_acl.c
[XFS] remove remaining VN_HOLD calls
[XFS] implement IHOLD/IRELE directly
[XFS] kill INDUCE_IO_ERROR
[XFS] kill xfs_lock_dir_and_entry
[XFS] remove some easy bhv_vnode_t instances
[XFS] kill bhv_vnode_t
[XFS] sanitize xfs_initialize_vnode
[XFS] small cleanups in xfs_btree.c
[XFS] Use the same btree_cur union member for alloc and inobt trees.
[XFS] update timestamp in xfs_ialloc manually
[XFS] optimize xfs_ichgtime
[XFS] stop using file_update_time
[XFS] move root inode IRELE into xfs_unmountfs
[XFS] cleanup xfs_mountfs
[XFS] xfs_unmountfs should return void
[XFS] don't call xfs_freesb from xfs_unmountfs
[XFS] refactor xfs_mount_free
[XFS] use KM_MAYFAIL in xfs_mountfs

David Chinner (12):
[XFS] Use the generic bitops rather than implementing them ourselves.
[XFS] Avoid directly referencing the VFS inode.
[XFS] kill shouty XFS_ITOV_NULL macro
[XFS] Kill shouty XFS_ITOV() macro
[XFS] XFS: Kill xfs_vtoi()
[XFS] Use KM_NOFS for incore inode extent tree allocation V2
[XFS] clean up stale references to semaphores
[XFS] replace the XFS buf iodone semaphore with a completion
[XFS] extend completions to provide XFS object flush requirements
[XFS] replace inode flush semaphore with a completion
[XFS] replace dquot flush semaphore with a completion
[XFS] remove the sema_t from XFS.

Eric Sandeen (3):
[XFS] remove INT_GET and friends
[XFS] convert xfs to use ERR_CAST
[XFS] remove shouting-indirection macros from xfs_trans.h

Harvey Harrison (1):
[XFS] use get_unaligned_* helpers

Lachlan McIlroy (4):
[XFS] Do not access buffers after dropping reference count
[XFS] Fix compile failure in xfs_buf_trace()
[XFS] Use KM_NOFS for debug trace buffers
[XFS] Fix use after free in xfs_log_done().

Niv Sardi (2):
[XFS] Move attr log alloc size calculator to another function.
[XFS] Move xfs_attr_rolltrans to xfs_trans_roll

Ruben Porras (1):
[XFS] Make xfs_bmap_*_count_leaves void.

fs/xfs/linux-2.6/sema.h | 52 -----------
fs/xfs/linux-2.6/xfs_aops.c | 3 +-
fs/xfs/linux-2.6/xfs_buf.c | 16 ++--
fs/xfs/linux-2.6/xfs_buf.h | 4 +-
fs/xfs/linux-2.6/xfs_export.c | 10 +-
fs/xfs/linux-2.6/xfs_fs_subr.c | 6 +-
fs/xfs/linux-2.6/xfs_ioctl.c | 4 +-
fs/xfs/linux-2.6/xfs_iops.c | 192 +++++++++++++++++++++++++---------------
fs/xfs/linux-2.6/xfs_iops.h | 15 +---
fs/xfs/linux-2.6/xfs_linux.h | 4 +-
fs/xfs/linux-2.6/xfs_lrw.c | 6 +-
fs/xfs/linux-2.6/xfs_super.c | 189 +++++++++++-----------------------------
fs/xfs/linux-2.6/xfs_super.h | 3 -
fs/xfs/linux-2.6/xfs_vnode.c | 22 +----
fs/xfs/linux-2.6/xfs_vnode.h | 65 +++++---------
fs/xfs/quota/xfs_dquot.c | 38 +++-----
fs/xfs/quota/xfs_dquot.h | 29 ++++---
fs/xfs/quota/xfs_dquot_item.c | 8 +-
fs/xfs/quota/xfs_qm.c | 14 ++--
fs/xfs/quota/xfs_qm.h | 2 +-
fs/xfs/quota/xfs_qm_bhv.c | 7 +-
fs/xfs/quota/xfs_qm_syscalls.c | 4 +-
fs/xfs/xfs_acl.c | 52 +++++------
fs/xfs/xfs_acl.h | 14 ++--
fs/xfs/xfs_arch.h | 68 --------------
fs/xfs/xfs_attr.c | 110 ++++++++++++++---------
fs/xfs/xfs_attr.h | 1 +
fs/xfs/xfs_attr_leaf.c | 75 ++--------------
fs/xfs/xfs_attr_leaf.h | 2 -
fs/xfs/xfs_bit.c | 103 ---------------------
fs/xfs/xfs_bit.h | 34 ++++++-
fs/xfs/xfs_bmap.c | 34 +++-----
fs/xfs/xfs_btree.c | 105 ++++++++--------------
fs/xfs/xfs_btree.h | 8 +--
fs/xfs/xfs_buf_item.c | 4 +-
fs/xfs/xfs_dfrag.c | 33 ++-----
fs/xfs/xfs_error.c | 5 +-
fs/xfs/xfs_error.h | 12 +--
fs/xfs/xfs_filestream.c | 2 +-
fs/xfs/xfs_ialloc_btree.c | 30 +++---
fs/xfs/xfs_iget.c | 48 ++++------
fs/xfs/xfs_inode.c | 66 +++++++-------
fs/xfs/xfs_inode.h | 46 ++++++++--
fs/xfs/xfs_inode_item.c | 11 +--
fs/xfs/xfs_itable.c | 4 +-
fs/xfs/xfs_log.c | 86 ++++++++----------
fs/xfs/xfs_log.h | 2 +-
fs/xfs/xfs_log_priv.h | 14 ++--
fs/xfs/xfs_log_recover.c | 7 +-
fs/xfs/xfs_mount.c | 82 ++++++------------
fs/xfs/xfs_mount.h | 17 +---
fs/xfs/xfs_rtalloc.c | 19 ++---
fs/xfs/xfs_rw.c | 2 +-
fs/xfs/xfs_trans.c | 75 ++++++++++++++--
fs/xfs/xfs_trans.h | 12 +---
fs/xfs/xfs_trans_buf.c | 12 ++--
fs/xfs/xfs_trans_item.c | 66 +++++++-------
fs/xfs/xfs_utils.c | 4 +-
fs/xfs/xfs_utils.h | 3 -
fs/xfs/xfs_vfsops.c | 13 ++--
fs/xfs/xfs_vnodeops.c | 190 +++++++++++----------------------------
include/linux/completion.h | 45 +++++++++
62 files changed, 883 insertions(+), 1326 deletions(-)
delete mode 100644 fs/xfs/linux-2.6/sema.h


2008-08-13 08:16:57

by Andrew Morton

[permalink] [raw]
Subject: Re: [GIT PULL] XFS update for 2.6.27-rc4

On Wed, 13 Aug 2008 18:11:47 +1000 [email protected] (Lachlan McIlroy) wrote:

> The following changes since commit 30a2f3c60a84092c8084dfe788b710f8d0768cd4:
> Linus Torvalds (1):
> Linux 2.6.27-rc3
>
> are available in the git repository at:
>
> git://oss.sgi.com:8090/xfs/linux-2.6 master

Who do I have to pay to get rid of these:

xfs-use-get_unaligned_-helpers.patch
xfs-clean-up-stale-references-to-semaphores.patch
xfs-replace-the-xfs-buf-iodone-semaphore-with-a-completion.patch
xfs-extend-completions-to-provide-xfs-object-flush-requirements.patch
xfs-replace-inode-flush-semaphore-with-a-completion.patch
xfs-replace-dquot-flush-semaphore-with-a-completion.patch
xfs-remove-the-sema_t-from-xfs.patch

and how much?

2008-08-13 08:23:25

by Lachlan McIlroy

[permalink] [raw]
Subject: Re: [GIT PULL] XFS update for 2.6.27-rc4

Andrew Morton wrote:
> On Wed, 13 Aug 2008 18:11:47 +1000 [email protected] (Lachlan McIlroy) wrote:
>
>> The following changes since commit 30a2f3c60a84092c8084dfe788b710f8d0768cd4:
>> Linus Torvalds (1):
>> Linux 2.6.27-rc3
>>
>> are available in the git repository at:
>>
>> git://oss.sgi.com:8090/xfs/linux-2.6 master
>
> Who do I have to pay to get rid of these:
>
> xfs-use-get_unaligned_-helpers.patch
> xfs-clean-up-stale-references-to-semaphores.patch
> xfs-replace-the-xfs-buf-iodone-semaphore-with-a-completion.patch
> xfs-extend-completions-to-provide-xfs-object-flush-requirements.patch
> xfs-replace-inode-flush-semaphore-with-a-completion.patch
> xfs-replace-dquot-flush-semaphore-with-a-completion.patch
> xfs-remove-the-sema_t-from-xfs.patch
>
> and how much?
You can pay me if you like. All of those mods are in this git pull
request so they will be in mainline soon enough.

>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

2008-08-13 08:50:57

by Dave Chinner

[permalink] [raw]
Subject: Re: [GIT PULL] XFS update for 2.6.27-rc4

On Wed, Aug 13, 2008 at 01:16:06AM -0700, Andrew Morton wrote:
> On Wed, 13 Aug 2008 18:11:47 +1000 [email protected] (Lachlan McIlroy) wrote:
>
> > The following changes since commit 30a2f3c60a84092c8084dfe788b710f8d0768cd4:
> > Linus Torvalds (1):
> > Linux 2.6.27-rc3
> >
> > are available in the git repository at:
> >
> > git://oss.sgi.com:8090/xfs/linux-2.6 master
>
> Who do I have to pay to get rid of these:
>
> xfs-use-get_unaligned_-helpers.patch
> xfs-clean-up-stale-references-to-semaphores.patch
> xfs-replace-the-xfs-buf-iodone-semaphore-with-a-completion.patch
> xfs-extend-completions-to-provide-xfs-object-flush-requirements.patch
> xfs-replace-inode-flush-semaphore-with-a-completion.patch
> xfs-replace-dquot-flush-semaphore-with-a-completion.patch
> xfs-remove-the-sema_t-from-xfs.patch
>
> and how much?

They are all in that pull request:

| David Chinner (12):
.....
| [XFS] clean up stale references to semaphores
| [XFS] replace the XFS buf iodone semaphore with a completion
| [XFS] extend completions to provide XFS object flush requirements
| [XFS] replace inode flush semaphore with a completion
| [XFS] replace dquot flush semaphore with a completion
| [XFS] remove the sema_t from XFS.
.....
| Harvey Harrison (1):
| [XFS] use get_unaligned_* helpers

So you won't have to pay anyone anything ;)

Cheers,

Dave.
--
Dave Chinner
[email protected]

2008-08-14 15:45:32

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [GIT PULL] XFS update for 2.6.27-rc4

On Wed, 13 Aug 2008, Lachlan McIlroy wrote:
> The following changes since commit 30a2f3c60a84092c8084dfe788b710f8d0768cd4:
> Linus Torvalds (1):
> Linux 2.6.27-rc3
>
> are available in the git repository at:
>
> git://oss.sgi.com:8090/xfs/linux-2.6 master
>
> David Chinner (12):
> [XFS] extend completions to provide XFS object flush requirements

This change (commit 39d2f1ab2a36ac527a6c41cfe689f50c239eaca3) seems to
have broken the m68k build:

| CC arch/m68k/kernel/asm-offsets.s
| In file included from linux/include/linux/mm_types.h:12,
| from linux/include/linux/sched.h:61,
| from linux/arch/m68k/kernel/asm-offsets.c:12:
| linux/include/linux/completion.h: In function 'try_wait_for_completion':
| linux/include/linux/completion.h:80: error: dereferencing pointer to incomplete type
| linux/include/linux/completion.h: In function 'completion_done':
| linux/include/linux/completion.h:99: error: dereferencing pointer to incomplete type
| make[3]: *** [arch/m68k/kernel/asm-offsets.s] Error 1
| make[2]: *** [prepare0] Error 2
| make[1]: *** [sub-make] Error 2

(cfr. http://kisskb.ellerman.id.au/kisskb/buildresult/42080/)

Apparently there was not sufficient time between entering linux-next and
Linus' tree to notice this breakage before, while the original patch was already
posted on July 11...

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2008-08-14 22:51:49

by Dave Chinner

[permalink] [raw]
Subject: Re: [GIT PULL] XFS update for 2.6.27-rc4

On Thu, Aug 14, 2008 at 05:45:18PM +0200, Geert Uytterhoeven wrote:
> On Wed, 13 Aug 2008, Lachlan McIlroy wrote:
> > The following changes since commit 30a2f3c60a84092c8084dfe788b710f8d0768cd4:
> > Linus Torvalds (1):
> > Linux 2.6.27-rc3
> >
> > are available in the git repository at:
> >
> > git://oss.sgi.com:8090/xfs/linux-2.6 master
> >
> > David Chinner (12):
> > [XFS] extend completions to provide XFS object flush requirements
>
> This change (commit 39d2f1ab2a36ac527a6c41cfe689f50c239eaca3) seems to
> have broken the m68k build:
>
> | CC arch/m68k/kernel/asm-offsets.s
> | In file included from linux/include/linux/mm_types.h:12,
> | from linux/include/linux/sched.h:61,
> | from linux/arch/m68k/kernel/asm-offsets.c:12:
> | linux/include/linux/completion.h: In function 'try_wait_for_completion':
> | linux/include/linux/completion.h:80: error: dereferencing pointer to incomplete type
> | linux/include/linux/completion.h: In function 'completion_done':
> | linux/include/linux/completion.h:99: error: dereferencing pointer to incomplete type
> | make[3]: *** [arch/m68k/kernel/asm-offsets.s] Error 1
> | make[2]: *** [prepare0] Error 2
> | make[1]: *** [sub-make] Error 2
>
> (cfr. http://kisskb.ellerman.id.au/kisskb/buildresult/42080/)
>
> Apparently there was not sufficient time between entering linux-next and
> Linus' tree to notice this breakage before, while the original patch was already
> posted on July 11...

It spent the time between then and now in the -mm tree. Seems
like nobody is building m68k out of -mm.

I'm out for the next 3 days, but it seems to me that the easiest fix
is to move that code out of the header (i.e. uninline them) so the
patch below is only compile tested on x86_64 - I've got to go load a
trailer and get moving...

Cheers,

Dave.
--
Dave Chinner
[email protected]


Completions: Un-inline try_wait_for_completion and completion_done

m68k fails to build with these functions inlined in completion.h.
Move them out of line into sched.c and export them to avoid this
problem.

Signed-off-by: Dave Chinner <[email protected]>
---
include/linux/completion.h | 46 +------------------------------------------
kernel/sched.c | 46 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 44 deletions(-)

diff --git a/include/linux/completion.h b/include/linux/completion.h
index 57faa60..02ef883 100644
--- a/include/linux/completion.h
+++ b/include/linux/completion.h
@@ -49,6 +49,8 @@ extern unsigned long wait_for_completion_timeout(struct completion *x,
unsigned long timeout);
extern unsigned long wait_for_completion_interruptible_timeout(
struct completion *x, unsigned long timeout);
+extern bool try_wait_for_completion(struct completion *x);
+extern bool completion_done(struct completion *x);

extern void complete(struct completion *);
extern void complete_all(struct completion *);
@@ -56,48 +58,4 @@ extern void complete_all(struct completion *);
#define INIT_COMPLETION(x) ((x).done = 0)


-/**
- * try_wait_for_completion - try to decrement a completion without blocking
- * @x: completion structure
- *
- * Returns: 0 if a decrement cannot be done without blocking
- * 1 if a decrement succeeded.
- *
- * If a completion is being used as a counting completion,
- * attempt to decrement the counter without blocking. This
- * enables us to avoid waiting if the resource the completion
- * is protecting is not available.
- */
-static inline bool try_wait_for_completion(struct completion *x)
-{
- int ret = 1;
-
- spin_lock_irq(&x->wait.lock);
- if (!x->done)
- ret = 0;
- else
- x->done--;
- spin_unlock_irq(&x->wait.lock);
- return ret;
-}
-
-/**
- * completion_done - Test to see if a completion has any waiters
- * @x: completion structure
- *
- * Returns: 0 if there are waiters (wait_for_completion() in progress)
- * 1 if there are no waiters.
- *
- */
-static inline bool completion_done(struct completion *x)
-{
- int ret = 1;
-
- spin_lock_irq(&x->wait.lock);
- if (!x->done)
- ret = 0;
- spin_unlock_irq(&x->wait.lock);
- return ret;
-}
-
#endif
diff --git a/kernel/sched.c b/kernel/sched.c
index 04160d2..d3af81a 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4663,6 +4663,52 @@ int __sched wait_for_completion_killable(struct completion *x)
}
EXPORT_SYMBOL(wait_for_completion_killable);

+/**
+ * try_wait_for_completion - try to decrement a completion without blocking
+ * @x: completion structure
+ *
+ * Returns: 0 if a decrement cannot be done without blocking
+ * 1 if a decrement succeeded.
+ *
+ * If a completion is being used as a counting completion,
+ * attempt to decrement the counter without blocking. This
+ * enables us to avoid waiting if the resource the completion
+ * is protecting is not available.
+ */
+bool try_wait_for_completion(struct completion *x)
+{
+ int ret = 1;
+
+ spin_lock_irq(&x->wait.lock);
+ if (!x->done)
+ ret = 0;
+ else
+ x->done--;
+ spin_unlock_irq(&x->wait.lock);
+ return ret;
+}
+EXPORT_SYMBOL(try_wait_for_completion);
+
+/**
+ * completion_done - Test to see if a completion has any waiters
+ * @x: completion structure
+ *
+ * Returns: 0 if there are waiters (wait_for_completion() in progress)
+ * 1 if there are no waiters.
+ *
+ */
+bool completion_done(struct completion *x)
+{
+ int ret = 1;
+
+ spin_lock_irq(&x->wait.lock);
+ if (!x->done)
+ ret = 0;
+ spin_unlock_irq(&x->wait.lock);
+ return ret;
+}
+EXPORT_SYMBOL(completion_done);
+
static long __sched
sleep_on_common(wait_queue_head_t *q, int state, long timeout)
{

2008-08-14 23:03:50

by Andrew Morton

[permalink] [raw]
Subject: Re: [GIT PULL] XFS update for 2.6.27-rc4

On Fri, 15 Aug 2008 08:51:30 +1000
Dave Chinner <[email protected]> wrote:

> > | CC arch/m68k/kernel/asm-offsets.s
> > | In file included from linux/include/linux/mm_types.h:12,
> > | from linux/include/linux/sched.h:61,
> > | from linux/arch/m68k/kernel/asm-offsets.c:12:
> > | linux/include/linux/completion.h: In function 'try_wait_for_completion':
> > | linux/include/linux/completion.h:80: error: dereferencing pointer to incomplete type
> > | linux/include/linux/completion.h: In function 'completion_done':
> > | linux/include/linux/completion.h:99: error: dereferencing pointer to incomplete type
> > | make[3]: *** [arch/m68k/kernel/asm-offsets.s] Error 1
> > | make[2]: *** [prepare0] Error 2
> > | make[1]: *** [sub-make] Error 2
> >
> > (cfr. http://kisskb.ellerman.id.au/kisskb/buildresult/42080/)
> >
> > Apparently there was not sufficient time between entering linux-next and
> > Linus' tree to notice this breakage before, while the original patch was already
> > posted on July 11...
>
> It spent the time between then and now in the -mm tree. Seems
> like nobody is building m68k out of -mm.

I test m68k build regularly, but only allmodconfig.

Our (complexity(config system) * complexity(header files)) is so large
that compilation testing doesn't prove anything useful. You just have
to check your homework very carefully and don earplugs for the
inevitable explosions.

> I'm out for the next 3 days, but it seems to me that the easiest fix
> is to move that code out of the header (i.e. uninline them) so the
> patch below is only compile tested on x86_64 - I've got to go load a
> trailer and get moving...

I'll give it a whizz on a few architectures, but it looks quite safe
from here. It looks like the uninlining was desirable from a
size/speed POV anyway.