diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index e46b5c52d2ed7e154be87ef9ab0cee2d7390cf0d..0879d2aa97e60d9821d411356fd39d97ab0f8f0b 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -508,8 +508,8 @@ struct page *get_lock_data_page(struct inode *inode, pgoff_t index) * Caller ensures that this data page is never allocated. * A new zero-filled data page is allocated in the page cache. * - * Also, caller should grab and release a mutex by calling mutex_lock_op() and - * mutex_unlock_op(). + * Also, caller should grab and release a rwsem by calling f2fs_lock_op() and + * f2fs_unlock_op(). * Note that, npage is set only by make_empty_dir. */ struct page *get_new_data_page(struct inode *inode, @@ -595,10 +595,12 @@ static int __allocate_data_block(struct dnode_of_data *dn) } /* - * This function should be used by the data read flow only where it - * does not check the "create" flag that indicates block allocation. - * The reason for this special functionality is to exploit VFS readahead - * mechanism. + * get_data_block() now supported readahead/bmap/rw direct_IO with mapped bh. + * If original data blocks are allocated, then give them to blockdev. + * Otherwise, + * a. preallocate requested block addresses + * b. do not use extent cache for better performance + * c. give the block addresses to blockdev */ static int get_data_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create) diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c index 0cc26ba07c3b2c1f7ba96868164758cdec421e7e..28206109a29398df84b01f6ed0b1b54911c43f88 100644 --- a/fs/f2fs/dir.c +++ b/fs/f2fs/dir.c @@ -432,8 +432,8 @@ static int room_for_filename(struct f2fs_dentry_block *dentry_blk, int slots) } /* - * Caller should grab and release a mutex by calling mutex_lock_op() and - * mutex_unlock_op(). + * Caller should grab and release a rwsem by calling f2fs_lock_op() and + * f2fs_unlock_op(). */ int __f2fs_add_link(struct inode *dir, const struct qstr *name, struct inode *inode) { diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 42f28d4134c9faac9ad2a205c914c80acbb7ecc0..ba91186823dd4d37900c3f480a8b997fabd32b9e 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -165,7 +165,7 @@ enum { LOOKUP_NODE, /* look up a node without readahead */ LOOKUP_NODE_RA, /* * look up a node with readahead called - * by get_datablock_ro. + * by get_data_block. */ }; diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 0af0a715e36790a2e2cc8f58a24f40bee6f751c2..e8fe52d6073c3e81abd535f6d38dc0a709009b99 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -393,8 +393,8 @@ static int get_node_path(struct f2fs_inode_info *fi, long block, /* * Caller should call f2fs_put_dnode(dn). - * Also, it should grab and release a mutex by calling mutex_lock_op() and - * mutex_unlock_op() only if ro is not set RDONLY_NODE. + * Also, it should grab and release a rwsem by calling f2fs_lock_op() and + * f2fs_unlock_op() only if ro is not set RDONLY_NODE. * In the case of RDONLY_NODE, we don't need to care about mutex. */ int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode) @@ -802,8 +802,8 @@ int truncate_xattr_node(struct inode *inode, struct page *page) } /* - * Caller should grab and release a mutex by calling mutex_lock_op() and - * mutex_unlock_op(). + * Caller should grab and release a rwsem by calling f2fs_lock_op() and + * f2fs_unlock_op(). */ void remove_inode_page(struct inode *inode) { diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h index 3496bb3e15dc37b7b6806dffc08a00abf5921766..c4c79885c99344aa9e999b5562fea34954356276 100644 --- a/fs/f2fs/node.h +++ b/fs/f2fs/node.h @@ -224,7 +224,13 @@ static inline block_t next_blkaddr_of_node(struct page *node_page) * | `- direct node (5 + N => 5 + 2N - 1) * `- double indirect node (5 + 2N) * `- indirect node (6 + 2N) - * `- direct node (x(N + 1)) + * `- direct node + * ...... + * `- indirect node ((6 + 2N) + x(N + 1)) + * `- direct node + * ...... + * `- indirect node ((6 + 2N) + (N - 1)(N + 1)) + * `- direct node */ static inline bool IS_DNODE(struct page *node_page) {