<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/fs/super.c, branch v2.6.35</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>fs: fix superblock iteration race</title>
<updated>2010-06-29T17:38:22+00:00</updated>
<author>
<name>npiggin@suse.de</name>
<email>npiggin@suse.de</email>
</author>
<published>2010-06-24T03:02:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=57439f878afafefad8836ebf5c49da2a0a746105'/>
<id>57439f878afafefad8836ebf5c49da2a0a746105</id>
<content type='text'>
list_for_each_entry_safe is not suitable to protect against concurrent
modification of the list. 6754af6 introduced a race in sb walking.

list_for_each_entry can use the trick of pinning the current entry in
the list before we drop and retake the lock because it subsequently
follows cur-&gt;next. However list_for_each_entry_safe saves n=cur-&gt;next
for following before entering the loop body, so when the lock is
dropped, n may be deleted.

Signed-off-by: Nick Piggin &lt;npiggin@suse.de&gt;
Cc: Christoph Hellwig &lt;hch@infradead.org&gt;
Cc: John Stultz &lt;johnstul@us.ibm.com&gt;
Cc: Frank Mayhar &lt;fmayhar@google.com&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
list_for_each_entry_safe is not suitable to protect against concurrent
modification of the list. 6754af6 introduced a race in sb walking.

list_for_each_entry can use the trick of pinning the current entry in
the list before we drop and retake the lock because it subsequently
follows cur-&gt;next. However list_for_each_entry_safe saves n=cur-&gt;next
for following before entering the loop body, so when the lock is
dropped, n may be deleted.

Signed-off-by: Nick Piggin &lt;npiggin@suse.de&gt;
Cc: Christoph Hellwig &lt;hch@infradead.org&gt;
Cc: John Stultz &lt;johnstul@us.ibm.com&gt;
Cc: Frank Mayhar &lt;fmayhar@google.com&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6</title>
<updated>2010-05-30T16:11:11+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2010-05-30T16:11:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d28619f1563140526e2f84eae436f39206f40a69'/>
<id>d28619f1563140526e2f84eae436f39206f40a69</id>
<content type='text'>
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6:
  quota: Convert quota statistics to generic percpu_counter
  ext3 uses rb_node = NULL; to zero rb_root.
  quota: Fixup dquot_transfer
  reiserfs: Fix resuming of quotas on remount read-write
  pohmelfs: Remove dead quota code
  ufs: Remove dead quota code
  udf: Remove dead quota code
  quota: rename default quotactl methods to dquot_
  quota: explicitly set -&gt;dq_op and -&gt;s_qcop
  quota: drop remount argument to -&gt;quota_on and -&gt;quota_off
  quota: move unmount handling into the filesystem
  quota: kill the vfs_dq_off and vfs_dq_quota_on_remount wrappers
  quota: move remount handling into the filesystem
  ocfs2: Fix use after free on remount read-only

Fix up conflicts in fs/ext4/super.c and fs/ufs/file.c
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6:
  quota: Convert quota statistics to generic percpu_counter
  ext3 uses rb_node = NULL; to zero rb_root.
  quota: Fixup dquot_transfer
  reiserfs: Fix resuming of quotas on remount read-write
  pohmelfs: Remove dead quota code
  ufs: Remove dead quota code
  udf: Remove dead quota code
  quota: rename default quotactl methods to dquot_
  quota: explicitly set -&gt;dq_op and -&gt;s_qcop
  quota: drop remount argument to -&gt;quota_on and -&gt;quota_off
  quota: move unmount handling into the filesystem
  quota: kill the vfs_dq_off and vfs_dq_quota_on_remount wrappers
  quota: move remount handling into the filesystem
  ocfs2: Fix use after free on remount read-only

Fix up conflicts in fs/ext4/super.c and fs/ufs/file.c
</pre>
</div>
</content>
</entry>
<entry>
<title>fs/super: fix kernel-doc warning</title>
<updated>2010-05-28T02:06:23+00:00</updated>
<author>
<name>Randy Dunlap</name>
<email>randy.dunlap@oracle.com</email>
</author>
<published>2010-05-25T05:22:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=7000d3c424e5bb350e502a477fb0e1ed42f8b10e'/>
<id>7000d3c424e5bb350e502a477fb0e1ed42f8b10e</id>
<content type='text'>
Fix fs/super.c kernel-doc warning and function notation:
Warning(fs/super.c:957): No description found for parameter 'sb'

