<feed xmlns='http://www.w3.org/2005/Atom'>
<title>litmus-rt.git/fs/ext4, branch linux-tip</title>
<subtitle>The LITMUS^RT kernel.</subtitle>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/'/>
<entry>
<title>ext4: Add EXT4_IOC_TRIM ioctl to handle batched discard</title>
<updated>2010-11-20T02:47:07+00:00</updated>
<author>
<name>Lukas Czerner</name>
<email>lczerner@redhat.com</email>
</author>
<published>2010-11-20T02:47:07+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=e681c047e47c0abe67bf95857f23814372793cb0'/>
<id>e681c047e47c0abe67bf95857f23814372793cb0</id>
<content type='text'>
Filesystem independent ioctl was rejected as not common enough to be in
core vfs ioctl. Since we still need to access to this functionality this
commit adds ext4 specific ioctl EXT4_IOC_TRIM to dispatch
ext4_trim_fs().

It takes fstrim_range structure as an argument. fstrim_range is definec in
the include/linux/fs.h and its definition is as follows.

struct fstrim_range {
	__u64 start;
	__u64 len;
	__u64 minlen;
}

start	- first Byte to trim
len	- number of Bytes to trim from start
minlen	- minimum extent length to trim, free extents shorter than this
  number of Bytes will be ignored. This will be rounded up to fs
  block size.

After the FITRIM is done, the number of actually discarded Bytes is stored
in fstrim_range.len to give the user better insight on how much storage
space has been really released for wear-leveling.

Signed-off-by: Lukas Czerner &lt;lczerner@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Filesystem independent ioctl was rejected as not common enough to be in
core vfs ioctl. Since we still need to access to this functionality this
commit adds ext4 specific ioctl EXT4_IOC_TRIM to dispatch
ext4_trim_fs().

It takes fstrim_range structure as an argument. fstrim_range is definec in
the include/linux/fs.h and its definition is as follows.

struct fstrim_range {
	__u64 start;
	__u64 len;
	__u64 minlen;
}

start	- first Byte to trim
len	- number of Bytes to trim from start
minlen	- minimum extent length to trim, free extents shorter than this
  number of Bytes will be ignored. This will be rounded up to fs
  block size.

After the FITRIM is done, the number of actually discarded Bytes is stored
in fstrim_range.len to give the user better insight on how much storage
space has been really released for wear-leveling.

Signed-off-by: Lukas Czerner &lt;lczerner@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fs: Do not dispatch FITRIM through separate super_operation</title>
<updated>2010-11-20T02:18:35+00:00</updated>
<author>
<name>Lukas Czerner</name>
<email>lczerner@redhat.com</email>
</author>
<published>2010-11-20T02:18:35+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=93bb41f4f8b89ac8b4d0a734bc59634cb0a29a89'/>
<id>93bb41f4f8b89ac8b4d0a734bc59634cb0a29a89</id>
<content type='text'>
There was concern that FITRIM ioctl is not common enough to be included
in core vfs ioctl, as Christoph Hellwig pointed out there's no real point
in dispatching this out to a separate vector instead of just through
-&gt;ioctl.

So this commit removes ioctl_fstrim() from vfs ioctl and trim_fs
from super_operation structure.

Signed-off-by: Lukas Czerner &lt;lczerner@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There was concern that FITRIM ioctl is not common enough to be included
in core vfs ioctl, as Christoph Hellwig pointed out there's no real point
in dispatching this out to a separate vector instead of just through
-&gt;ioctl.

So this commit removes ioctl_fstrim() from vfs ioctl and trim_fs
from super_operation structure.

