Files
kernel-tenderloin-3.0/fs/btrfs
Hidetoshi Seto 890ecd3d30 btrfs: fix d_off in the first dirent
commit 3765fefaee2da83f10829fa64a74e6b7360350cb upstream.

Since the d_off in the first dirent for "." (that originates from
the 4th argument "offset" of filldir() for the 2nd dirent for "..")
is wrongly assigned in btrfs_real_readdir(), telldir returns same
offset for different locations.

 | # mkfs.btrfs /dev/sdb1
 | # mount /dev/sdb1 fs0
 | # cd fs0
 | # touch file0 file1
 | # ../test
 | telldir: 0
 | readdir: d_off = 2, d_name = "."
 | telldir: 2
 | readdir: d_off = 2, d_name = ".."
 | telldir: 2
 | readdir: d_off = 3, d_name = "file0"
 | telldir: 3
 | readdir: d_off = 2147483647, d_name = "file1"
 | telldir: 2147483647

To fix this problem, pass filp->f_pos (which is loff_t) instead.

 | # ../test
 | telldir: 0
 | readdir: d_off = 1, d_name = "."
 | telldir: 1
 | readdir: d_off = 2, d_name = ".."
 | telldir: 2
 | readdir: d_off = 3, d_name = "file0"
 :

At the moment the "offset" for "." is unused because there is no
preceding dirent, however it is better to pass filp->f_pos to follow
grammatical usage.

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Cc: Grazvydas Ignotas <notasas@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-10-03 11:41:03 -07:00
..
2011-05-28 07:00:39 -04:00
2008-09-25 11:04:06 -04:00
2011-06-04 08:11:22 -04:00
2011-10-03 11:41:03 -07:00
2011-05-26 17:52:15 -04:00
2010-12-22 23:15:47 +08:00
2011-05-06 12:34:03 +02:00
2011-05-06 12:34:03 +02:00
2011-05-06 12:34:03 +02:00
2011-05-06 12:34:03 +02:00
2011-06-17 14:54:18 -04:00
2011-05-28 07:00:39 -04:00
2011-08-29 13:29:09 -07:00
2011-05-28 07:00:39 -04:00