Signed-off-by: Randy Dunlap &lt;randy.dunlap@oracle.com&gt;
Cc: Alexander Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix fs/super.c kernel-doc warning and function notation:
Warning(fs/super.c:957): No description found for parameter 'sb'

Signed-off-by: Randy Dunlap &lt;randy.dunlap@oracle.com&gt;
Cc: Alexander Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>quota: explicitly set -&gt;dq_op and -&gt;s_qcop</title>
<updated>2010-05-24T12:10:17+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@infradead.org</email>
</author>
<published>2010-05-19T11:16:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=123e9caf1e85008ab7eb5f6cd58c44f9a5d73b2b'/>
<id>123e9caf1e85008ab7eb5f6cd58c44f9a5d73b2b</id>
<content type='text'>
Only set the quota operation vectors if the filesystem actually supports
quota instead of doing it for all filesystems in alloc_super().

[Jan Kara: Export dquot_operations and vfs_quotactl_ops]

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Only set the quota operation vectors if the filesystem actually supports
quota instead of doing it for all filesystems in alloc_super().

[Jan Kara: Export dquot_operations and vfs_quotactl_ops]

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>quota: move unmount handling into the filesystem</title>
<updated>2010-05-24T12:09:12+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@infradead.org</email>
</author>
<published>2010-05-19T11:16:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=e0ccfd959cd8907bcb66cc2042e0f4fd7fcbff2b'/>
<id>e0ccfd959cd8907bcb66cc2042e0f4fd7fcbff2b</id>
<content type='text'>
Currently the VFS calls into the quotactl interface for unmounting
filesystems.  This means filesystems with their own quota handling
can't easily distinguish between user-space originating quotaoff
and an unount.  Instead move the responsibily of the unmount handling
into the filesystem to be consistent with all other dquot handling.

Note that we do call dquot_disable a lot later now, e.g. after
a sync_filesystem.  But this is fine as the quota code does all its
writes via blockdev's mapping and that is synced even later.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Currently the VFS calls into the quotactl interface for unmounting
filesystems.  This means filesystems with their own quota handling
can't easily distinguish between user-space originating quotaoff
and an unount.  Instead move the responsibily of the unmount handling
into the filesystem to be consistent with all other dquot handling.