Signed-off-by: Lukas Czerner &lt;lczerner@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: ext4_fill_super shouldn't return 0 on corruption</title>
<updated>2010-11-19T14:56:44+00:00</updated>
<author>
<name>Darrick J. Wong</name>
<email>djwong@us.ibm.com</email>
</author>
<published>2010-11-19T14:56:44+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=5a9ae68a349aa076bc8557ee2fcf865574459282'/>
<id>5a9ae68a349aa076bc8557ee2fcf865574459282</id>
<content type='text'>
At the start of ext4_fill_super, ret is set to -EINVAL, and any failure path
out of that function returns ret.  However, the generic_check_addressable
clause sets ret = 0 (if it passes), which means that a subsequent failure (e.g.
a group checksum error) returns 0 even though the mount should fail.  This
causes vfs_kern_mount in turn to think that the mount succeeded, leading to an
oops.

A simple fix is to avoid using ret for the generic_check_addressable check,
which was last changed in commit 30ca22c70e3ef0a96ff84de69cd7e8561b416cb2.

Signed-off-by: Darrick J. Wong &lt;djwong@us.ibm.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
At the start of ext4_fill_super, ret is set to -EINVAL, and any failure path
out of that function returns ret.  However, the generic_check_addressable
clause sets ret = 0 (if it passes), which means that a subsequent failure (e.g.
a group checksum error) returns 0 even though the mount should fail.  This
causes vfs_kern_mount in turn to think that the mount succeeded, leading to an
oops.

A simple fix is to avoid using ret for the generic_check_addressable check,
which was last changed in commit 30ca22c70e3ef0a96ff84de69cd7e8561b416cb2.

Signed-off-by: Darrick J. Wong &lt;djwong@us.ibm.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: missing unlock in ext4_clear_request_list()</title>
<updated>2010-11-18T02:46:25+00:00</updated>
<author>
<name>Dan Carpenter</name>
<email>error27@gmail.com</email>
</author>
<published>2010-11-18T02:46:25+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=f4c8cc652d9f70680dd91be60a7a455040d0a282'/>
<id>f4c8cc652d9f70680dd91be60a7a455040d0a282</id>
<content type='text'>
If the the li_request_list was empty then it returned with the lock
held.  Instead of adding a "goto unlock" I just removed that special
case and let it go past the empty list_for_each_safe().

Signed-off-by: Dan Carpenter &lt;error27@gmail.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the the li_request_list was empty then it returned with the lock
held.  Instead of adding a "goto unlock" I just removed that special
case and let it go past the empty list_for_each_safe().

Signed-off-by: Dan Carpenter &lt;error27@gmail.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: fix setting random pages PageUptodate</title>
<updated>2010-11-18T02:46:06+00:00</updated>
<author>
<name>Markus Trippelsdorf</name>
<email>markus@trippelsdorf.de</email>
</author>
<published>2010-11-18T02:46:06+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=08da1193d2c8c7a25d0cef7f85d0b9f1ad7c583a'/>
<id>08da1193d2c8c7a25d0cef7f85d0b9f1ad7c583a</id>
<content type='text'>
ext4_end_bio calls put_page and kmem_cache_free before calling
SetPageUpdate(). This can result in setting the PageUptodate bit on
random pages and causes the following BUG:

 BUG: Bad page state in process rm  pfn:52e54
 page:ffffea0001222260 count:0 mapcount:0 mapping:          (null) index:0x0
 arch kernel: page flags: 0x4000000000000008(uptodate)

Fix the problem by moving put_io_page() after the SetPageUpdate() call.

Thanks to Hugh Dickins for analyzing this problem.

Reported-by: Markus Trippelsdorf &lt;markus@trippelsdorf.de&gt;
Tested-by: Markus Trippelsdorf &lt;markus@trippelsdorf.de&gt;
Signed-off-by: Markus Trippelsdorf &lt;markus@trippelsdorf.de&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
ext4_end_bio calls put_page and kmem_cache_free before calling
SetPageUpdate(). This can result in setting the PageUptodate bit on
random pages and causes the following BUG:

 BUG: Bad page state in process rm  pfn:52e54
 page:ffffea0001222260 count:0 mapcount:0 mapping:          (null) index:0x0
 arch kernel: page flags: 0x4000000000000008(uptodate)

Fix the problem by moving put_io_page() after the SetPageUpdate() call.

