linux/fs/udf
jan Blunck ca572727db fs/: do not fallback to default_llseek() when readdir() uses BKL
Do not use the fallback default_llseek() if the readdir operation of the
filesystem still uses the big kernel lock.

Since llseek() modifies
file->f_pos of the directory directly it may need locking to not confuse
readdir which usually uses file->f_pos directly as well

Since the special characteristics of the BKL (unlocked on schedule) are
not necessary in this case, the inode mutex can be used for locking as
provided by generic_file_llseek().  This is only possible since all
filesystems, except reiserfs, either use a directory as a flat file or
with disk address offsets.  Reiserfs on the other hand uses a 32bit hash
off the filename as the offset so generic_file_llseek() can get used as
well since the hash is always smaller than sb->s_maxbytes (= (512 << 32) -
blocksize).

Signed-off-by: Jan Blunck <jblunck@suse.de>
Acked-by: Jan Kara <jack@suse.cz>
Acked-by: Anders Larsen <al@alarsen.net>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-05-27 09:12:56 -07:00
..
Kconfig fs/Kconfig: move iso9660, udf out 2009-01-22 13:15:55 +03:00
Makefile switch udf to simple_fsync() 2009-06-11 21:36:13 -04:00
balloc.c udf: potential integer overflow 2010-04-08 15:35:20 +02:00
dir.c fs/: do not fallback to default_llseek() when readdir() uses BKL 2010-05-27 09:12:56 -07:00
directory.c udf: Remove dead code 2009-09-14 19:13:00 +02:00
ecma_167.h Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
file.c Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6 2010-05-21 11:17:43 -07:00
ialloc.c udf: replace inode uid,gid,mode init with helper 2010-05-21 18:31:27 -04:00
inode.c udf: add speciffic ->setattr callback 2010-04-08 15:35:20 +02:00
lowlevel.c udf: Remove dead code 2009-09-14 19:13:00 +02:00
misc.c Fix the udf code not to pass structs on stack where possible. 2009-04-02 12:29:47 +02:00
namei.c udf: replace inode uid,gid,mode init with helper 2010-05-21 18:31:27 -04:00
osta_udf.h Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
partition.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
super.c udf: Try harder when looking for VAT inode 2009-12-14 21:40:04 +01:00
symlink.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
truncate.c Fix the udf code not to pass structs on stack where possible. 2009-04-02 12:29:47 +02:00
udf_i.h Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
udf_sb.h udf: Don't write integrity descriptor too often 2009-04-02 13:36:28 +02:00
udfdecl.h udf: BKL ioctl pushdown 2010-05-05 16:36:17 +02:00
udfend.h Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
udftime.c Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
unicode.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00