Note that we do call dquot_disable a lot later now, e.g. after
a sync_filesystem.  But this is fine as the quota code does all its
writes via blockdev's mapping and that is synced even later.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>quota: move remount handling into the filesystem</title>
<updated>2010-05-24T12:06:39+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@infradead.org</email>
</author>
<published>2010-05-19T11:16:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=c79d967de3741ceb60c5bbbf1b6f97eab9a89838'/>
<id>c79d967de3741ceb60c5bbbf1b6f97eab9a89838</id>
<content type='text'>
Currently do_remount_sb calls into the dquot code to tell it about going
from rw to ro and ro to rw.  Move this code into the filesystem to
not depend on the dquot code in the VFS - note ocfs2 already ignores
these calls and handles remount by itself.  This gets rid of overloading
the quotactl calls and allows to unify the VFS and XFS codepaths in
that area later.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Currently do_remount_sb calls into the dquot code to tell it about going
from rw to ro and ro to rw.  Move this code into the filesystem to
not depend on the dquot code in the VFS - note ocfs2 already ignores
these calls and handles remount by itself.  This gets rid of overloading
the quotactl calls and allows to unify the VFS and XFS codepaths in
that area later.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vfs: add lockdep annotation to s_vfs_rename_key for ecryptfs</title>
<updated>2010-05-21T22:31:22+00:00</updated>
<author>
<name>Roland Dreier</name>
<email>rdreier@cisco.com</email>
</author>
<published>2010-04-27T21:23:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=51ee049e771c14a29aaee8ecd6cbbe14db088f3a'/>
<id>51ee049e771c14a29aaee8ecd6cbbe14db088f3a</id>
<content type='text'>
 &gt;  =============================================
 &gt;  [ INFO: possible recursive locking detected ]
 &gt;  2.6.31-2-generic #14~rbd3
 &gt;  ---------------------------------------------
 &gt;  firefox-3.5/4162 is trying to acquire lock:
 &gt;   (&amp;s-&gt;s_vfs_rename_mutex){+.+.+.}, at: [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;
 &gt;  but task is already holding lock:
 &gt;   (&amp;s-&gt;s_vfs_rename_mutex){+.+.+.}, at: [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;
 &gt;  other info that might help us debug this:
 &gt;  3 locks held by firefox-3.5/4162:
 &gt;   #0:  (&amp;s-&gt;s_vfs_rename_mutex){+.+.+.}, at: [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;   #1:  (&amp;sb-&gt;s_type-&gt;i_mutex_key#11/1){+.+.+.}, at: [&lt;ffffffff81139d5a&gt;] lock_rename+0x6a/0xf0
 &gt;   #2:  (&amp;sb-&gt;s_type-&gt;i_mutex_key#11/2){+.+.+.}, at: [&lt;ffffffff81139d6f&gt;] lock_rename+0x7f/0xf0
 &gt;
 &gt;  stack backtrace:
 &gt;  Pid: 4162, comm: firefox-3.5 Tainted: G         C 2.6.31-2-generic #14~rbd3
 &gt;  Call Trace:
 &gt;   [&lt;ffffffff8108ae74&gt;] print_deadlock_bug+0xf4/0x100
 &gt;   [&lt;ffffffff8108ce26&gt;] validate_chain+0x4c6/0x750
 &gt;   [&lt;ffffffff8108d2e7&gt;] __lock_acquire+0x237/0x430
 &gt;   [&lt;ffffffff8108d585&gt;] lock_acquire+0xa5/0x150
 &gt;   [&lt;ffffffff81139d31&gt;] ? lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff815526ad&gt;] __mutex_lock_common+0x4d/0x3d0
 &gt;   [&lt;ffffffff81139d31&gt;] ? lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff81139d31&gt;] ? lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff8120eaf9&gt;] ? ecryptfs_rename+0x99/0x170
 &gt;   [&lt;ffffffff81552b36&gt;] mutex_lock_nested+0x46/0x60
 &gt;   [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff8120eb2a&gt;] ecryptfs_rename+0xca/0x170
 &gt;   [&lt;ffffffff81139a9e&gt;] vfs_rename_dir+0x13e/0x160
 &gt;   [&lt;ffffffff8113ac7e&gt;] vfs_rename+0xee/0x290
 &gt;   [&lt;ffffffff8113c212&gt;] ? __lookup_hash+0x102/0x160
 &gt;   [&lt;ffffffff8113d512&gt;] sys_renameat+0x252/0x280
 &gt;   [&lt;ffffffff81133eb4&gt;] ? cp_new_stat+0xe4/0x100
 &gt;   [&lt;ffffffff8101316a&gt;] ? sysret_check+0x2e/0x69
 &gt;   [&lt;ffffffff8108c34d&gt;] ? trace_hardirqs_on_caller+0x14d/0x190
 &gt;   [&lt;ffffffff8113d55b&gt;] sys_rename+0x1b/0x20
 &gt;   [&lt;ffffffff81013132&gt;] system_call_fastpath+0x16/0x1b

The trace above is totally reproducible by doing a cross-directory
rename on an ecryptfs directory.

The issue seems to be that sys_renameat() does lock_rename() then calls
into the filesystem; if the filesystem is ecryptfs, then
ecryptfs_rename() again does lock_rename() on the lower filesystem, and
lockdep can't tell that the two s_vfs_rename_mutexes are different.  It
seems an annotation like the following is sufficient to fix this (it
does get rid of the lockdep trace in my simple tests); however I would
like to make sure I'm not misunderstanding the locking, hence the CC
list...

