lkml.org 
[lkml]   [2008]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 06/10] udf: truncate: create function for updating of Allocation Ext Descriptor
    Date
    From
    Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
    Cc: Jan Kara <jack@suse.cz>
    ---
    fs/udf/truncate.c | 56 +++++++++++++++++++++-------------------------------
    1 files changed, 23 insertions(+), 33 deletions(-)

    diff --git a/fs/udf/truncate.c b/fs/udf/truncate.c
    index f64f827..eb98616 100644
    --- a/fs/udf/truncate.c
    +++ b/fs/udf/truncate.c
    @@ -180,6 +180,24 @@ void udf_discard_prealloc(struct inode *inode)
    brelse(epos.bh);
    }

    +static void udf_update_alloc_ext_desc(struct inode *inode,
    + struct extent_position *epos,
    + u32 lenalloc)
    +{
    + struct super_block *sb = inode->i_sb;
    + struct udf_sb_info *sbi = UDF_SB(sb);
    +
    + struct allocExtDesc *aed = (struct allocExtDesc *) (epos->bh->b_data);
    + int len = sizeof(struct allocExtDesc);
    +
    + aed->lengthAllocDescs = cpu_to_le32(lenalloc);
    + if (!UDF_QUERY_FLAG(sb, UDF_FLAG_STRICT) || sbi->s_udfrev >= 0x0201)
    + len += lenalloc;
    +
    + udf_update_tag(epos->bh->b_data, len);
    + mark_buffer_dirty_inode(epos->bh, inode);
    +}
    +
    void udf_truncate_extents(struct inode *inode)
    {
    struct extent_position epos;
    @@ -187,7 +205,6 @@ void udf_truncate_extents(struct inode *inode)
    uint32_t elen, nelen = 0, indirect_ext_len = 0, lenalloc;
    int8_t etype;
    struct super_block *sb = inode->i_sb;
    - struct udf_sb_info *sbi = UDF_SB(sb);
    sector_t first_block = inode->i_size >> sb->s_blocksize_bits, offset;
    loff_t byte_offset;
    int adsize;
    @@ -230,24 +247,9 @@ void udf_truncate_extents(struct inode *inode)
    } else if (!epos.bh) {
    iinfo->i_lenAlloc = lenalloc;
    mark_inode_dirty(inode);
    - } else {
    - struct allocExtDesc *aed =
    - (struct allocExtDesc *)
    - (epos.bh->b_data);
    - int len = sizeof(struct allocExtDesc);
    -
    - aed->lengthAllocDescs =
    - cpu_to_le32(lenalloc);
    - if (!UDF_QUERY_FLAG(sb,
    - UDF_FLAG_STRICT) ||
    - sbi->s_udfrev >= 0x0201)
    - len += lenalloc;
    -
    - udf_update_tag(epos.bh->b_data,
    - len);
    - mark_buffer_dirty_inode(
    - epos.bh, inode);
    - }
    + } else
    + udf_update_alloc_ext_desc(inode,
    + &epos, lenalloc);
    brelse(epos.bh);
    epos.offset = sizeof(struct allocExtDesc);
    epos.block = eloc;
    @@ -273,20 +275,8 @@ void udf_truncate_extents(struct inode *inode)
    } else if (!epos.bh) {
    iinfo->i_lenAlloc = lenalloc;
    mark_inode_dirty(inode);
    - } else {
    - struct allocExtDesc *aed =
    - (struct allocExtDesc *)(epos.bh->b_data);
    - aed->lengthAllocDescs = cpu_to_le32(lenalloc);
    - if (!UDF_QUERY_FLAG(sb, UDF_FLAG_STRICT) ||
    - sbi->s_udfrev >= 0x0201)
    - udf_update_tag(epos.bh->b_data,
    - lenalloc +
    - sizeof(struct allocExtDesc));
    - else
    - udf_update_tag(epos.bh->b_data,
    - sizeof(struct allocExtDesc));
    - mark_buffer_dirty_inode(epos.bh, inode);
    - }
    + } else
    + udf_update_alloc_ext_desc(inode, &epos, lenalloc);
    } else if (inode->i_size) {
    if (byte_offset) {
    kernel_long_ad extent;
    --
    1.5.3.7


    \
     
     \ /
      Last update: 2008-01-30 22:23    [W:0.029 / U:59.756 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site