15 Dec, 2009

3 commits

  • It is not very good to do IO in udf_clear_inode. First, VFS does not really
    expect inode to become dirty there and thus we have to write it ourselves,
    second, memory reclaim gets blocked waiting for IO when it does not really
    expect it, third, the IO pattern (e.g. on umount) resulting from writes in
    udf_clear_inode is bad and it slows down writing a lot.

    The reason why UDF needed to do IO in udf_clear_inode is that UDF standard
    mandates extent length to exactly match inode size. But when we allocate
    extents to a file or directory, we don't really know what exactly the final
    file size will be and thus temporarily set it to block boundary and later
    truncate it to exact length in udf_clear_inode. Now, this is changed to
    truncate to final file size in udf_release_file for regular files. For
    directories and symlinks, we do the truncation at the moment when learn
    what the final file size will be.

    Signed-off-by: Jan Kara

    Jan Kara
     
  • Some disks do not contain VAT inode in the last recorded block as required
    by the standard but a few blocks earlier (or the number of recorded blocks
    is wrong). So look for the VAT inode a bit before the end of the media.

    Signed-off-by: Jan Kara

    Jan Kara
     
  • Signed-off-by: Jan Kara

    Jan Kara
     

15 Sep, 2009

4 commits

  • 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

    Jan Kara
     
  • 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

    Jan Kara
     
  • 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

    Jan Kara
     
  • Remove code that gets never used.

    Signed-off-by: Jan Kara

    Jan Kara
     

30 Jul, 2009

1 commit


24 Jun, 2009

1 commit


18 Jun, 2009

1 commit


12 Jun, 2009

3 commits

  • Signed-off-by: Al Viro

    Al Viro
     
  • [xfs, btrfs, capifs, shmem don't need BKL, exempt]

    Signed-off-by: Alessio Igor Bogani
    Signed-off-by: Al Viro

    Alessio Igor Bogani
     
  • 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
    Signed-off-by: Al Viro

    Christoph Hellwig
     

23 May, 2009

1 commit

  • 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
    Signed-off-by: Jens Axboe

    Martin K. Petersen
     

02 Apr, 2009

16 commits

  • 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 .

    Signed-off-by: Jan Kara

    Jan Kara
     
  • 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

    Jan Kara
     
  • 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

    Jan Kara
     
  • 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
    Signed-off-by: Jan Kara

    Clemens Ladisch
     
  • The novrs mount option was broken due to a missing break.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Jan Kara

    Clemens Ladisch
     
  • 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

    Jan Kara
     
  • This patch makes udf return f_fsid info for statfs(2).

    Signed-off-by: Coly Li
    Cc: Jan Kara
    Signed-off-by: Jan Kara

    Coly Li
     
  • Signed-off-by: Jan Kara

    Jan Kara
     
  • 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
    Signed-off-by: Marcin Slusarz
    Signed-off-by: Jan Kara

    Marcin Slusarz
     
  • 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
    Signed-off-by: Jan Kara

    Jan Kara
     
  • unsigned last[i] cannot be less than 0

    Signed-off-by: Roel Kluin
    Signed-off-by: Jan Kara

    roel kluin
     
  • "dmode" allows overriding permissions of directories and
    "mode" allows overriding permissions of files.

    Signed-off-by: Marcin Slusarz
    Cc: Jan Kara
    Signed-off-by: Jan Kara

    Marcin Slusarz
     
  • Allocate strings with kmalloc.

    Checkstack output:
    Before: udf_get_filename: 600
    After: udf_get_filename: 136

    Signed-off-by: Marcin Slusarz
    Cc: Jan Kara
    Signed-off-by: Jan Kara

    Marcin Slusarz
     
  • Allocate strings with kmalloc.

    Checkstack output:
    Before: udf_process_sequence: 712
    After: udf_process_sequence: 200

    Signed-off-by: Marcin Slusarz
    Signed-off-by: Jan Kara

    Marcin Slusarz
     
  • Signed-off-by: Pekka Enberg
    Signed-off-by: Jan Kara

    Pekka Enberg
     
  • Signed-off-by: Pekka Enberg
    Signed-off-by: Jan Kara

    Pekka Enberg
     

26 Mar, 2009

1 commit


22 Jan, 2009

1 commit


04 Dec, 2008

1 commit


28 Nov, 2008

1 commit

  • 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

    Jan Kara
     

14 Nov, 2008

1 commit

  • 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
    Reviewed-by: James Morris
    Acked-by: Serge Hallyn
    Acked-by: Jan Kara
    Signed-off-by: James Morris

    David Howells
     

23 Oct, 2008

2 commits


14 Oct, 2008

1 commit

  • 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
    Cc: Alexander Viro
    Signed-off-by: Linus Torvalds

    Steven Whitehouse
     

09 Sep, 2008

1 commit

  • 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
    Signed-off-by: Jan Kara

    Christoph Hellwig
     

19 Aug, 2008

1 commit

  • 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 ). Also remove a few superfluous
    initializations already done in udf_alloc_inode().

    Reviewed-by: Ingo Oeser
    Signed-off-by: Jan Kara

    Jan Kara