Signed-off-by: Roland Dreier &lt;rdreier@cisco.com&gt;
Cc: Tyler Hicks &lt;tyhicks@linux.vnet.ibm.com&gt;
Cc: Dustin Kirkland &lt;kirkland@canonical.com&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
 &gt;  =============================================
 &gt;  [ INFO: possible recursive locking detected ]
 &gt;  2.6.31-2-generic #14~rbd3
 &gt;  ---------------------------------------------
 &gt;  firefox-3.5/4162 is trying to acquire lock:
 &gt;   (&amp;s-&gt;s_vfs_rename_mutex){+.+.+.}, at: [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;
 &gt;  but task is already holding lock:
 &gt;   (&amp;s-&gt;s_vfs_rename_mutex){+.+.+.}, at: [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;
 &gt;  other info that might help us debug this:
 &gt;  3 locks held by firefox-3.5/4162:
 &gt;   #0:  (&amp;s-&gt;s_vfs_rename_mutex){+.+.+.}, at: [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;   #1:  (&amp;sb-&gt;s_type-&gt;i_mutex_key#11/1){+.+.+.}, at: [&lt;ffffffff81139d5a&gt;] lock_rename+0x6a/0xf0
 &gt;   #2:  (&amp;sb-&gt;s_type-&gt;i_mutex_key#11/2){+.+.+.}, at: [&lt;ffffffff81139d6f&gt;] lock_rename+0x7f/0xf0
 &gt;
 &gt;  stack backtrace:
 &gt;  Pid: 4162, comm: firefox-3.5 Tainted: G         C 2.6.31-2-generic #14~rbd3
 &gt;  Call Trace:
 &gt;   [&lt;ffffffff8108ae74&gt;] print_deadlock_bug+0xf4/0x100
 &gt;   [&lt;ffffffff8108ce26&gt;] validate_chain+0x4c6/0x750
 &gt;   [&lt;ffffffff8108d2e7&gt;] __lock_acquire+0x237/0x430
 &gt;   [&lt;ffffffff8108d585&gt;] lock_acquire+0xa5/0x150
 &gt;   [&lt;ffffffff81139d31&gt;] ? lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff815526ad&gt;] __mutex_lock_common+0x4d/0x3d0
 &gt;   [&lt;ffffffff81139d31&gt;] ? lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff81139d31&gt;] ? lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff8120eaf9&gt;] ? ecryptfs_rename+0x99/0x170
 &gt;   [&lt;ffffffff81552b36&gt;] mutex_lock_nested+0x46/0x60
 &gt;   [&lt;ffffffff81139d31&gt;] lock_rename+0x41/0xf0
 &gt;   [&lt;ffffffff8120eb2a&gt;] ecryptfs_rename+0xca/0x170
 &gt;   [&lt;ffffffff81139a9e&gt;] vfs_rename_dir+0x13e/0x160
 &gt;   [&lt;ffffffff8113ac7e&gt;] vfs_rename+0xee/0x290
 &gt;   [&lt;ffffffff8113c212&gt;] ? __lookup_hash+0x102/0x160
 &gt;   [&lt;ffffffff8113d512&gt;] sys_renameat+0x252/0x280
 &gt;   [&lt;ffffffff81133eb4&gt;] ? cp_new_stat+0xe4/0x100
 &gt;   [&lt;ffffffff8101316a&gt;] ? sysret_check+0x2e/0x69
 &gt;   [&lt;ffffffff8108c34d&gt;] ? trace_hardirqs_on_caller+0x14d/0x190
 &gt;   [&lt;ffffffff8113d55b&gt;] sys_rename+0x1b/0x20
 &gt;   [&lt;ffffffff81013132&gt;] system_call_fastpath+0x16/0x1b

The trace above is totally reproducible by doing a cross-directory
rename on an ecryptfs directory.