Thanks to Hugh Dickins for analyzing this problem.

Reported-by: Markus Trippelsdorf &lt;markus@trippelsdorf.de&gt;
Tested-by: Markus Trippelsdorf &lt;markus@trippelsdorf.de&gt;
Signed-off-by: Markus Trippelsdorf &lt;markus@trippelsdorf.de&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4</title>
<updated>2010-11-08T19:54:53+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2010-11-08T19:54:53+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=a7bcf21e60c73cb7f7c13fad928967d7e47c3cac'/>
<id>a7bcf21e60c73cb7f7c13fad928967d7e47c3cac</id>
<content type='text'>
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
  ext4: Add new ext4 inode tracepoints
  ext4: Don't call sb_issue_discard() in ext4_free_blocks()
  ext4: do not try to grab the s_umount semaphore in ext4_quota_off
  ext4: fix potential race when freeing ext4_io_page structures
  ext4: handle writeback of inodes which are being freed
  ext4: initialize the percpu counters before replaying the journal
  ext4: "ret" may be used uninitialized in ext4_lazyinit_thread()
  ext4: fix lazyinit hang after removing request
</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/tytso/ext4:
  ext4: Add new ext4 inode tracepoints
  ext4: Don't call sb_issue_discard() in ext4_free_blocks()
  ext4: do not try to grab the s_umount semaphore in ext4_quota_off
  ext4: fix potential race when freeing ext4_io_page structures
  ext4: handle writeback of inodes which are being freed
  ext4: initialize the percpu counters before replaying the journal
  ext4: "ret" may be used uninitialized in ext4_lazyinit_thread()
  ext4: fix lazyinit hang after removing request
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: Add new ext4 inode tracepoints</title>
<updated>2010-11-08T18:51:33+00:00</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2010-11-08T18:51:33+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=7ff9c073dd4d7200399076554f7ab9b876f196f6'/>
<id>7ff9c073dd4d7200399076554f7ab9b876f196f6</id>
<content type='text'>
Add ext4_evict_inode, ext4_drop_inode, ext4_mark_inode_dirty, and
ext4_begin_ordered_truncate()

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add ext4_evict_inode, ext4_drop_inode, ext4_mark_inode_dirty, and
ext4_begin_ordered_truncate()

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: Don't call sb_issue_discard() in ext4_free_blocks()</title>
<updated>2010-11-08T18:49:33+00:00</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2010-11-08T18:49:33+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=b56ff9d397cecdaad6c98c9d57cc6fea475e1f50'/>
<id>b56ff9d397cecdaad6c98c9d57cc6fea475e1f50</id>
<content type='text'>
Commit 5c521830cf (ext4: Support discard requests when running in
no-journal mode) attempts to add sb_issue_discard() for data blocks
(in data=writeback mode) and in no-journal mode.  Unfortunately, this
no longer works, because in commit dd3932eddf (block: remove
BLKDEV_IFL_WAIT), sb_issue_discard() only presents a synchronous
interface, and there are times when we call ext4_free_blocks() when we
are are holding a spinlock, or are otherwise in an atomic context.

For now, I've removed the call to sb_issue_discard() to prevent a
deadlock or (if spinlock debugging is enabled) failures like this:

BUG: scheduling while atomic: rc.sysinit/1376/0x00000002
Pid: 1376, comm: rc.sysinit Not tainted 2.6.36-ARCH #1
Call Trace:
[&lt;ffffffff810397ce&gt;] __schedule_bug+0x5e/0x70
[&lt;ffffffff81403110&gt;] schedule+0x950/0xa70
[&lt;ffffffff81060bad&gt;] ? insert_work+0x7d/0x90
[&lt;ffffffff81060fbd&gt;] ? queue_work_on+0x1d/0x30
[&lt;ffffffff81061127&gt;] ? queue_work+0x37/0x60
[&lt;ffffffff8140377d&gt;] schedule_timeout+0x21d/0x360
[&lt;ffffffff812031c3&gt;] ? generic_make_request+0x2c3/0x540
[&lt;ffffffff81402680&gt;] wait_for_common+0xc0/0x150
[&lt;ffffffff81041490&gt;] ? default_wake_function+0x0/0x10
[&lt;ffffffff812034bc&gt;] ? submit_bio+0x7c/0x100
[&lt;ffffffff810680a0&gt;] ? wake_bit_function+0x0/0x40
[&lt;ffffffff814027b8&gt;] wait_for_completion+0x18/0x20
[&lt;ffffffff8120a969&gt;] blkdev_issue_discard+0x1b9/0x210
[&lt;ffffffff811ba03e&gt;] ext4_free_blocks+0x68e/0xb60
[&lt;ffffffff811b1650&gt;] ? __ext4_handle_dirty_metadata+0x110/0x120
[&lt;ffffffff811b098c&gt;] ext4_ext_truncate+0x8cc/0xa70
[&lt;ffffffff810d713e&gt;] ? pagevec_lookup+0x1e/0x30
[&lt;ffffffff81191618&gt;] ext4_truncate+0x178/0x5d0
[&lt;ffffffff810eacbb&gt;] ? unmap_mapping_range+0xab/0x280
[&lt;ffffffff810d8976&gt;] vmtruncate+0x56/0x70
[&lt;ffffffff811925cb&gt;] ext4_setattr+0x14b/0x460
[&lt;ffffffff811319e4&gt;] notify_change+0x194/0x380
[&lt;ffffffff81117f80&gt;] do_truncate+0x60/0x90
[&lt;ffffffff811e08fa&gt;] ? security_inode_permission+0x1a/0x20
[&lt;ffffffff811eaec1&gt;] ? tomoyo_path_truncate+0x11/0x20
[&lt;ffffffff81127539&gt;] do_last+0x5d9/0x770
[&lt;ffffffff811278bd&gt;] do_filp_open+0x1ed/0x680
[&lt;ffffffff8140644f&gt;] ? page_fault+0x1f/0x30
[&lt;ffffffff81132bfc&gt;] ? alloc_fd+0xec/0x140
[&lt;ffffffff81118db1&gt;] do_sys_open+0x61/0x120
[&lt;ffffffff81118e8b&gt;] sys_open+0x1b/0x20
[&lt;ffffffff81002e6b&gt;] system_call_fastpath+0x16/0x1b

https://bugzilla.kernel.org/show_bug.cgi?id=22302

Reported-by: Mathias Burén &lt;mathias.buren@gmail.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Cc: jiayingz@google.com
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit 5c521830cf (ext4: Support discard requests when running in
no-journal mode) attempts to add sb_issue_discard() for data blocks
(in data=writeback mode) and in no-journal mode.  Unfortunately, this
no longer works, because in commit dd3932eddf (block: remove
BLKDEV_IFL_WAIT), sb_issue_discard() only presents a synchronous
interface, and there are times when we call ext4_free_blocks() when we
are are holding a spinlock, or are otherwise in an atomic context.

For now, I've removed the call to sb_issue_discard() to prevent a
deadlock or (if spinlock debugging is enabled) failures like this:

