<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/fuse/file.c, branch linux-2.6.37.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.37.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.37.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2011-03-07T23:05:20Z</updated>
<entry>
<title>fuse: fix hang of single threaded fuseblk filesystem</title>
<updated>2011-03-07T23:05:20Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2011-02-25T13:44:58Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ca3edc920f5fd7d8ac040caaf109f925c24620a0'/>
<id>urn:sha1:ca3edc920f5fd7d8ac040caaf109f925c24620a0</id>
<content type='text'>
commit 5a18ec176c934ca1bc9dc61580a5e0e90a9b5733 upstream.

Single threaded NTFS-3G could get stuck if a delayed RELEASE reply
triggered a DESTROY request via path_put().

Fix this by

 a) making RELEASE requests synchronous, whenever possible, on fuseblk
 filesystems

 b) if not possible (triggered by an asynchronous read/write) then do
 the path_put() in a separate thread with schedule_work().

Reported-by: Oliver Neukum &lt;oneukum@suse.de&gt;
Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
</entry>
<entry>
<title>fuse: verify ioctl retries</title>
<updated>2010-11-30T15:39:27Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2010-11-30T15:39:27Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7572777eef78ebdee1ecb7c258c0ef94d35bad16'/>
<id>urn:sha1:7572777eef78ebdee1ecb7c258c0ef94d35bad16</id>
<content type='text'>
Verify that the total length of the iovec returned in FUSE_IOCTL_RETRY
doesn't overflow iov_length().

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
CC: Tejun Heo &lt;tj@kernel.org&gt;
CC: &lt;stable@kernel.org&gt;         [2.6.31+]
</content>
</entry>
<entry>
<title>fuse: fix ioctl when server is 32bit</title>
<updated>2010-11-30T15:39:27Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2010-11-30T15:39:27Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d9d318d39dd5cb686660504a3565aac453709ccc'/>
<id>urn:sha1:d9d318d39dd5cb686660504a3565aac453709ccc</id>
<content type='text'>
If a 32bit CUSE server is run on 64bit this results in EIO being
returned to the caller.

The reason is that FUSE_IOCTL_RETRY reply was defined to use 'struct
iovec', which is different on 32bit and 64bit archs.

Work around this by looking at the size of the reply to determine
which struct was used.  This is only needed if CONFIG_COMPAT is
defined.

A more permanent fix for the interface will be to use the same struct
on both 32bit and 64bit.

Reported-by: "ccmail111" &lt;ccmail111@yahoo.com&gt;
Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
CC: Tejun Heo &lt;tj@kernel.org&gt;
CC: &lt;stable@kernel.org&gt;         [2.6.31+]
</content>
</entry>
<entry>
<title>fuse: fix attributes after open(O_TRUNC)</title>
<updated>2010-11-24T21:50:41Z</updated>
<author>
<name>Ken Sumrall</name>
</author>
<published>2010-11-24T20:57:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a0822c55779d9319939eac69f00bb729ea9d23da'/>
<id>urn:sha1:a0822c55779d9319939eac69f00bb729ea9d23da</id>
<content type='text'>
The attribute cache for a file was not being cleared when a file is opened
with O_TRUNC.

If the filesystem's open operation truncates the file ("atomic_o_trunc"
feature flag is set) then the kernel should invalidate the cached st_mtime
and st_ctime attributes.

Also i_size should be explicitly be set to zero as it is used sometimes
without refreshing the cache.

Signed-off-by: Ken Sumrall &lt;ksumrall@android.com&gt;
Cc: Anfei &lt;anfei.zhou@gmail.com&gt;
Cc: "Anand V. Avati" &lt;avati@gluster.com&gt;
Signed-off-by: Miklos Szeredi &lt;miklos@szeredi.hu&gt;
Cc: &lt;stable@kernel.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>fuse: fix lock annotations</title>
<updated>2010-09-07T11:42:41Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2010-09-07T11:42:41Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b9ca67b2ddf021491a3741d9555e8ff59b2175ba'/>
<id>urn:sha1:b9ca67b2ddf021491a3741d9555e8ff59b2175ba</id>
<content type='text'>
Sparse doesn't understand lock annotations of the form
__releases(&amp;foo-&gt;lock).  Change them to __releases(foo-&gt;lock).  Same
for __acquires().

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
</content>
</entry>
<entry>
<title>fuse: add store request</title>
<updated>2010-07-12T12:41:40Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2010-07-12T12:41:40Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a1d75f258230b75d46aecdf28b2e732413028863'/>
<id>urn:sha1:a1d75f258230b75d46aecdf28b2e732413028863</id>
<content type='text'>
Userspace filesystem can request data to be stored in the inode's
mapping.  This request is synchronous and has no reply.  If the write
to the fuse device returns an error then the store request was not
fully completed (but may have updated some pages).