The issue seems to be that sys_renameat() does lock_rename() then calls
into the filesystem; if the filesystem is ecryptfs, then
ecryptfs_rename() again does lock_rename() on the lower filesystem, and
lockdep can't tell that the two s_vfs_rename_mutexes are different.  It
seems an annotation like the following is sufficient to fix this (it
does get rid of the lockdep trace in my simple tests); however I would
like to make sure I'm not misunderstanding the locking, hence the CC
list...

Signed-off-by: Roland Dreier &lt;rdreier@cisco.com&gt;
Cc: Tyler Hicks &lt;tyhicks@linux.vnet.ibm.com&gt;
Cc: Dustin Kirkland &lt;kirkland@canonical.com&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Introduce freeze_super and thaw_super for the fsfreeze ioctl</title>
<updated>2010-05-21T22:31:18+00:00</updated>
<author>
<name>Josef Bacik</name>
<email>josef@redhat.com</email>
</author>
<published>2010-03-23T14:34:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=18e9e5104fcd9a973ffe3eed3816c87f2a1b6cd2'/>
<id>18e9e5104fcd9a973ffe3eed3816c87f2a1b6cd2</id>
<content type='text'>
Currently the way we do freezing is by passing sb&gt;s_bdev to freeze_bdev and then
letting it do all the work.  But freezing is more of an fs thing, and doesn't
really have much to do with the bdev at all, all the work gets done with the
super.  In btrfs we do not populate s_bdev, since we can have multiple bdev's
for one fs and setting s_bdev makes removing devices from a pool kind of tricky.
This means that freezing a btrfs filesystem fails, which causes us to corrupt
with things like tux-on-ice which use the fsfreeze mechanism.  So instead of
populating sb-&gt;s_bdev with a random bdev in our pool, I've broken the actual fs
freezing stuff into freeze_super and thaw_super.  These just take the
super_block that we're freezing and does the appropriate work.  It's basically
just copy and pasted from freeze_bdev.  I've then converted freeze_bdev over to
use the new super helpers.  I've tested this with ext4 and btrfs and verified
everything continues to work the same as before.

The only new gotcha is multiple calls to the fsfreeze ioctl will return EBUSY if
the fs is already frozen.  I thought this was a better solution than adding a
freeze counter to the super_block, but if everybody hates this idea I'm open to
suggestions.  Thanks,

Signed-off-by: Josef Bacik &lt;josef@redhat.com&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Currently the way we do freezing is by passing sb&gt;s_bdev to freeze_bdev and then
letting it do all the work.  But freezing is more of an fs thing, and doesn't
really have much to do with the bdev at all, all the work gets done with the
super.  In btrfs we do not populate s_bdev, since we can have multiple bdev's
for one fs and setting s_bdev makes removing devices from a pool kind of tricky.
This means that freezing a btrfs filesystem fails, which causes us to corrupt
with things like tux-on-ice which use the fsfreeze mechanism.  So instead of
populating sb-&gt;s_bdev with a random bdev in our pool, I've broken the actual fs
freezing stuff into freeze_super and thaw_super.  These just take the
super_block that we're freezing and does the appropriate work.  It's basically
just copy and pasted from freeze_bdev.  I've then converted freeze_bdev over to
use the new super helpers.  I've tested this with ext4 and btrfs and verified
everything continues to work the same as before.

The only new gotcha is multiple calls to the fsfreeze ioctl will return EBUSY if
the fs is already frozen.  I thought this was a better solution than adding a
freeze counter to the super_block, but if everybody hates this idea I'm open to
suggestions.  Thanks,

Signed-off-by: Josef Bacik &lt;josef@redhat.com&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Trim includes in fs/super.c</title>
<updated>2010-05-21T22:31:17+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2010-03-23T17:56:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=e1e46bf1866317d4f86f66bf18d3f07317d9f9ee'/>
<id>e1e46bf1866317d4f86f66bf18d3f07317d9f9ee</id>
<content type='text'>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Move grabbing s_umount to callers of grab_super()</title>
<updated>2010-05-21T22:31:17+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2010-03-23T15:11:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d3f2147307cce9eac56dd91d381709aa3f1615b3'/>
<id>d3f2147307cce9eac56dd91d381709aa3f1615b3</id>
<content type='text'>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
</feed>
