]> Git Repo - J-linux.git/commitdiff
Merge tag 'exfat-for-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkin...
authorLinus Torvalds <[email protected]>
Fri, 16 Dec 2022 02:14:21 +0000 (18:14 -0800)
committerLinus Torvalds <[email protected]>
Fri, 16 Dec 2022 02:14:21 +0000 (18:14 -0800)
Pull exfat update from Namjae Jeon:

 - simplify and remove some redundant directory entry code

 - optimize the size of exfat_entry_set_cache and its allocation policy

 - improve the performance for creating files and directories

* tag 'exfat-for-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat:
  exfat: reuse exfat_find_location() to simplify exfat_get_dentry_set()
  exfat: fix overflow in sector and cluster conversion
  exfat: remove i_size_write() from __exfat_truncate()
  exfat: remove argument 'size' from exfat_truncate()
  exfat: remove unnecessary arguments from exfat_find_dir_entry()
  exfat: remove unneeded codes from __exfat_rename()
  exfat: remove call ilog2() from exfat_readdir()
  exfat: replace magic numbers with Macros
  exfat: rename exfat_free_dentry_set() to exfat_put_dentry_set()
  exfat: move exfat_entry_set_cache from heap to stack
  exfat: support dynamic allocate bh for exfat_entry_set_cache
  exfat: reduce the size of exfat_entry_set_cache
  exfat: hint the empty entry which at the end of cluster chain
  exfat: simplify empty entry hint

1  2 
fs/exfat/inode.c

diff --combined fs/exfat/inode.c
index eac95bcd9a8aae94fcb96d06ee8d16f132213956,95adc4b2e436bf7206e1379565ac28044f755300..5b644cb057fa8060bf5c136dfc2071f31b66ec29
@@@ -21,7 -21,7 +21,7 @@@ int __exfat_write_inode(struct inode *i
  {
        unsigned long long on_disk_size;
        struct exfat_dentry *ep, *ep2;
-       struct exfat_entry_set_cache *es = NULL;
+       struct exfat_entry_set_cache es;
        struct super_block *sb = inode->i_sb;
        struct exfat_sb_info *sbi = EXFAT_SB(sb);
        struct exfat_inode_info *ei = EXFAT_I(inode);
        exfat_set_volume_dirty(sb);
  
        /* get the directory entry of given file or directory */
-       es = exfat_get_dentry_set(sb, &(ei->dir), ei->entry, ES_ALL_ENTRIES);
-       if (!es)
+       if (exfat_get_dentry_set(&es, sb, &(ei->dir), ei->entry, ES_ALL_ENTRIES))
                return -EIO;
-       ep = exfat_get_dentry_cached(es, 0);
-       ep2 = exfat_get_dentry_cached(es, 1);
+       ep = exfat_get_dentry_cached(&es, ES_IDX_FILE);
+       ep2 = exfat_get_dentry_cached(&es, ES_IDX_STREAM);
  
        ep->dentry.file.attr = cpu_to_le16(exfat_make_attr(inode));
  
@@@ -83,8 -82,8 +82,8 @@@
                ep2->dentry.stream.start_clu = EXFAT_FREE_CLUSTER;
        }
  
-       exfat_update_dir_chksum_with_entry_set(es);
-       return exfat_free_dentry_set(es, sync);
+       exfat_update_dir_chksum_with_entry_set(&es);
+       return exfat_put_dentry_set(&es, sync);
  }
  
  int exfat_write_inode(struct inode *inode, struct writeback_control *wbc)
@@@ -345,6 -344,11 +344,6 @@@ static void exfat_readahead(struct read
        mpage_readahead(rac, exfat_get_block);
  }
  
 -static int exfat_writepage(struct page *page, struct writeback_control *wbc)
 -{
 -      return block_write_full_page(page, exfat_get_block, wbc);
 -}
 -
  static int exfat_writepages(struct address_space *mapping,
                struct writeback_control *wbc)
  {
@@@ -358,7 -362,7 +357,7 @@@ static void exfat_write_failed(struct a
        if (to > i_size_read(inode)) {
                truncate_pagecache(inode, i_size_read(inode));
                inode->i_mtime = inode->i_ctime = current_time(inode);
-               exfat_truncate(inode, EXFAT_I(inode)->i_size_aligned);
+               exfat_truncate(inode);
        }
  }
  
@@@ -468,12 -472,12 +467,12 @@@ static const struct address_space_opera
        .invalidate_folio = block_invalidate_folio,
        .read_folio     = exfat_read_folio,
        .readahead      = exfat_readahead,
 -      .writepage      = exfat_writepage,
        .writepages     = exfat_writepages,
        .write_begin    = exfat_write_begin,
        .write_end      = exfat_write_end,
        .direct_IO      = exfat_direct_IO,
 -      .bmap           = exfat_aop_bmap
 +      .bmap           = exfat_aop_bmap,
 +      .migrate_folio  = buffer_migrate_folio,
  };
  
  static inline unsigned long exfat_hash(loff_t i_pos)
@@@ -622,7 -626,7 +621,7 @@@ void exfat_evict_inode(struct inode *in
        if (!inode->i_nlink) {
                i_size_write(inode, 0);
                mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
-               __exfat_truncate(inode, 0);
+               __exfat_truncate(inode);
                mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
        }
  
This page took 0.055329 seconds and 4 git commands to generate.