If the stored data overflows the current file size, then the size is
extended, similarly to a write(2) on the filesystem.

Pages which have been completely stored are marked uptodate.

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
</content>
</entry>
<entry>
<title>Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse</title>
<updated>2010-05-30T16:16:14Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2010-05-30T16:16:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=003386fff3e02e51cea882e60f7d28290113964c'/>
<id>urn:sha1:003386fff3e02e51cea882e60f7d28290113964c</id>
<content type='text'>
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
  mm: export generic_pipe_buf_*() to modules
  fuse: support splice() reading from fuse device
  fuse: allow splice to move pages
  mm: export remove_from_page_cache() to modules
  mm: export lru_cache_add_*() to modules
  fuse: support splice() writing to fuse device
  fuse: get page reference for readpages
  fuse: use get_user_pages_fast()
  fuse: remove unneeded variable
</content>
</entry>
<entry>
<title>drop unused dentry argument to -&gt;fsync</title>
<updated>2010-05-28T02:05:02Z</updated>
<author>
<name>Christoph Hellwig</name>
</author>
<published>2010-05-26T15:53:25Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7ea8085910ef3dd4f3cad6845aaa2b580d39b115'/>
<id>urn:sha1:7ea8085910ef3dd4f3cad6845aaa2b580d39b115</id>
<content type='text'>
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>fuse: allow splice to move pages</title>
<updated>2010-05-25T13:06:07Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2010-05-25T13:06:07Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ce534fb052928ce556639d7ecf01cbf4e01321e1'/>
<id>urn:sha1:ce534fb052928ce556639d7ecf01cbf4e01321e1</id>
<content type='text'>
When splicing buffers to the fuse device with SPLICE_F_MOVE, try to
move pages from the pipe buffer into the page cache.  This allows
populating the fuse filesystem's cache without ever touching the page
contents, i.e. zero copy read capability.

The following steps are performed when trying to move a page into the
page cache:

 - buf-&gt;ops-&gt;confirm() to make sure the new page is uptodate
 - buf-&gt;ops-&gt;steal() to try to remove the new page from it's previous place
 - remove_from_page_cache() on the old page
 - add_to_page_cache_locked() on the new page

If any of the above steps fail (non fatally) then the code falls back
to copying the page.  In particular -&gt;steal() will fail if there are
external references (other than the page cache and the pipe buffer) to
the page.

Also since the remove_from_page_cache() + add_to_page_cache_locked()
are non-atomic it is possible that the page cache is repopulated in
between the two and add_to_page_cache_locked() will fail.  This could
be fixed by creating a new atomic replace_page_cache_page() function.

fuse_readpages_end() needed to be reworked so it works even if
page-&gt;mapping is NULL for some or all pages which can happen if the
add_to_page_cache_locked() failed.

A number of sanity checks were added to make sure the stolen pages
don't have weird flags set, etc...  These could be moved into generic
splice/steal code.

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
</content>
</entry>
<entry>
<title>fuse: get page reference for readpages</title>
<updated>2010-05-25T13:06:06Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2010-05-25T13:06:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b5dd328537edeb4c1d2e71e344b6c443e0874d90'/>
<id>urn:sha1:b5dd328537edeb4c1d2e71e344b6c443e0874d90</id>
<content type='text'>
Acquire a page ref on pages in -&gt;readpages() and release them when the
read has finished.  Not acquiring a reference didn't seem to cause any
trouble since the page is locked and will not be kicked out of the
page cache during the read.

However the following patches will want to remove the page from the
cache so a separate ref is needed.  Making the reference in req-&gt;pages
explicit also makes the code easier to understand.

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
</content>
</entry>
</feed>
