aboutsummaryrefslogtreecommitdiff
path: root/fs/udf
AgeCommit message (Collapse)AuthorFilesLines
2009-12-14udf: Fix compilation with UDFFS_DEBUG enabledJan Kara1-1/+1
Signed-off-by: Jan Kara <[email protected]>
2009-09-14udf: Fix possible corruption when close races with writeJan Kara1-0/+2
When we close a file, we remove preallocated blocks from it. But this truncation was not protected by i_mutex and thus it could have raced with a write through a different fd and cause crashes or even filesystem corruption. Signed-off-by: Jan Kara <[email protected]>
2009-09-14udf: Perform preallocation only for regular filesJan Kara1-9/+10
So far we preallocated blocks also for directories but that brings a problem, when to get rid of preallocated blocks we don't need. So far we removed them in udf_clear_inode() which has a disadvantage that 1) blocks are unavailable long after writing to a directory finished and thus one can get out of space unnecessarily early 2) releasing blocks from udf_clear_inode is problematic because VFS does not expect us to redirty inode there and it also slows down memory reclaim. So preallocate blocks only for regular files where we can drop preallocation in udf_release_file. Signed-off-by: Jan Kara <[email protected]>
2009-09-14udf: Remove wrong assignment in udf_symlinkJan Kara1-1/+0
Recomputation of the pointer was wrong (it should have been just increment). Luckily, we never use the computed value. Remove it. Signed-off-by: Jan Kara <[email protected]>
2009-09-14udf: Remove dead codeJan Kara2-90/+0
Remove code that gets never used. Signed-off-by: Jan Kara <[email protected]>
2009-07-30udf: Fix loading of VAT inode when drive wrongly reports number of recorded ↵Jan Kara1-0/+12
blocks VAT inode is located in the last block recorded block of the medium. When the drive errorneously reports number of recorded blocks, we failed to load the VAT inode and thus mount the medium. This patch makes kernel try to read VAT inode from the last block of the device if it is different from the last recorded block. Signed-off-by: Jan Kara <[email protected]>
2009-06-24udf: remove redundant tests on unsignedRoel Kluin1-5/+4
first_block and goal are unsigned. When negative they are wrapped and caught by the other test. Signed-off-by: Roel Kluin <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-06-18udf: Use device size when drive reported bogus number of written blocksJan Kara1-1/+6
Some drives report 0 as the number of written blocks when there are some blocks recorded. Use device size in such case so that we can automagically mount such media. Signed-off-by: Jan Kara <[email protected]>
2009-06-11switch udf to simple_fsync()Al Viro5-58/+3
Signed-off-by: Al Viro <[email protected]>
2009-06-11Push BKL down into ->remount_fs()Alessio Igor Bogani1-1/+5
[xfs, btrfs, capifs, shmem don't need BKL, exempt] Signed-off-by: Alessio Igor Bogani <[email protected]> Signed-off-by: Al Viro <[email protected]>
2009-06-11push BKL down into ->put_superChristoph Hellwig1-0/+5
Move BKL into ->put_super from the only caller. A couple of filesystems had trivial enough ->put_super (only kfree and NULLing of s_fs_info + stuff in there) to not get any locking: coda, cramfs, efs, hugetlbfs, omfs, qnx4, shmem, all others got the full treatment. Most of them probably don't need it, but I'd rather sort that out individually. Preferably after all the other BKL pushdowns in that area. [AV: original used to move lock_super() down as well; these changes are removed since we don't do lock_super() at all in generic_shutdown_super() now] [AV: fuse, btrfs and xfs are known to need no damn BKL, exempt] Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Al Viro <[email protected]>
2009-05-22block: Do away with the notion of hardsect_sizeMartin K. Petersen1-1/+1
Until now we have had a 1:1 mapping between storage device physical block size and the logical block sized used when addressing the device. With SATA 4KB drives coming out that will no longer be the case. The sector size will be 4KB but the logical block size will remain 512-bytes. Hence we need to distinguish between the physical block size and the logical ditto. This patch renames hardsect_size to logical_block_size. Signed-off-by: Martin K. Petersen <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
2009-04-02udf: Don't write integrity descriptor too oftenJan Kara5-47/+52
We update information in logical volume integrity descriptor after each allocation (as LVID contains free space, number of directories and files on disk etc.). If the filesystem is on some phase change media, this leads to its quick degradation as such media is able to handle only 10000 overwrites or so. We solve the problem by writing new information into LVID only on umount, remount-ro and sync. This solves the problem at the price of longer media inconsistency (previously media became consistent after pdflush flushed dirty LVID buffer) but that should be acceptable. Report by and patch written in cooperation with Rich Coe <[email protected]>. Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: Try anchor in block 256 firstJan Kara2-248/+186
Anchor block can be located at several places on the medium. Two of the locations are relative to media end which is problematic to detect. Also some drives report some block as last but are not able to read it or any block nearby before it. So let's first try block 256 and if it is all fine, don't look at other possible locations of anchor blocks to avoid IO errors. This change required a larger reorganization of code but the new code is hopefully more readable and definitely shorter. Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: Some type fixes and cleanupsJan Kara1-6/+4
Make udf_check_valid() return 1 if the validity check passed and 0 otherwise. So far it was the other way around which was a bit confusing. Also make udf_vrs() return loff_t which is really the type it should return (not int). Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: use hardware sector sizeClemens Ladisch2-21/+50
This patch makes the UDF FS driver use the hardware sector size as the default logical block size, which is required by the UDF specifications. While the previous default of 2048 bytes was correct for optical disks, it was not for hard disks or USB storage devices, and made it impossible to use such a device with the default mount options. (The Linux mkudffs tool uses a default block size of 2048 bytes even on devices with smaller hardware sectors, so this bug is unlikely to be noticed unless UDF-formatted USB storage devices are exchanged with other OSs.) To avoid regressions for people who use loopback optical disk images or who used the (sometimes wrong) defaults of mkudffs, we also try with a block size of 2048 bytes if no anchor was found with the hardware sector size. Signed-off-by: Clemens Ladisch <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: fix novrs mount optionClemens Ladisch1-0/+1
The novrs mount option was broken due to a missing break. Signed-off-by: Clemens Ladisch <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: Fix oops when invalid character in filename occursJan Kara1-5/+16
Functions udf_CS0toNLS() and udf_NLStoCS0() didn't count with the fact that NLS can return negative length when invalid character is given to it for conversion. Thus interesting things could happen (such as overwriting random memory with the rest of filename). Add appropriate checks. Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: return f_fsid for statfs(2)Coly Li1-1/+3
This patch makes udf return f_fsid info for statfs(2). Signed-off-by: Coly Li <[email protected]> Cc: Jan Kara <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: Add checks to not underflow sector_tJan Kara1-8/+13
Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: fix default mode and dmode options handlingMarcin Slusarz3-6/+8
On x86 (and several other archs) mode_t is defined as "unsigned short" and comparing unsigned shorts to negative ints is broken (because short is promoted to int and then compared). Fix it. Reported-and-tested-by: Laurent Riffard <[email protected]> Signed-off-by: Marcin Slusarz <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: fix sparse warnings:Jan Kara1-14/+8
Fix sparse warnings: fs/udf/balloc.c:843:3: warning: returning void-valued expression fs/udf/balloc.c:847:3: warning: returning void-valued expression fs/udf/balloc.c:851:3: warning: returning void-valued expression fs/udf/balloc.c:855:3: warning: returning void-valued expression Reported-by: Hannes Eder <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: unsigned last[i] cannot be less than 0roel kluin1-2/+0
unsigned last[i] cannot be less than 0 Signed-off-by: Roel Kluin <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: implement mode and dmode mounting optionsMarcin Slusarz3-3/+41
"dmode" allows overriding permissions of directories and "mode" allows overriding permissions of files. Signed-off-by: Marcin Slusarz <[email protected]> Cc: Jan Kara <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: reduce stack usage of udf_get_filenameMarcin Slusarz1-16/+25
Allocate strings with kmalloc. Checkstack output: Before: udf_get_filename: 600 After: udf_get_filename: 136 Signed-off-by: Marcin Slusarz <[email protected]> Cc: Jan Kara <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02udf: reduce stack usage of udf_load_pvoldescMarcin Slusarz1-11/+25
Allocate strings with kmalloc. Checkstack output: Before: udf_process_sequence: 712 After: udf_process_sequence: 200 Signed-off-by: Marcin Slusarz <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02Fix the udf code not to pass structs on stack where possible.Pekka Enberg10-116/+130
Signed-off-by: Pekka Enberg <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-04-02Remove struct typedefs from fs/udf/ecma_167.h et al.Pekka Enberg15-442/+444
Signed-off-by: Pekka Enberg <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2009-03-26udf: Use lowercase names of quota functionsJan Kara2-11/+11
Use lowercase names of quota functions instead of old uppercase ones. Signed-off-by: Jan Kara <[email protected]>
2009-01-22fs/Kconfig: move iso9660, udf outAlexey Dobriyan1-0/+18
Signed-off-by: Alexey Dobriyan <[email protected]>
2008-12-04Merge branch 'master' into nextJames Morris1-0/+1
Conflicts: fs/nfsd/nfs4recover.c Manually fixed above to use new creds API functions, e.g. nfs4_save_creds(). Signed-off-by: James Morris <[email protected]>
2008-11-27udf: Fix BUG_ON() in destroy_inode()Jan Kara1-0/+1
udf_clear_inode() can leave behind buffers on mapping's i_private list (when we truncated preallocation). Call invalidate_inode_buffers() so that the list is properly cleaned-up before we return from udf_clear_inode(). This is ugly and suggest that we should cleanup preallocation earlier than in clear_inode() but currently there's no such call available since drop_inode() is called under inode lock and thus is unusable for disk operations. Signed-off-by: Jan Kara <[email protected]>
2008-11-14CRED: Wrap task credential accesses in the UDF filesystemDavid Howells2-3/+3
Wrap access to task credentials so that they can be separated more easily from the task_struct during the introduction of COW creds. Change most current->(|e|s|fs)[ug]id to current_(|e|s|fs)[ug]id(). Change some task->e?[ug]id to task_e?[ug]id(). In some places it makes more sense to use RCU directly rather than a convenient wrapper; these will be addressed by later patches. Signed-off-by: David Howells <[email protected]> Reviewed-by: James Morris <[email protected]> Acked-by: Serge Hallyn <[email protected]> Acked-by: Jan Kara <[email protected]> Signed-off-by: James Morris <[email protected]>
2008-10-23[PATCH] get rid of on-stack dentry in udfAl Viro1-15/+11
Signed-off-by: Al Viro <[email protected]>
2008-10-23[PATCH] switch all filesystems over to d_obtain_aliasChristoph Hellwig1-15/+2
Switch all users of d_alloc_anon to d_obtain_alias. Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Al Viro <[email protected]>
2008-10-13vfs: Use const for kernel parser tableSteven Whitehouse1-1/+1
This is a much better version of a previous patch to make the parser tables constant. Rather than changing the typedef, we put the "const" in all the various places where its required, allowing the __initconst exception for nfsroot which was the cause of the previous trouble. This was posted for review some time ago and I believe its been in -mm since then. Signed-off-by: Steven Whitehouse <[email protected]> Cc: Alexander Viro <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
2008-09-08udf: add llseek methodChristoph Hellwig1-0/+1
UDF currently doesn't set a llseek method for regular files, which means it will fall back to default_llseek. This means no one can seek beyond 2 Gigabytes on udf, and that there's not protection vs the i_size updates from writers. Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-08-19udf: Fix error paths in udf_new_inode()Jan Kara1-23/+18
I case we failed to allocate memory for inode when creating it, we did not properly free block already allocated for this inode. Move memory allocation before the block allocation which fixes this issue (thanks for the idea go to Ingo Oeser <[email protected]>). Also remove a few superfluous initializations already done in udf_alloc_inode(). Reviewed-by: Ingo Oeser <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-08-19udf: Fix lock inversion between iprune_mutex and alloc_mutex (v2)Jan Kara1-2/+1
A memory allocation inside alloc_mutex must not recurse back into the filesystem itself because that leads to lock inversion between iprune_mutex and alloc_mutex (and thus to deadlocks - see traces below). alloc_mutex is actually needed only to update allocation statistics in the superblock so we can drop it before we start allocating memory for the inode. tar D ffff81015b9c8c90 0 6614 6612 ffff8100d5a21a20 0000000000000086 0000000000000000 00000000ffff0000 ffff81015b9c8c90 ffff81015b8f0cd0 ffff81015b9c8ee0 0000000000000000 0000000000000003 0000000000000000 0000000000000000 0000000000000000 Call Trace: [<ffffffff803c1d8a>] __mutex_lock_slowpath+0x64/0x9b [<ffffffff803c1bef>] mutex_lock+0xa/0xb [<ffffffff8027f8c2>] shrink_icache_memory+0x38/0x200 [<ffffffff80257742>] shrink_slab+0xe3/0x15b [<ffffffff802579db>] try_to_free_pages+0x221/0x30d [<ffffffff8025657e>] isolate_pages_global+0x0/0x31 [<ffffffff8025324b>] __alloc_pages_internal+0x252/0x3ab [<ffffffff8026b08b>] cache_alloc_refill+0x22e/0x47b [<ffffffff8026ae37>] kmem_cache_alloc+0x3b/0x61 [<ffffffff8026b15b>] cache_alloc_refill+0x2fe/0x47b [<ffffffff8026b34e>] __kmalloc+0x76/0x9c [<ffffffffa00751f2>] :udf:udf_new_inode+0x202/0x2e2 [<ffffffffa007ae5e>] :udf:udf_create+0x2f/0x16d [<ffffffffa0078f27>] :udf:udf_lookup+0xa6/0xad ... kswapd0 D ffff81015b9d9270 0 125 2 ffff81015b903c28 0000000000000046 ffffffff8028cbb0 00000000fffffffb ffff81015b9d9270 ffff81015b8f0cd0 ffff81015b9d94c0 000000000271b490 ffffe2000271b458 ffffe2000271b420 ffffe20002728dc8 ffffe20002728d90 Call Trace: [<ffffffff8028cbb0>] __set_page_dirty+0xeb/0xf5 [<ffffffff8025403a>] get_dirty_limits+0x1d/0x22f [<ffffffff803c1d8a>] __mutex_lock_slowpath+0x64/0x9b [<ffffffff803c1bef>] mutex_lock+0xa/0xb [<ffffffffa0073f58>] :udf:udf_bitmap_free_blocks+0x47/0x1eb [<ffffffffa007df31>] :udf:udf_discard_prealloc+0xc6/0x172 [<ffffffffa007875a>] :udf:udf_clear_inode+0x1e/0x48 [<ffffffff8027f121>] clear_inode+0x6d/0xc4 [<ffffffff8027f7f2>] dispose_list+0x56/0xee [<ffffffff8027fa5a>] shrink_icache_memory+0x1d0/0x200 [<ffffffff80257742>] shrink_slab+0xe3/0x15b [<ffffffff80257e93>] kswapd+0x346/0x447 ... Reported-by: Tibor Tajti <[email protected]> Reviewed-by: Ingo Oeser <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-07-26SL*B: drop kmem cache argument from constructorAlexey Dobriyan1-1/+1
Kmem cache passed to constructor is only needed for constructors that are themselves multiplexeres. Nobody uses this "feature", nor does anybody uses passed kmem cache in non-trivial way, so pass only pointer to object. Non-trivial places are: arch/powerpc/mm/init_64.c arch/powerpc/mm/hugetlbpage.c This is flag day, yes. Signed-off-by: Alexey Dobriyan <[email protected]> Acked-by: Pekka Enberg <[email protected]> Acked-by: Christoph Lameter <[email protected]> Cc: Jon Tollefson <[email protected]> Cc: Nick Piggin <[email protected]> Cc: Matt Mackall <[email protected]> [[email protected]: fix arch/powerpc/mm/hugetlbpage.c] [[email protected]: fix mm/slab.c] [[email protected]: fix ubifs] Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
2008-06-24udf: Fix regression in UDF anchor block detectionTomas Janousek1-34/+23
In some cases it could happen that some block passed test in udf_check_anchor_block() even though udf_read_tagged() refused to read it later (e.g. because checksum was not correct). This patch makes udf_check_anchor_block() use udf_read_tagged() so that the checking is stricter. This fixes the regression (certain disks unmountable) caused by commit 423cf6dc04eb79d441bfda2b127bc4b57134b41d. Signed-off-by: Tomas Janousek <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-06-16udf: restore UDFFS_DEBUG to being undefined by defaultPaul Collins1-1/+1
Commit 706047a79725b585cf272fdefc234b31b6545c72, "udf: Fix compilation warnings when UDF debug is on" inadvertently (I assume) enabled debugging messages by default for UDF. This patch disables them again. Signed-off-by: Paul Collins <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-05-08Merge branch 'for_linus' of ↵Linus Torvalds4-6/+145
git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6 * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6: udf: Fix memory corruption when fs mounted with noadinicb option udf: Make udf exportable udf: fs/udf/partition.c:udf_get_pblock() mustn't be inline
2008-05-07udf: Fix memory corruption when fs mounted with noadinicb optionJan Kara1-2/+3
When UDF filesystem is mounted with noadinicb mount option, it happens that we extend an empty directory with a block. A code in udf_add_entry() didn't count with this possibility and used uninitialized data leading to memory and filesystem corruption. Add a check whether file already has some extents before operating on them. Signed-off-by: Jan Kara <[email protected]>
2008-05-07udf: Make udf exportableRasmus Rohde3-2/+140
Cc: Christoph Hellwig <[email protected]> Signed-off-by: Rasmus Rohde <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-04-30fs: replace remaining __FUNCTION__ occurrencesHarvey Harrison1-2/+2
__FUNCTION__ is gcc-specific, use __func__ Signed-off-by: Harvey Harrison <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
2008-04-28udf: fs/udf/partition.c:udf_get_pblock() mustn't be inlineAdrian Bunk1-2/+2
This patch fixes the following build error with UML and gcc 4.3: <-- snip --> ... CC fs/udf/partition.o /home/bunk/linux/kernel-2.6/git/linux-2.6/fs/udf/partition.c: In function ‘udf_get_pblock_virt15’: /home/bunk/linux/kernel-2.6/git/linux-2.6/fs/udf/partition.c:32: sorry, unimplemented: inlining failed in call to ‘udf_get_pblock’: function body not available /home/bunk/linux/kernel-2.6/git/linux-2.6/fs/udf/partition.c:102: sorry, unimplemented: called from here make[3]: *** [fs/udf/partition.o] Error 1 <-- snip --> Signed-off-by: Adrian Bunk <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-04-28udf: fix sparse warning in namei.cHarvey Harrison1-4/+4
Let's use bsize instead. fs/udf/namei.c:960:12: warning: symbol 'elen' shadows an earlier one fs/udf/namei.c:937:15: originally declared here Signed-off-by: Harvey Harrison <[email protected]> Cc: Jan Kara <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
2008-04-17udf: use crc_itu_t from lib instead of udf_crcBob Copeland8-203/+31
As pointed out by Sergey Vlasov, UDF implements its own version of the CRC ITU-T V.41. Convert it to use the one in the library. Signed-off-by: Bob Copeland <[email protected]> Cc: Sergey Vlasov <[email protected]> Signed-off-by: Jan Kara <[email protected]>
2008-04-17udf: Fix compilation warnings when UDF debug is onSebastian Manciulea2-4/+5
Fix two compilation warnings (and actual bugs in message formatting) when UDF debugging is turned on. Signed-off-by: Sebastian Manciulea <[email protected]> Signed-off-by: Jan Kara <[email protected]>