2013-11-10 23:13:19 +08:00
|
|
|
/*
|
|
|
|
* fs/f2fs/inline.c
|
|
|
|
* Copyright (c) 2013, Intel Corporation
|
|
|
|
* Authors: Huajun Li <huajun.li@intel.com>
|
|
|
|
* Haicheng Li <haicheng.li@intel.com>
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/fs.h>
|
|
|
|
#include <linux/f2fs_fs.h>
|
|
|
|
|
|
|
|
#include "f2fs.h"
|
2015-10-15 11:34:49 -07:00
|
|
|
#include "node.h"
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2015-04-23 10:27:21 -07:00
|
|
|
bool f2fs_may_inline_data(struct inode *inode)
|
2013-11-10 23:13:19 +08:00
|
|
|
{
|
2014-10-06 17:39:50 -07:00
|
|
|
if (f2fs_is_atomic_file(inode))
|
|
|
|
return false;
|
|
|
|
|
2015-03-19 13:23:48 +08:00
|
|
|
if (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode))
|
2013-11-10 23:13:19 +08:00
|
|
|
return false;
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
if (i_size_read(inode) > MAX_INLINE_DATA(inode))
|
2014-11-11 14:10:01 -08:00
|
|
|
return false;
|
|
|
|
|
f2fs: refactor read path to allow multiple postprocessing steps
Currently f2fs's ->readpage() and ->readpages() assume that either the
data undergoes no postprocessing, or decryption only. But with
fs-verity, there will be an additional authenticity verification step,
and it may be needed either by itself, or combined with decryption.
To support this, store a 'struct bio_post_read_ctx' in ->bi_private
which contains a work struct, a bitmask of postprocessing steps that are
enabled, and an indicator of the current step. The bio completion
routine, if there was no I/O error, enqueues the first postprocessing
step. When that completes, it continues to the next step. Pages that
fail any postprocessing step have PageError set. Once all steps have
completed, pages without PageError set are set Uptodate, and all pages
are unlocked.
Also replace f2fs_encrypted_file() with a new function
f2fs_post_read_required() in places like direct I/O and garbage
collection that really should be testing whether the file needs special
I/O processing, not whether it is encrypted specifically.
This may also be useful for other future f2fs features such as
compression.
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-04-18 11:09:48 -07:00
|
|
|
if (f2fs_post_read_required(inode))
|
2015-04-21 20:39:58 -07:00
|
|
|
return false;
|
|
|
|
|
2013-11-10 23:13:19 +08:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-04-23 10:27:21 -07:00
|
|
|
bool f2fs_may_inline_dentry(struct inode *inode)
|
|
|
|
{
|
|
|
|
if (!test_opt(F2FS_I_SB(inode), INLINE_DENTRY))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if (!S_ISDIR(inode->i_mode))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
void f2fs_do_read_inline_data(struct page *page, struct page *ipage)
|
2013-11-10 23:13:19 +08:00
|
|
|
{
|
2017-07-19 00:19:05 +08:00
|
|
|
struct inode *inode = page->mapping->host;
|
2013-11-10 23:13:19 +08:00
|
|
|
void *src_addr, *dst_addr;
|
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
if (PageUptodate(page))
|
|
|
|
return;
|
2013-12-30 18:36:23 +08:00
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
f2fs_bug_on(F2FS_P_SB(page), page->index);
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
zero_user_segment(page, MAX_INLINE_DATA(inode), PAGE_SIZE);
|
2013-11-10 23:13:19 +08:00
|
|
|
|
|
|
|
/* Copy the whole inline data block */
|
2017-07-19 00:19:05 +08:00
|
|
|
src_addr = inline_data_addr(inode, ipage);
|
2014-10-18 23:41:38 -07:00
|
|
|
dst_addr = kmap_atomic(page);
|
2017-07-19 00:19:05 +08:00
|
|
|
memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
|
2014-10-26 22:59:27 -07:00
|
|
|
flush_dcache_page(page);
|
2014-10-18 23:41:38 -07:00
|
|
|
kunmap_atomic(dst_addr);
|
2016-10-12 17:18:56 -07:00
|
|
|
if (!PageUptodate(page))
|
|
|
|
SetPageUptodate(page);
|
2014-10-23 19:48:09 -07:00
|
|
|
}
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
void f2fs_truncate_inline_inode(struct inode *inode,
|
|
|
|
struct page *ipage, u64 from)
|
2015-01-26 20:22:55 +08:00
|
|
|
{
|
2015-03-10 13:16:25 +08:00
|
|
|
void *addr;
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
if (from >= MAX_INLINE_DATA(inode))
|
2017-03-10 20:43:20 +08:00
|
|
|
return;
|
2015-03-10 13:16:25 +08:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
addr = inline_data_addr(inode, ipage);
|
2015-03-10 13:16:25 +08:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_wait_on_page_writeback(ipage, NODE, true);
|
2017-07-19 00:19:05 +08:00
|
|
|
memset(addr + from, 0, MAX_INLINE_DATA(inode) - from);
|
2016-10-12 17:18:56 -07:00
|
|
|
set_page_dirty(ipage);
|
2017-03-10 20:43:20 +08:00
|
|
|
|
|
|
|
if (from == 0)
|
|
|
|
clear_inode_flag(inode, FI_DATA_EXIST);
|
2015-01-26 20:22:55 +08:00
|
|
|
}
|
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
int f2fs_read_inline_data(struct inode *inode, struct page *page)
|
|
|
|
{
|
|
|
|
struct page *ipage;
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
|
2014-10-23 19:48:09 -07:00
|
|
|
if (IS_ERR(ipage)) {
|
|
|
|
unlock_page(page);
|
|
|
|
return PTR_ERR(ipage);
|
|
|
|
}
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
if (!f2fs_has_inline_data(inode)) {
|
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
|
return -EAGAIN;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page->index)
|
2016-10-12 17:18:56 -07:00
|
|
|
zero_user_segment(page, 0, PAGE_SIZE);
|
2014-10-23 19:48:09 -07:00
|
|
|
else
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_do_read_inline_data(page, ipage);
|
2014-10-23 19:48:09 -07:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
if (!PageUptodate(page))
|
|
|
|
SetPageUptodate(page);
|
2014-10-23 19:48:09 -07:00
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
|
unlock_page(page);
|
2013-11-10 23:13:19 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
|
2013-11-10 23:13:19 +08:00
|
|
|
{
|
|
|
|
struct f2fs_io_info fio = {
|
2015-04-23 14:38:15 -07:00
|
|
|
.sbi = F2FS_I_SB(dn->inode),
|
2017-09-29 13:59:38 +08:00
|
|
|
.ino = dn->inode->i_ino,
|
2013-11-10 23:13:19 +08:00
|
|
|
.type = DATA,
|
2017-01-11 18:24:54 -08:00
|
|
|
.op = REQ_OP_WRITE,
|
|
|
|
.op_flags = REQ_SYNC | REQ_NOIDLE | REQ_PRIO,
|
2015-04-23 14:38:15 -07:00
|
|
|
.page = page,
|
2015-04-23 12:04:33 -07:00
|
|
|
.encrypted_page = NULL,
|
2017-08-02 23:21:48 +08:00
|
|
|
.io_type = FS_DATA_IO,
|
2013-11-10 23:13:19 +08:00
|
|
|
};
|
2014-11-25 11:34:02 -08:00
|
|
|
int dirty, err;
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
if (!f2fs_exist_data(dn->inode))
|
|
|
|
goto clear_out;
|
2014-08-18 14:41:11 -07:00
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
err = f2fs_reserve_block(dn, 0);
|
2014-04-16 14:22:50 +09:00
|
|
|
if (err)
|
2014-10-23 19:48:09 -07:00
|
|
|
return err;
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_bug_on(F2FS_P_SB(page), PageWriteback(page));
|
2014-10-23 19:48:09 -07:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_do_read_inline_data(page, dn->inode_page);
|
2015-07-25 00:29:17 -07:00
|
|
|
set_page_dirty(page);
|
|
|
|
|
2014-11-25 11:34:02 -08:00
|
|
|
/* clear dirty state */
|
|
|
|
dirty = clear_page_dirty_for_io(page);
|
|
|
|
|
2013-11-10 23:13:19 +08:00
|
|
|
/* write data page to try to make data consistent */
|
|
|
|
set_page_writeback(page);
|
2018-04-11 23:09:04 -07:00
|
|
|
ClearPageError(page);
|
2016-10-12 17:18:56 -07:00
|
|
|
fio.old_blkaddr = dn->data_blkaddr;
|
2017-03-24 20:05:13 -04:00
|
|
|
set_inode_flag(dn->inode, FI_HOT_DATA);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_outplace_write_data(dn, &fio);
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_wait_on_page_writeback(page, DATA, true);
|
2016-10-11 22:57:01 +08:00
|
|
|
if (dirty) {
|
2014-11-25 11:34:02 -08:00
|
|
|
inode_dec_dirty_pages(dn->inode);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_remove_dirty_inode(dn->inode);
|
2016-10-11 22:57:01 +08:00
|
|
|
}
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2014-11-25 17:27:38 -08:00
|
|
|
/* this converted inline_data should be recovered. */
|
2016-10-12 17:18:56 -07:00
|
|
|
set_inode_flag(dn->inode, FI_APPEND_WRITE);
|
2014-11-25 17:27:38 -08:00
|
|
|
|
2013-11-10 23:13:19 +08:00
|
|
|
/* clear inline data and flag after data writeback */
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_truncate_inline_inode(dn->inode, dn->inode_page, 0);
|
2016-10-12 17:18:56 -07:00
|
|
|
clear_inline_node(dn->inode_page);
|
2014-10-23 19:48:09 -07:00
|
|
|
clear_out:
|
|
|
|
stat_dec_inline_inode(dn->inode);
|
2017-03-10 20:43:20 +08:00
|
|
|
clear_inode_flag(dn->inode, FI_INLINE_DATA);
|
2014-10-23 19:48:09 -07:00
|
|
|
f2fs_put_dnode(dn);
|
|
|
|
return 0;
|
2013-11-10 23:13:19 +08:00
|
|
|
}
|
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
int f2fs_convert_inline_inode(struct inode *inode)
|
2013-11-10 23:13:19 +08:00
|
|
|
{
|
2014-10-23 19:48:09 -07:00
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
|
|
struct dnode_of_data dn;
|
|
|
|
struct page *ipage, *page;
|
|
|
|
int err = 0;
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
if (!f2fs_has_inline_data(inode))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
page = f2fs_grab_cache_page(inode->i_mapping, 0, false);
|
2014-10-23 19:48:09 -07:00
|
|
|
if (!page)
|
|
|
|
return -ENOMEM;
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
f2fs_lock_op(sbi);
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(sbi, inode->i_ino);
|
2014-10-23 19:48:09 -07:00
|
|
|
if (IS_ERR(ipage)) {
|
2014-11-17 16:06:55 -08:00
|
|
|
err = PTR_ERR(ipage);
|
|
|
|
goto out;
|
2014-08-07 16:32:25 -07:00
|
|
|
}
|
2013-11-10 23:13:19 +08:00
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
set_new_dnode(&dn, inode, ipage, ipage, 0);
|
|
|
|
|
|
|
|
if (f2fs_has_inline_data(inode))
|
|
|
|
err = f2fs_convert_inline_page(&dn, page);
|
|
|
|
|
|
|
|
f2fs_put_dnode(&dn);
|
2014-11-17 16:06:55 -08:00
|
|
|
out:
|
2014-10-23 19:48:09 -07:00
|
|
|
f2fs_unlock_op(sbi);
|
|
|
|
|
|
|
|
f2fs_put_page(page, 1);
|
2016-10-12 17:18:56 -07:00
|
|
|
|
|
|
|
f2fs_balance_fs(sbi, dn.node_changed);
|
|
|
|
|
2013-11-10 23:13:19 +08:00
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
int f2fs_write_inline_data(struct inode *inode, struct page *page)
|
2013-11-10 23:13:19 +08:00
|
|
|
{
|
|
|
|
void *src_addr, *dst_addr;
|
|
|
|
struct dnode_of_data dn;
|
|
|
|
int err;
|
|
|
|
|
|
|
|
set_new_dnode(&dn, inode, NULL, NULL, 0);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
err = f2fs_get_dnode_of_data(&dn, 0, LOOKUP_NODE);
|
2013-11-10 23:13:19 +08:00
|
|
|
if (err)
|
|
|
|
return err;
|
|
|
|
|
2014-10-15 10:16:54 -07:00
|
|
|
if (!f2fs_has_inline_data(inode)) {
|
2014-10-23 19:48:09 -07:00
|
|
|
f2fs_put_dnode(&dn);
|
|
|
|
return -EAGAIN;
|
2014-10-15 10:16:54 -07:00
|
|
|
}
|
|
|
|
|
2014-10-23 19:48:09 -07:00
|
|
|
f2fs_bug_on(F2FS_I_SB(inode), page->index);
|
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_wait_on_page_writeback(dn.inode_page, NODE, true);
|
2014-10-18 23:41:38 -07:00
|
|
|
src_addr = kmap_atomic(page);
|
2017-07-19 00:19:05 +08:00
|
|
|
dst_addr = inline_data_addr(inode, dn.inode_page);
|
|
|
|
memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
|
2014-10-18 23:41:38 -07:00
|
|
|
kunmap_atomic(src_addr);
|
2016-10-12 17:18:56 -07:00
|
|
|
set_page_dirty(dn.inode_page);
|
2013-11-10 23:13:19 +08:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_clear_radix_tree_dirty_tag(page);
|
2017-09-11 16:30:28 +09:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
set_inode_flag(inode, FI_APPEND_WRITE);
|
|
|
|
set_inode_flag(inode, FI_DATA_EXIST);
|
2014-10-23 19:48:09 -07:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
clear_inline_node(dn.inode_page);
|
2013-11-10 23:13:19 +08:00
|
|
|
f2fs_put_dnode(&dn);
|
|
|
|
return 0;
|
|
|
|
}
|
2013-12-26 12:49:48 +09:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
bool f2fs_recover_inline_data(struct inode *inode, struct page *npage)
|
2013-12-26 12:49:48 +09:00
|
|
|
{
|
2014-09-02 15:31:18 -07:00
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
2013-12-26 12:49:48 +09:00
|
|
|
struct f2fs_inode *ri = NULL;
|
|
|
|
void *src_addr, *dst_addr;
|
|
|
|
struct page *ipage;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The inline_data recovery policy is as follows.
|
|
|
|
* [prev.] [next] of inline_data flag
|
|
|
|
* o o -> recover inline_data
|
|
|
|
* o x -> remove inline_data, and then recover data blocks
|
|
|
|
* x o -> remove inline_data, and then recover inline_data
|
|
|
|
* x x -> recover data blocks
|
|
|
|
*/
|
|
|
|
if (IS_INODE(npage))
|
|
|
|
ri = F2FS_INODE(npage);
|
|
|
|
|
|
|
|
if (f2fs_has_inline_data(inode) &&
|
2014-08-07 16:57:17 -07:00
|
|
|
ri && (ri->i_inline & F2FS_INLINE_DATA)) {
|
2013-12-26 12:49:48 +09:00
|
|
|
process_inline:
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(sbi, inode->i_ino);
|
2014-09-02 15:52:58 -07:00
|
|
|
f2fs_bug_on(sbi, IS_ERR(ipage));
|
2013-12-26 12:49:48 +09:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_wait_on_page_writeback(ipage, NODE, true);
|
2014-04-29 17:28:32 +09:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
src_addr = inline_data_addr(inode, npage);
|
|
|
|
dst_addr = inline_data_addr(inode, ipage);
|
|
|
|
memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
|
2014-10-23 19:48:09 -07:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
set_inode_flag(inode, FI_INLINE_DATA);
|
|
|
|
set_inode_flag(inode, FI_DATA_EXIST);
|
2014-10-23 19:48:09 -07:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
set_page_dirty(ipage);
|
2013-12-26 12:49:48 +09:00
|
|
|
f2fs_put_page(ipage, 1);
|
2014-08-07 16:57:17 -07:00
|
|
|
return true;
|
2013-12-26 12:49:48 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
if (f2fs_has_inline_data(inode)) {
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(sbi, inode->i_ino);
|
2014-09-02 15:52:58 -07:00
|
|
|
f2fs_bug_on(sbi, IS_ERR(ipage));
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_truncate_inline_inode(inode, ipage, 0);
|
2017-03-10 20:43:20 +08:00
|
|
|
clear_inode_flag(inode, FI_INLINE_DATA);
|
2013-12-26 12:49:48 +09:00
|
|
|
f2fs_put_page(ipage, 1);
|
2014-08-07 16:57:17 -07:00
|
|
|
} else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
if (f2fs_truncate_blocks(inode, 0, false))
|
2015-09-21 18:55:49 -04:00
|
|
|
return false;
|
2013-12-26 12:49:48 +09:00
|
|
|
goto process_inline;
|
|
|
|
}
|
2014-08-07 16:57:17 -07:00
|
|
|
return false;
|
2013-12-26 12:49:48 +09:00
|
|
|
}
|
2014-09-24 18:17:53 +08:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
|
2016-10-12 17:18:56 -07:00
|
|
|
struct fscrypt_name *fname, struct page **res_page)
|
2014-09-24 18:17:53 +08:00
|
|
|
{
|
|
|
|
struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
|
2015-04-27 17:12:39 -07:00
|
|
|
struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
|
2014-09-24 18:17:53 +08:00
|
|
|
struct f2fs_dir_entry *de;
|
2014-10-18 22:52:52 -07:00
|
|
|
struct f2fs_dentry_ptr d;
|
2014-10-13 17:26:14 -07:00
|
|
|
struct page *ipage;
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry;
|
2015-04-27 17:12:39 -07:00
|
|
|
f2fs_hash_t namehash;
|
2014-09-24 18:17:53 +08:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(sbi, dir->i_ino);
|
2016-10-12 17:18:56 -07:00
|
|
|
if (IS_ERR(ipage)) {
|
|
|
|
*res_page = ipage;
|
2014-09-24 18:17:53 +08:00
|
|
|
return NULL;
|
2016-10-12 17:18:56 -07:00
|
|
|
}
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-04-24 10:00:08 -07:00
|
|
|
namehash = f2fs_dentry_hash(&name, fname);
|
2015-04-27 17:12:39 -07:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
inline_dentry = inline_data_addr(dir, ipage);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
make_dentry_ptr_inline(dir, &d, inline_dentry);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
de = f2fs_find_target_dentry(fname, namehash, NULL, &d);
|
2014-09-24 18:17:53 +08:00
|
|
|
unlock_page(ipage);
|
2014-10-13 17:26:14 -07:00
|
|
|
if (de)
|
|
|
|
*res_page = ipage;
|
|
|
|
else
|
|
|
|
f2fs_put_page(ipage, 0);
|
|
|
|
|
2014-09-24 18:17:53 +08:00
|
|
|
return de;
|
|
|
|
}
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
|
2014-09-24 18:17:53 +08:00
|
|
|
struct page *ipage)
|
|
|
|
{
|
2014-10-18 23:06:41 -07:00
|
|
|
struct f2fs_dentry_ptr d;
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry;
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
inline_dentry = inline_data_addr(inode, ipage);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
make_dentry_ptr_inline(inode, &d, inline_dentry);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_do_make_empty_dir(inode, parent, &d);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
|
|
|
set_page_dirty(ipage);
|
|
|
|
|
|
|
|
/* update i_size to MAX_INLINE_DATA */
|
2017-07-19 00:19:05 +08:00
|
|
|
if (i_size_read(inode) < MAX_INLINE_DATA(inode))
|
|
|
|
f2fs_i_size_write(inode, MAX_INLINE_DATA(inode));
|
2014-09-24 18:17:53 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2015-07-14 18:14:06 +08:00
|
|
|
/*
|
|
|
|
* NOTE: ipage is grabbed by caller, but if any error occurs, we should
|
|
|
|
* release ipage in this function.
|
|
|
|
*/
|
2016-10-12 17:18:56 -07:00
|
|
|
static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry)
|
2014-09-24 18:17:53 +08:00
|
|
|
{
|
|
|
|
struct page *page;
|
|
|
|
struct dnode_of_data dn;
|
|
|
|
struct f2fs_dentry_block *dentry_blk;
|
2017-07-16 15:08:54 +08:00
|
|
|
struct f2fs_dentry_ptr src, dst;
|
2014-09-24 18:17:53 +08:00
|
|
|
int err;
|
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
page = f2fs_grab_cache_page(dir->i_mapping, 0, false);
|
2015-07-14 18:14:06 +08:00
|
|
|
if (!page) {
|
|
|
|
f2fs_put_page(ipage, 1);
|
2014-09-24 18:17:53 +08:00
|
|
|
return -ENOMEM;
|
2015-07-14 18:14:06 +08:00
|
|
|
}
|
2014-09-24 18:17:53 +08:00
|
|
|
|
|
|
|
set_new_dnode(&dn, dir, ipage, NULL, 0);
|
|
|
|
err = f2fs_reserve_block(&dn, 0);
|
|
|
|
if (err)
|
|
|
|
goto out;
|
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_wait_on_page_writeback(page, DATA, true);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2018-02-28 20:31:52 +08:00
|
|
|
dentry_blk = page_address(page);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
make_dentry_ptr_inline(dir, &src, inline_dentry);
|
|
|
|
make_dentry_ptr_block(dir, &dst, dentry_blk);
|
2017-07-16 15:08:54 +08:00
|
|
|
|
2014-09-24 18:17:53 +08:00
|
|
|
/* copy data from inline dentry block to new dentry block */
|
2017-07-16 15:08:54 +08:00
|
|
|
memcpy(dst.bitmap, src.bitmap, src.nr_bitmap);
|
|
|
|
memset(dst.bitmap + src.nr_bitmap, 0, dst.nr_bitmap - src.nr_bitmap);
|
2015-08-24 17:36:25 +08:00
|
|
|
/*
|
|
|
|
* we do not need to zero out remainder part of dentry and filename
|
|
|
|
* field, since we have used bitmap for marking the usage status of
|
|
|
|
* them, besides, we can also ignore copying/zeroing reserved space
|
|
|
|
* of dentry block, because them haven't been used so far.
|
|
|
|
*/
|
2017-07-16 15:08:54 +08:00
|
|
|
memcpy(dst.dentry, src.dentry, SIZE_OF_DIR_ENTRY * src.max);
|
|
|
|
memcpy(dst.filename, src.filename, src.max * F2FS_SLOT_LEN);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
if (!PageUptodate(page))
|
|
|
|
SetPageUptodate(page);
|
2014-09-24 18:17:53 +08:00
|
|
|
set_page_dirty(page);
|
|
|
|
|
|
|
|
/* clear inline dir and flag after data writeback */
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_truncate_inline_inode(dir, ipage, 0);
|
2014-10-23 19:48:09 -07:00
|
|
|
|
2014-10-13 20:00:16 -07:00
|
|
|
stat_dec_inline_dir(dir);
|
2016-10-12 17:18:56 -07:00
|
|
|
clear_inode_flag(dir, FI_INLINE_DENTRY);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_i_depth_write(dir, 1);
|
|
|
|
if (i_size_read(dir) < PAGE_SIZE)
|
|
|
|
f2fs_i_size_write(dir, PAGE_SIZE);
|
2014-09-24 18:17:53 +08:00
|
|
|
out:
|
|
|
|
f2fs_put_page(page, 1);
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry)
|
2016-10-12 17:18:56 -07:00
|
|
|
{
|
|
|
|
struct f2fs_dentry_ptr d;
|
|
|
|
unsigned long bit_pos = 0;
|
|
|
|
int err = 0;
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
make_dentry_ptr_inline(dir, &d, inline_dentry);
|
2016-10-12 17:18:56 -07:00
|
|
|
|
|
|
|
while (bit_pos < d.max) {
|
|
|
|
struct f2fs_dir_entry *de;
|
|
|
|
struct qstr new_name;
|
|
|
|
nid_t ino;
|
|
|
|
umode_t fake_mode;
|
|
|
|
|
|
|
|
if (!test_bit_le(bit_pos, d.bitmap)) {
|
|
|
|
bit_pos++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
de = &d.dentry[bit_pos];
|
|
|
|
|
|
|
|
if (unlikely(!de->name_len)) {
|
|
|
|
bit_pos++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
new_name.name = d.filename[bit_pos];
|
2016-10-11 10:36:12 -07:00
|
|
|
new_name.len = le16_to_cpu(de->name_len);
|
2016-10-12 17:18:56 -07:00
|
|
|
|
|
|
|
ino = le32_to_cpu(de->ino);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
fake_mode = f2fs_get_de_type(de) << S_SHIFT;
|
2016-10-12 17:18:56 -07:00
|
|
|
|
|
|
|
err = f2fs_add_regular_entry(dir, &new_name, NULL, NULL,
|
|
|
|
ino, fake_mode);
|
|
|
|
if (err)
|
|
|
|
goto punch_dentry_pages;
|
|
|
|
|
|
|
|
bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
punch_dentry_pages:
|
|
|
|
truncate_inode_pages(&dir->i_data, 0);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_truncate_blocks(dir, 0, false);
|
|
|
|
f2fs_remove_dirty_inode(dir);
|
2016-10-12 17:18:56 -07:00
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry)
|
2016-10-12 17:18:56 -07:00
|
|
|
{
|
2017-07-19 00:19:05 +08:00
|
|
|
void *backup_dentry;
|
2016-10-12 17:18:56 -07:00
|
|
|
int err;
|
|
|
|
|
|
|
|
backup_dentry = f2fs_kmalloc(F2FS_I_SB(dir),
|
2017-07-19 00:19:05 +08:00
|
|
|
MAX_INLINE_DATA(dir), GFP_F2FS_ZERO);
|
2016-10-12 17:18:56 -07:00
|
|
|
if (!backup_dentry) {
|
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
|
return -ENOMEM;
|
|
|
|
}
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA(dir));
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_truncate_inline_inode(dir, ipage, 0);
|
2016-10-12 17:18:56 -07:00
|
|
|
|
|
|
|
unlock_page(ipage);
|
|
|
|
|
|
|
|
err = f2fs_add_inline_entries(dir, backup_dentry);
|
|
|
|
if (err)
|
|
|
|
goto recover;
|
|
|
|
|
|
|
|
lock_page(ipage);
|
|
|
|
|
|
|
|
stat_dec_inline_dir(dir);
|
|
|
|
clear_inode_flag(dir, FI_INLINE_DENTRY);
|
|
|
|
kfree(backup_dentry);
|
|
|
|
return 0;
|
|
|
|
recover:
|
|
|
|
lock_page(ipage);
|
2017-07-19 00:19:05 +08:00
|
|
|
memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA(dir));
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_i_depth_write(dir, 0);
|
2017-07-19 00:19:05 +08:00
|
|
|
f2fs_i_size_write(dir, MAX_INLINE_DATA(dir));
|
2016-10-12 17:18:56 -07:00
|
|
|
set_page_dirty(ipage);
|
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
|
|
|
|
|
kfree(backup_dentry);
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry)
|
2016-10-12 17:18:56 -07:00
|
|
|
{
|
|
|
|
if (!F2FS_I(dir)->i_dir_level)
|
|
|
|
return f2fs_move_inline_dirents(dir, ipage, inline_dentry);
|
|
|
|
else
|
|
|
|
return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry);
|
|
|
|
}
|
|
|
|
|
|
|
|
int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
|
|
|
|
const struct qstr *orig_name,
|
|
|
|
struct inode *inode, nid_t ino, umode_t mode)
|
2014-09-24 18:17:53 +08:00
|
|
|
{
|
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
|
|
|
|
struct page *ipage;
|
|
|
|
unsigned int bit_pos;
|
|
|
|
f2fs_hash_t name_hash;
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry = NULL;
|
2015-02-16 16:17:20 +08:00
|
|
|
struct f2fs_dentry_ptr d;
|
2016-10-12 17:18:56 -07:00
|
|
|
int slots = GET_DENTRY_SLOTS(new_name->len);
|
2015-03-30 15:07:16 -07:00
|
|
|
struct page *page = NULL;
|
2014-09-24 18:17:53 +08:00
|
|
|
int err = 0;
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(sbi, dir->i_ino);
|
2014-09-24 18:17:53 +08:00
|
|
|
if (IS_ERR(ipage))
|
|
|
|
return PTR_ERR(ipage);
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
inline_dentry = inline_data_addr(dir, ipage);
|
|
|
|
make_dentry_ptr_inline(dir, &d, inline_dentry);
|
2017-07-16 15:08:54 +08:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
|
2017-07-16 15:08:54 +08:00
|
|
|
if (bit_pos >= d.max) {
|
2017-06-09 06:32:54 +08:00
|
|
|
err = f2fs_convert_inline_dir(dir, ipage, inline_dentry);
|
2015-07-14 18:14:06 +08:00
|
|
|
if (err)
|
|
|
|
return err;
|
|
|
|
err = -EAGAIN;
|
2014-09-24 18:17:53 +08:00
|
|
|
goto out;
|
|
|
|
}
|
|
|
|
|
2015-03-30 15:07:16 -07:00
|
|
|
if (inode) {
|
|
|
|
down_write(&F2FS_I(inode)->i_sem);
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
page = f2fs_init_inode_metadata(inode, dir, new_name,
|
2016-10-12 17:18:56 -07:00
|
|
|
orig_name, ipage);
|
2015-03-30 15:07:16 -07:00
|
|
|
if (IS_ERR(page)) {
|
|
|
|
err = PTR_ERR(page);
|
|
|
|
goto fail;
|
|
|
|
}
|
2014-09-24 18:17:53 +08:00
|
|
|
}
|
2014-10-13 19:42:53 -07:00
|
|
|
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_wait_on_page_writeback(ipage, NODE, true);
|
2015-02-16 16:17:20 +08:00
|
|
|
|
2017-04-24 10:00:08 -07:00
|
|
|
name_hash = f2fs_dentry_hash(new_name, NULL);
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_update_dentry(ino, mode, &d, new_name, name_hash, bit_pos);
|
2015-02-16 16:17:20 +08:00
|
|
|
|
2014-09-24 18:17:53 +08:00
|
|
|
set_page_dirty(ipage);
|
|
|
|
|
|
|
|
/* we don't need to mark_inode_dirty now */
|
2015-03-30 15:07:16 -07:00
|
|
|
if (inode) {
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_i_pino_write(inode, dir->i_ino);
|
2015-03-30 15:07:16 -07:00
|
|
|
f2fs_put_page(page, 1);
|
|
|
|
}
|
2014-09-24 18:17:53 +08:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_update_parent_metadata(dir, inode, 0);
|
2014-09-24 18:17:53 +08:00
|
|
|
fail:
|
2015-03-30 15:07:16 -07:00
|
|
|
if (inode)
|
|
|
|
up_write(&F2FS_I(inode)->i_sem);
|
2014-09-24 18:17:53 +08:00
|
|
|
out:
|
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
|
|
|
|
struct inode *dir, struct inode *inode)
|
|
|
|
{
|
2017-07-16 15:08:54 +08:00
|
|
|
struct f2fs_dentry_ptr d;
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry;
|
2014-09-24 18:17:53 +08:00
|
|
|
int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
|
|
|
|
unsigned int bit_pos;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
lock_page(page);
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_wait_on_page_writeback(page, NODE, true);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
inline_dentry = inline_data_addr(dir, page);
|
|
|
|
make_dentry_ptr_inline(dir, &d, inline_dentry);
|
2017-07-16 15:08:54 +08:00
|
|
|
|
|
|
|
bit_pos = dentry - d.dentry;
|
2014-09-24 18:17:53 +08:00
|
|
|
for (i = 0; i < slots; i++)
|
2017-07-16 15:08:54 +08:00
|
|
|
__clear_bit_le(bit_pos + i, d.bitmap);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
|
|
|
set_page_dirty(page);
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_put_page(page, 1);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2016-11-10 18:04:05 -08:00
|
|
|
dir->i_ctime = dir->i_mtime = current_time(dir);
|
2016-10-14 11:51:23 -07:00
|
|
|
f2fs_mark_inode_dirty_sync(dir, false);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
|
|
|
if (inode)
|
2016-10-12 17:18:56 -07:00
|
|
|
f2fs_drop_nlink(dir, inode);
|
2014-09-24 18:17:53 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
bool f2fs_empty_inline_dir(struct inode *dir)
|
|
|
|
{
|
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
|
|
|
|
struct page *ipage;
|
|
|
|
unsigned int bit_pos = 2;
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry;
|
2017-07-16 15:08:54 +08:00
|
|
|
struct f2fs_dentry_ptr d;
|
2014-09-24 18:17:53 +08:00
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(sbi, dir->i_ino);
|
2014-09-24 18:17:53 +08:00
|
|
|
if (IS_ERR(ipage))
|
|
|
|
return false;
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
inline_dentry = inline_data_addr(dir, ipage);
|
|
|
|
make_dentry_ptr_inline(dir, &d, inline_dentry);
|
2017-07-16 15:08:54 +08:00
|
|
|
|
|
|
|
bit_pos = find_next_bit_le(d.bitmap, d.max, bit_pos);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
|
|
2017-07-16 15:08:54 +08:00
|
|
|
if (bit_pos < d.max)
|
2014-09-24 18:17:53 +08:00
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-04-27 16:26:24 -07:00
|
|
|
int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
|
2016-10-12 17:18:56 -07:00
|
|
|
struct fscrypt_str *fstr)
|
2014-09-24 18:17:53 +08:00
|
|
|
{
|
|
|
|
struct inode *inode = file_inode(file);
|
|
|
|
struct page *ipage = NULL;
|
2014-10-18 22:52:52 -07:00
|
|
|
struct f2fs_dentry_ptr d;
|
2017-07-19 00:19:05 +08:00
|
|
|
void *inline_dentry = NULL;
|
2016-10-29 18:46:34 +08:00
|
|
|
int err;
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-07-16 15:08:54 +08:00
|
|
|
make_dentry_ptr_inline(inode, &d, inline_dentry);
|
|
|
|
|
|
|
|
if (ctx->pos == d.max)
|
2014-09-24 18:17:53 +08:00
|
|
|
return 0;
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
|
2014-09-24 18:17:53 +08:00
|
|
|
if (IS_ERR(ipage))
|
|
|
|
return PTR_ERR(ipage);
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
inline_dentry = inline_data_addr(inode, ipage);
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2017-04-04 13:01:22 +03:00
|
|
|
make_dentry_ptr_inline(inode, &d, inline_dentry);
|
2014-10-18 22:52:52 -07:00
|
|
|
|
2016-10-29 18:46:34 +08:00
|
|
|
err = f2fs_fill_dentries(ctx, &d, 0, fstr);
|
|
|
|
if (!err)
|
2017-07-16 15:08:54 +08:00
|
|
|
ctx->pos = d.max;
|
2014-09-24 18:17:53 +08:00
|
|
|
|
2014-10-15 21:29:51 -07:00
|
|
|
f2fs_put_page(ipage, 1);
|
2016-10-29 18:46:34 +08:00
|
|
|
return err < 0 ? err : 0;
|
2014-09-24 18:17:53 +08:00
|
|
|
}
|
2015-10-15 11:34:49 -07:00
|
|
|
|
|
|
|
int f2fs_inline_data_fiemap(struct inode *inode,
|
|
|
|
struct fiemap_extent_info *fieinfo, __u64 start, __u64 len)
|
|
|
|
{
|
|
|
|
__u64 byteaddr, ilen;
|
|
|
|
__u32 flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED |
|
|
|
|
FIEMAP_EXTENT_LAST;
|
|
|
|
struct node_info ni;
|
|
|
|
struct page *ipage;
|
|
|
|
int err = 0;
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
|
2015-10-15 11:34:49 -07:00
|
|
|
if (IS_ERR(ipage))
|
|
|
|
return PTR_ERR(ipage);
|
|
|
|
|
|
|
|
if (!f2fs_has_inline_data(inode)) {
|
|
|
|
err = -EAGAIN;
|
|
|
|
goto out;
|
|
|
|
}
|
|
|
|
|
2017-07-19 00:19:05 +08:00
|
|
|
ilen = min_t(size_t, MAX_INLINE_DATA(inode), i_size_read(inode));
|
2015-10-15 11:34:49 -07:00
|
|
|
if (start >= ilen)
|
|
|
|
goto out;
|
|
|
|
if (start + len < ilen)
|
|
|
|
ilen = start + len;
|
|
|
|
ilen -= start;
|
|
|
|
|
f2fs: clean up symbol namespace
As Ted reported:
"Hi, I was looking at f2fs's sources recently, and I noticed that there
is a very large number of non-static symbols which don't have a f2fs
prefix. There's well over a hundred (see attached below).
As one example, in fs/f2fs/dir.c there is:
unsigned char get_de_type(struct f2fs_dir_entry *de)
This function is clearly only useful for f2fs, but it has a generic
name. This means that if any other file system tries to have the same
symbol name, there will be a symbol conflict and the kernel would not
successfully build. It also means that when someone is looking f2fs
sources, it's not at all obvious whether a function such as
read_data_page(), invalidate_blocks(), is a generic kernel function
found in the fs, mm, or block layers, or a f2fs specific function.
You might want to fix this at some point. Hopefully Kent's bcachefs
isn't similarly using genericly named functions, since that might
cause conflicts with f2fs's functions --- but just as this would be a
problem that we would rightly insist that Kent fix, this is something
that we should have rightly insisted that f2fs should have fixed
before it was integrated into the mainline kernel.
acquire_orphan_inode
add_ino_entry
add_orphan_inode
allocate_data_block
allocate_new_segments
alloc_nid
alloc_nid_done
alloc_nid_failed
available_free_memory
...."
This patch adds "f2fs_" prefix for all non-static symbols in order to:
a) avoid conflict with other kernel generic symbols;
b) to indicate the function is f2fs specific one instead of generic
one;
Reported-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-05-30 00:20:41 +08:00
|
|
|
f2fs_get_node_info(F2FS_I_SB(inode), inode->i_ino, &ni);
|
2015-10-15 11:34:49 -07:00
|
|
|
byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits;
|
2017-07-19 00:19:05 +08:00
|
|
|
byteaddr += (char *)inline_data_addr(inode, ipage) -
|
|
|
|
(char *)F2FS_INODE(ipage);
|
2015-10-15 11:34:49 -07:00
|
|
|
err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
|
|
|
|
out:
|
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
|
return err;
|
|
|
|
}
|