BUG: scheduling while atomic: rc.sysinit/1376/0x00000002
Pid: 1376, comm: rc.sysinit Not tainted 2.6.36-ARCH #1
Call Trace:
[&lt;ffffffff810397ce&gt;] __schedule_bug+0x5e/0x70
[&lt;ffffffff81403110&gt;] schedule+0x950/0xa70
[&lt;ffffffff81060bad&gt;] ? insert_work+0x7d/0x90
[&lt;ffffffff81060fbd&gt;] ? queue_work_on+0x1d/0x30
[&lt;ffffffff81061127&gt;] ? queue_work+0x37/0x60
[&lt;ffffffff8140377d&gt;] schedule_timeout+0x21d/0x360
[&lt;ffffffff812031c3&gt;] ? generic_make_request+0x2c3/0x540
[&lt;ffffffff81402680&gt;] wait_for_common+0xc0/0x150
[&lt;ffffffff81041490&gt;] ? default_wake_function+0x0/0x10
[&lt;ffffffff812034bc&gt;] ? submit_bio+0x7c/0x100
[&lt;ffffffff810680a0&gt;] ? wake_bit_function+0x0/0x40
[&lt;ffffffff814027b8&gt;] wait_for_completion+0x18/0x20
[&lt;ffffffff8120a969&gt;] blkdev_issue_discard+0x1b9/0x210
[&lt;ffffffff811ba03e&gt;] ext4_free_blocks+0x68e/0xb60
[&lt;ffffffff811b1650&gt;] ? __ext4_handle_dirty_metadata+0x110/0x120
[&lt;ffffffff811b098c&gt;] ext4_ext_truncate+0x8cc/0xa70
[&lt;ffffffff810d713e&gt;] ? pagevec_lookup+0x1e/0x30
[&lt;ffffffff81191618&gt;] ext4_truncate+0x178/0x5d0
[&lt;ffffffff810eacbb&gt;] ? unmap_mapping_range+0xab/0x280
[&lt;ffffffff810d8976&gt;] vmtruncate+0x56/0x70
[&lt;ffffffff811925cb&gt;] ext4_setattr+0x14b/0x460
[&lt;ffffffff811319e4&gt;] notify_change+0x194/0x380
[&lt;ffffffff81117f80&gt;] do_truncate+0x60/0x90
[&lt;ffffffff811e08fa&gt;] ? security_inode_permission+0x1a/0x20
[&lt;ffffffff811eaec1&gt;] ? tomoyo_path_truncate+0x11/0x20
[&lt;ffffffff81127539&gt;] do_last+0x5d9/0x770
[&lt;ffffffff811278bd&gt;] do_filp_open+0x1ed/0x680
[&lt;ffffffff8140644f&gt;] ? page_fault+0x1f/0x30
[&lt;ffffffff81132bfc&gt;] ? alloc_fd+0xec/0x140
[&lt;ffffffff81118db1&gt;] do_sys_open+0x61/0x120
[&lt;ffffffff81118e8b&gt;] sys_open+0x1b/0x20
[&lt;ffffffff81002e6b&gt;] system_call_fastpath+0x16/0x1b

https://bugzilla.kernel.org/show_bug.cgi?id=22302

Reported-by: Mathias Burén &lt;mathias.buren@gmail.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Cc: jiayingz@google.com
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: do not try to grab the s_umount semaphore in ext4_quota_off</title>
<updated>2010-11-08T18:47:33+00:00</updated>
<author>
<name>Dmitry Monakhov</name>
<email>dmonakhov@openvz.org</email>
</author>
<published>2010-11-08T18:47:33+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=87009d86dc045d228e21242467a67a5f99347553'/>
<id>87009d86dc045d228e21242467a67a5f99347553</id>
<content type='text'>
It's not needed to sync the filesystem, and it fixes a lock_dep complaint.

Signed-off-by: Dmitry Monakhov &lt;dmonakhov@gmail.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Reviewed-by: Jan Kara &lt;jack@suse.cz&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It's not needed to sync the filesystem, and it fixes a lock_dep complaint.

Signed-off-by: Dmitry Monakhov &lt;dmonakhov@gmail.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Reviewed-by: Jan Kara &lt;jack@suse.cz&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: fix potential race when freeing ext4_io_page structures</title>
<updated>2010-11-08T18:45:33+00:00</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2010-11-08T18:45:33+00:00</published>
<link rel='alternate' type='text/html' href='http://rtsrv.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git/commit/?id=83668e7141c7a0aa4035bde94344b81f9cf966ab'/>
<id>83668e7141c7a0aa4035bde94344b81f9cf966ab</id>
<content type='text'>
Use an atomic_t and make sure we don't free the structure while we
might still be submitting I/O for that page.

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Use an atomic_t and make sure we don't free the structure while we
might still be submitting I/O for that page.

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
</feed>
