RE: [f2fs-dev] [PATCH 2/5 V2] f2fs: add unlikely() macro for compiler optimization

2013-12-05 Thread Chao Yu
Hi,

> -Original Message-
> From: Jaegeuk Kim [mailto:jaegeuk@samsung.com]
> Sent: Friday, December 06, 2013 12:12 PM
> To: Chao Yu
> Cc: linux-fsde...@vger.kernel.org; linux-kernel@vger.kernel.org; 
> linux-f2fs-de...@lists.sourceforge.net; 谭姝
> Subject: Re: [f2fs-dev] [PATCH 2/5 V2] f2fs: add unlikely() macro for 
> compiler optimization
> 
> Hi,
> 
> Just in case, if you agreed the following comments, I'll fix those and
> merge the patch by myself.
> Thanks,

Agreed, thanks.

> 
> 2013-12-05 (목), 17:15 +0800, Chao Yu:
> > As we know, some of our branch condition will rarely be true. So we could 
> > add
> > 'unlikely' to let compiler optimize these code, by this way we could drop
> > unneeded 'jump' assemble code to improve performance.
> >
> > change log:
> >  o add *unlikely* as many as possible across the whole source files at once
> >suggested by Jaegeuk Kim.
> >
> > Suggested-by: Jaegeuk Kim 
> > Signed-off-by: Chao Yu 
> > ---
> >  fs/f2fs/checkpoint.c |   10 +-
> >  fs/f2fs/data.c   |4 ++--
> >  fs/f2fs/dir.c|4 ++--
> >  fs/f2fs/f2fs.h   |8 
> >  fs/f2fs/node.c   |   16 
> >  fs/f2fs/segment.h|2 +-
> >  6 files changed, 22 insertions(+), 22 deletions(-)
> >
> > diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> > index 38f4a224..6580808 100644
> > --- a/fs/f2fs/checkpoint.c
> > +++ b/fs/f2fs/checkpoint.c
> > @@ -82,8 +82,8 @@ static int f2fs_write_meta_page(struct page *page,
> > struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
> >
> > /* Should not write any meta pages, if any IO error was occurred */
> > -   if (wbc->for_reclaim || sbi->por_doing ||
> > -   is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG)) {
> > +   if (unlikely(wbc->for_reclaim || sbi->por_doing ||
> > +   is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG))) {
> 
>   if (unlikely(sbi->por_doing || is_set_ckpt_flags(F2FS_CKPT(sbi),
> CP_ERROR_FLAG)))
>   goto redirty_out;
>   if (wbc->for_reclaim)
>   goto redirty_out;
> 
> redirty_out:
> > dec_page_count(sbi, F2FS_DIRTY_META);
> > wbc->pages_skipped++;
> > set_page_dirty(page);
> > @@ -137,7 +137,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
> > page_type type,
> > nr_pages = pagevec_lookup_tag(, mapping, ,
> > PAGECACHE_TAG_DIRTY,
> > min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
> > -   if (nr_pages == 0)
> > +   if (unlikely(nr_pages == 0))
> > break;
> >
> > for (i = 0; i < nr_pages; i++) {
> > @@ -150,7 +150,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
> > page_type type,
> > unlock_page(page);
> > break;
> > }
> > -   if (nwritten++ >= nr_to_write)
> > +   if (unlikely(nwritten++ >= nr_to_write))
> 
> nwritten++;
> 
> if (unlikely(nwritten >= nr_to_write))
> 
> 
> > break;
> > }
> > pagevec_release();
> > @@ -200,7 +200,7 @@ int acquire_orphan_inode(struct f2fs_sb_info *sbi)
> > max_orphans = (sbi->blocks_per_seg - 2 - NR_CURSEG_TYPE)
> > * F2FS_ORPHANS_PER_BLOCK;
> > mutex_lock(>orphan_inode_mutex);
> > -   if (sbi->n_orphans >= max_orphans)
> > +   if (unlikely(sbi->n_orphans >= max_orphans))
> > err = -ENOSPC;
> > else
> > sbi->n_orphans++;
> > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> > index 4e2fc09..2ce5a9e 100644
> > --- a/fs/f2fs/data.c
> > +++ b/fs/f2fs/data.c
> > @@ -251,7 +251,7 @@ int reserve_new_block(struct dnode_of_data *dn)
> >
> > if (is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))
> > return -EPERM;
> > -   if (!inc_valid_block_count(sbi, dn->inode, 1))
> > +   if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1)))
> > return -ENOSPC;
> >
> > trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node);
> > @@ -711,7 +711,7 @@ static int f2fs_write_data_page(struct page *page,
> >
> > zero_user_segment(page, offset, PAGE_CACHE_SIZE);
> >  write:
> > -   if (sbi->por_doing)

Re: [f2fs-dev] [PATCH 2/5 V2] f2fs: add unlikely() macro for compiler optimization

2013-12-05 Thread Jaegeuk Kim
Hi,

Just in case, if you agreed the following comments, I'll fix those and
merge the patch by myself.
Thanks,

2013-12-05 (목), 17:15 +0800, Chao Yu:
> As we know, some of our branch condition will rarely be true. So we could add
> 'unlikely' to let compiler optimize these code, by this way we could drop
> unneeded 'jump' assemble code to improve performance.
> 
> change log:
>  o add *unlikely* as many as possible across the whole source files at once
>suggested by Jaegeuk Kim.
> 
> Suggested-by: Jaegeuk Kim 
> Signed-off-by: Chao Yu 
> ---
>  fs/f2fs/checkpoint.c |   10 +-
>  fs/f2fs/data.c   |4 ++--
>  fs/f2fs/dir.c|4 ++--
>  fs/f2fs/f2fs.h   |8 
>  fs/f2fs/node.c   |   16 
>  fs/f2fs/segment.h|2 +-
>  6 files changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> index 38f4a224..6580808 100644
> --- a/fs/f2fs/checkpoint.c
> +++ b/fs/f2fs/checkpoint.c
> @@ -82,8 +82,8 @@ static int f2fs_write_meta_page(struct page *page,
>   struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
>  
>   /* Should not write any meta pages, if any IO error was occurred */
> - if (wbc->for_reclaim || sbi->por_doing ||
> - is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG)) {
> + if (unlikely(wbc->for_reclaim || sbi->por_doing ||
> + is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG))) {

if (unlikely(sbi->por_doing || is_set_ckpt_flags(F2FS_CKPT(sbi),
CP_ERROR_FLAG)))
goto redirty_out;
if (wbc->for_reclaim)
goto redirty_out;

redirty_out:
>   dec_page_count(sbi, F2FS_DIRTY_META);
>   wbc->pages_skipped++;
>   set_page_dirty(page);
> @@ -137,7 +137,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
> page_type type,
>   nr_pages = pagevec_lookup_tag(, mapping, ,
>   PAGECACHE_TAG_DIRTY,
>   min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
> - if (nr_pages == 0)
> + if (unlikely(nr_pages == 0))
>   break;
>  
>   for (i = 0; i < nr_pages; i++) {
> @@ -150,7 +150,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
> page_type type,
>   unlock_page(page);
>   break;
>   }
> - if (nwritten++ >= nr_to_write)
> + if (unlikely(nwritten++ >= nr_to_write))

nwritten++;

if (unlikely(nwritten >= nr_to_write))


>   break;
>   }
>   pagevec_release();
> @@ -200,7 +200,7 @@ int acquire_orphan_inode(struct f2fs_sb_info *sbi)
>   max_orphans = (sbi->blocks_per_seg - 2 - NR_CURSEG_TYPE)
>   * F2FS_ORPHANS_PER_BLOCK;
>   mutex_lock(>orphan_inode_mutex);
> - if (sbi->n_orphans >= max_orphans)
> + if (unlikely(sbi->n_orphans >= max_orphans))
>   err = -ENOSPC;
>   else
>   sbi->n_orphans++;
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 4e2fc09..2ce5a9e 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -251,7 +251,7 @@ int reserve_new_block(struct dnode_of_data *dn)
>  
>   if (is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))
>   return -EPERM;
> - if (!inc_valid_block_count(sbi, dn->inode, 1))
> + if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1)))
>   return -ENOSPC;
>  
>   trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node);
> @@ -711,7 +711,7 @@ static int f2fs_write_data_page(struct page *page,
>  
>   zero_user_segment(page, offset, PAGE_CACHE_SIZE);
>  write:
> - if (sbi->por_doing) {
> + if (unlikely(sbi->por_doing)) {
>   err = AOP_WRITEPAGE_ACTIVATE;
>   goto redirty_out;
>   }
> diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
> index 594fc1b..0cc26ba 100644
> --- a/fs/f2fs/dir.c
> +++ b/fs/f2fs/dir.c
> @@ -190,7 +190,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
>   unsigned int max_depth;
>   unsigned int level;
>  
> - if (namelen > F2FS_NAME_LEN)
> + if (unlikely(namelen > F2FS_NAME_LEN))
>   return NULL;
>  
>   if (npages == 0)
> @@ -461,7 +461,7 @@ int __f2fs_add_link(struct inode *dir, const struct qstr 
> *name, struct inode *in
>   }
>  
>  start:
> - if (current_depth == MAX_DIR_HASH_DEPTH)
> + if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
>   return -ENOSPC;
>  
>   /* Increase the depth, if required */
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 10eca02..dca18b3 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -574,7 +574,7 @@ static inline void f2fs_unlock_all(struct f2fs_sb_info 
> *sbi)
>  static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
>  {
>   

Re: [f2fs-dev] [PATCH 2/5 V2] f2fs: add unlikely() macro for compiler optimization

2013-12-05 Thread Jaegeuk Kim
Hi,

Just in case, if you agreed the following comments, I'll fix those and
merge the patch by myself.
Thanks,

2013-12-05 (목), 17:15 +0800, Chao Yu:
 As we know, some of our branch condition will rarely be true. So we could add
 'unlikely' to let compiler optimize these code, by this way we could drop
 unneeded 'jump' assemble code to improve performance.
 
 change log:
  o add *unlikely* as many as possible across the whole source files at once
suggested by Jaegeuk Kim.
 
 Suggested-by: Jaegeuk Kim jaegeuk@samsung.com
 Signed-off-by: Chao Yu chao2...@samsung.com
 ---
  fs/f2fs/checkpoint.c |   10 +-
  fs/f2fs/data.c   |4 ++--
  fs/f2fs/dir.c|4 ++--
  fs/f2fs/f2fs.h   |8 
  fs/f2fs/node.c   |   16 
  fs/f2fs/segment.h|2 +-
  6 files changed, 22 insertions(+), 22 deletions(-)
 
 diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
 index 38f4a224..6580808 100644
 --- a/fs/f2fs/checkpoint.c
 +++ b/fs/f2fs/checkpoint.c
 @@ -82,8 +82,8 @@ static int f2fs_write_meta_page(struct page *page,
   struct f2fs_sb_info *sbi = F2FS_SB(inode-i_sb);
  
   /* Should not write any meta pages, if any IO error was occurred */
 - if (wbc-for_reclaim || sbi-por_doing ||
 - is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG)) {
 + if (unlikely(wbc-for_reclaim || sbi-por_doing ||
 + is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG))) {

if (unlikely(sbi-por_doing || is_set_ckpt_flags(F2FS_CKPT(sbi),
CP_ERROR_FLAG)))
goto redirty_out;
if (wbc-for_reclaim)
goto redirty_out;

redirty_out:
   dec_page_count(sbi, F2FS_DIRTY_META);
   wbc-pages_skipped++;
   set_page_dirty(page);
 @@ -137,7 +137,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
 page_type type,
   nr_pages = pagevec_lookup_tag(pvec, mapping, index,
   PAGECACHE_TAG_DIRTY,
   min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
 - if (nr_pages == 0)
 + if (unlikely(nr_pages == 0))
   break;
  
   for (i = 0; i  nr_pages; i++) {
 @@ -150,7 +150,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
 page_type type,
   unlock_page(page);
   break;
   }
 - if (nwritten++ = nr_to_write)
 + if (unlikely(nwritten++ = nr_to_write))

nwritten++;

if (unlikely(nwritten = nr_to_write))


   break;
   }
   pagevec_release(pvec);
 @@ -200,7 +200,7 @@ int acquire_orphan_inode(struct f2fs_sb_info *sbi)
   max_orphans = (sbi-blocks_per_seg - 2 - NR_CURSEG_TYPE)
   * F2FS_ORPHANS_PER_BLOCK;
   mutex_lock(sbi-orphan_inode_mutex);
 - if (sbi-n_orphans = max_orphans)
 + if (unlikely(sbi-n_orphans = max_orphans))
   err = -ENOSPC;
   else
   sbi-n_orphans++;
 diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
 index 4e2fc09..2ce5a9e 100644
 --- a/fs/f2fs/data.c
 +++ b/fs/f2fs/data.c
 @@ -251,7 +251,7 @@ int reserve_new_block(struct dnode_of_data *dn)
  
   if (is_inode_flag_set(F2FS_I(dn-inode), FI_NO_ALLOC))
   return -EPERM;
 - if (!inc_valid_block_count(sbi, dn-inode, 1))
 + if (unlikely(!inc_valid_block_count(sbi, dn-inode, 1)))
   return -ENOSPC;
  
   trace_f2fs_reserve_new_block(dn-inode, dn-nid, dn-ofs_in_node);
 @@ -711,7 +711,7 @@ static int f2fs_write_data_page(struct page *page,
  
   zero_user_segment(page, offset, PAGE_CACHE_SIZE);
  write:
 - if (sbi-por_doing) {
 + if (unlikely(sbi-por_doing)) {
   err = AOP_WRITEPAGE_ACTIVATE;
   goto redirty_out;
   }
 diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
 index 594fc1b..0cc26ba 100644
 --- a/fs/f2fs/dir.c
 +++ b/fs/f2fs/dir.c
 @@ -190,7 +190,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
   unsigned int max_depth;
   unsigned int level;
  
 - if (namelen  F2FS_NAME_LEN)
 + if (unlikely(namelen  F2FS_NAME_LEN))
   return NULL;
  
   if (npages == 0)
 @@ -461,7 +461,7 @@ int __f2fs_add_link(struct inode *dir, const struct qstr 
 *name, struct inode *in
   }
  
  start:
 - if (current_depth == MAX_DIR_HASH_DEPTH)
 + if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
   return -ENOSPC;
  
   /* Increase the depth, if required */
 diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
 index 10eca02..dca18b3 100644
 --- a/fs/f2fs/f2fs.h
 +++ b/fs/f2fs/f2fs.h
 @@ -574,7 +574,7 @@ static inline void f2fs_unlock_all(struct f2fs_sb_info 
 *sbi)
  static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
  {
   WARN_ON((nid = NM_I(sbi)-max_nid));
 - if (nid = NM_I(sbi)-max_nid)
 + if (unlikely(nid 

RE: [f2fs-dev] [PATCH 2/5 V2] f2fs: add unlikely() macro for compiler optimization

2013-12-05 Thread Chao Yu
Hi,

 -Original Message-
 From: Jaegeuk Kim [mailto:jaegeuk@samsung.com]
 Sent: Friday, December 06, 2013 12:12 PM
 To: Chao Yu
 Cc: linux-fsde...@vger.kernel.org; linux-kernel@vger.kernel.org; 
 linux-f2fs-de...@lists.sourceforge.net; 谭姝
 Subject: Re: [f2fs-dev] [PATCH 2/5 V2] f2fs: add unlikely() macro for 
 compiler optimization
 
 Hi,
 
 Just in case, if you agreed the following comments, I'll fix those and
 merge the patch by myself.
 Thanks,

Agreed, thanks.

 
 2013-12-05 (목), 17:15 +0800, Chao Yu:
  As we know, some of our branch condition will rarely be true. So we could 
  add
  'unlikely' to let compiler optimize these code, by this way we could drop
  unneeded 'jump' assemble code to improve performance.
 
  change log:
   o add *unlikely* as many as possible across the whole source files at once
 suggested by Jaegeuk Kim.
 
  Suggested-by: Jaegeuk Kim jaegeuk@samsung.com
  Signed-off-by: Chao Yu chao2...@samsung.com
  ---
   fs/f2fs/checkpoint.c |   10 +-
   fs/f2fs/data.c   |4 ++--
   fs/f2fs/dir.c|4 ++--
   fs/f2fs/f2fs.h   |8 
   fs/f2fs/node.c   |   16 
   fs/f2fs/segment.h|2 +-
   6 files changed, 22 insertions(+), 22 deletions(-)
 
  diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
  index 38f4a224..6580808 100644
  --- a/fs/f2fs/checkpoint.c
  +++ b/fs/f2fs/checkpoint.c
  @@ -82,8 +82,8 @@ static int f2fs_write_meta_page(struct page *page,
  struct f2fs_sb_info *sbi = F2FS_SB(inode-i_sb);
 
  /* Should not write any meta pages, if any IO error was occurred */
  -   if (wbc-for_reclaim || sbi-por_doing ||
  -   is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG)) {
  +   if (unlikely(wbc-for_reclaim || sbi-por_doing ||
  +   is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ERROR_FLAG))) {
 
   if (unlikely(sbi-por_doing || is_set_ckpt_flags(F2FS_CKPT(sbi),
 CP_ERROR_FLAG)))
   goto redirty_out;
   if (wbc-for_reclaim)
   goto redirty_out;
 
 redirty_out:
  dec_page_count(sbi, F2FS_DIRTY_META);
  wbc-pages_skipped++;
  set_page_dirty(page);
  @@ -137,7 +137,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
  page_type type,
  nr_pages = pagevec_lookup_tag(pvec, mapping, index,
  PAGECACHE_TAG_DIRTY,
  min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
  -   if (nr_pages == 0)
  +   if (unlikely(nr_pages == 0))
  break;
 
  for (i = 0; i  nr_pages; i++) {
  @@ -150,7 +150,7 @@ long sync_meta_pages(struct f2fs_sb_info *sbi, enum 
  page_type type,
  unlock_page(page);
  break;
  }
  -   if (nwritten++ = nr_to_write)
  +   if (unlikely(nwritten++ = nr_to_write))
 
 nwritten++;
 
 if (unlikely(nwritten = nr_to_write))
 
 
  break;
  }
  pagevec_release(pvec);
  @@ -200,7 +200,7 @@ int acquire_orphan_inode(struct f2fs_sb_info *sbi)
  max_orphans = (sbi-blocks_per_seg - 2 - NR_CURSEG_TYPE)
  * F2FS_ORPHANS_PER_BLOCK;
  mutex_lock(sbi-orphan_inode_mutex);
  -   if (sbi-n_orphans = max_orphans)
  +   if (unlikely(sbi-n_orphans = max_orphans))
  err = -ENOSPC;
  else
  sbi-n_orphans++;
  diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
  index 4e2fc09..2ce5a9e 100644
  --- a/fs/f2fs/data.c
  +++ b/fs/f2fs/data.c
  @@ -251,7 +251,7 @@ int reserve_new_block(struct dnode_of_data *dn)
 
  if (is_inode_flag_set(F2FS_I(dn-inode), FI_NO_ALLOC))
  return -EPERM;
  -   if (!inc_valid_block_count(sbi, dn-inode, 1))
  +   if (unlikely(!inc_valid_block_count(sbi, dn-inode, 1)))
  return -ENOSPC;
 
  trace_f2fs_reserve_new_block(dn-inode, dn-nid, dn-ofs_in_node);
  @@ -711,7 +711,7 @@ static int f2fs_write_data_page(struct page *page,
 
  zero_user_segment(page, offset, PAGE_CACHE_SIZE);
   write:
  -   if (sbi-por_doing) {
  +   if (unlikely(sbi-por_doing)) {
  err = AOP_WRITEPAGE_ACTIVATE;
  goto redirty_out;
  }
  diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
  index 594fc1b..0cc26ba 100644
  --- a/fs/f2fs/dir.c
  +++ b/fs/f2fs/dir.c
  @@ -190,7 +190,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode 
  *dir,
  unsigned int max_depth;
  unsigned int level;
 
  -   if (namelen  F2FS_NAME_LEN)
  +   if (unlikely(namelen  F2FS_NAME_LEN))
  return NULL;
 
  if (npages == 0)
  @@ -461,7 +461,7 @@ int __f2fs_add_link(struct inode *dir, const struct 
  qstr *name, struct inode *in
  }
 
   start:
  -   if (current_depth == MAX_DIR_HASH_DEPTH)
  +   if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
  return -ENOSPC;
 
  /* Increase the depth, if required */
  diff --git a/fs/f2fs