1. 28 12月, 2012 2 次提交
    • J
      f2fs: clean up unused variables and return values · 2b50638d
      Jaegeuk Kim 提交于
      This patch cleans up a couple of unnecessary codes related to unused variables
      and return values.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      2b50638d
    • J
      f2fs: invalidate the node page if allocation is failed · 71e9fec5
      Jaegeuk Kim 提交于
      The new_node_page() is processed as the following procedure.
      
      1. A new node page is allocated.
      2. Set PageUptodate with proper footer information.
      3. Check if there is a free space for allocation
       4.a. If there is no space, f2fs returns with -ENOSPC.
       4.b. Otherwise, go next.
      
      In the case of step #4.a, f2fs remains a wrong node page in the page cache
      with the uptodate flag.
      
      Also, even though a new node page is allocated successfully, an error can be
      occurred afterwards due to allocation failure of the other data structures.
      In such a case, remove_inode_page() would be triggered, so that we have to
      clear uptodate flag in truncate_node() too.
      
      So, we should remove the uptodate flag, if allocation is failed.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      71e9fec5
  2. 26 12月, 2012 1 次提交
    • J
      f2fs: fix handling errors got by f2fs_write_inode · 398b1ac5
      Jaegeuk Kim 提交于
      Ruslan reported that f2fs hangs with an infinite loop in f2fs_sync_file():
      
      	while (sync_node_pages(sbi, inode->i_ino, &wbc) == 0)
      		f2fs_write_inode(inode, NULL);
      
      The reason was revealed that the cold flag is not set even thought this inode is
      a normal file. Therefore, sync_node_pages() skips to write node blocks since it
      only writes cold node blocks.
      
      The cold flag is stored to the node_footer in node block, and whenever a new
      node page is allocated, it is set according to its file type, file or directory.
      
      But, after sudden-power-off, when recovering the inode page, f2fs doesn't recover
      its cold flag.
      
      So, let's assign the cold flag in more right places.
      
      One more thing:
      If f2fs_write_inode() returns an error due to whatever situations, there would
      be no dirty node pages so that sync_node_pages() returns zero.
      (i.e., zero means nothing was written.)
      Reported-by: NRuslan N. Marchenko <me@ruff.mobi>
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      398b1ac5
  3. 11 12月, 2012 4 次提交
    • N
      f2fs: fix the compiler warning for uninitialized use of variable · be4124f8
      Namjae Jeon 提交于
      When CONFIG_CC_OPTIMIZE_FOR_SIZE is enabled in the kernel, -Os optimisation
      flag is passed to gcc for compilation, and somehow while trying to optimize
      the code, compiler is might not able to see the initialisation of variable
      ne struct variable inside the get_node_info() function and results into
      following warning:
      
      fs/f2fs/node.c: In function 'get_node_info':
      fs/f2fs/node.c:175:3: warning: 'ne.block_addr' may be used uninitialized in
      this function [-Wuninitialized]
      fs/f2fs/node.c:265:24: note: 'ne.block_addr' was declared here
      fs/f2fs/node.c:176:3: warning: 'ne.ino' may be used uninitialized in this
      function [-Wuninitialized]
      fs/f2fs/node.c:265:24: note: 'ne.ino' was declared here
      fs/f2fs/node.c:177:3: warning: 'ne.version' may be used uninitialized in
      this function [-Wuninitialized]
      fs/f2fs/node.c:265:24: note: 'ne.version' was declared here
      
      Hence, lets initialise the ne struct variable to zero, which will remove
      this warning and also doing this does not seems to making any impact on the
      code behavior.
      Signed-off-by: NNamjae Jeon <namjae.jeon@samsung.com>
      Signed-off-by: NPankaj Kumar <pankaj.km@samsung.com>
      be4124f8
    • J
      f2fs: adjust kernel coding style · 0a8165d7
      Jaegeuk Kim 提交于
      As pointed out by Randy Dunlap, this patch removes all usage of "/**" for comment
      blocks. Instead, just use "/*".
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      0a8165d7
    • J
      f2fs: fix endian conversion bugs reported by sparse · 25ca923b
      Jaegeuk Kim 提交于
      This patch should resolve the bugs reported by the sparse tool.
      Initial reports were written by "kbuild test robot" managed by fengguang.wu.
      
      In my local machines, I've tested also by running:
      > make C=2 CF="-D__CHECK_ENDIAN__"
      
      Accordingly, I've found lots of warnings and bugs related to the endian
      conversion. And I've fixed all at this moment.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      25ca923b
    • J
      f2fs: add node operations · e05df3b1
      Jaegeuk Kim 提交于
      This adds specific functions to manage NAT pages, a cache for NAT entries, free
      nids, direct/indirect node blocks for indexing data, and address space for node
      pages.
      
      - The key information of an NAT entry consists of a node id and a block address.
      
      - An NAT page is composed of block addresses covered by a certain range of NAT
        entries, which is maintained by the address space of meta_inode.
      
      - A radix tree structure is used to cache NAT entries. The index for the tree
        is a node id.
      
      - When there is no free nid, F2FS should scan NAT entries to find new one. In
        order to avoid scanning frequently, F2FS manages a list containing a number of
        free nids in memory. Only when free nids in the list are exhausted, scanning
        process, build_free_nids(), is triggered.
      
      - F2FS has direct and indirect node blocks for indexing data. This patch adds
        fuctions related to the node block management such as getting, allocating, and
        truncating node blocks to index data.
      
      - In order to cache node blocks in memory, F2FS has a node_inode with an address
        space for node pages. This patch also adds the address space operations for
        node_inode.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      e05df3b1