aboutsummaryrefslogtreecommitdiff
path: root/fs/xfs
AgeCommit message (Collapse)AuthorFilesLines
2013-08-20xfs: fix the comment of xfs_mountfs()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_sb_quiet_read_verify()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xlog_recover_do_dquot_buffer()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_log_unmount_write()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_ifree_cluster()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_ialloc_ag_select()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_extent_busy_update_extent()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_setsize_buftarg_early()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_bmap_punch_delalloc_range()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_bmap_last_before()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_bmap_validate_ret()Zhi Yong Wu1-2/+2
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_bmap_count_tree()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: rename bio_add_buffer() to xfs_bio_add_buffer()Zhi Yong Wu1-2/+2
Follow up with xfs naming style. Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xlog_find_head()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xlog_recover_buffer_pass2()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: remove two unused macro definitions in xfs_linux.hZhi Yong Wu1-2/+0
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_btree_get_iroot()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_iroot_realloc()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: remove one blank line in xfs_btree_make_block_unfull()Zhi Yong Wu1-1/+0
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xlog_write_setup_copy()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_mod_incore_sb_unlocked()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_btree_lookup()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_buf_free()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-20xfs: fix the comment of xfs_check_sizes()Zhi Yong Wu1-1/+1
Signed-off-by: Zhi Yong Wu <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-15xfs: use reference counts to free clean buffer itemsDave Chinner1-4/+2
When a transaction is cancelled and the buffer log item is clean in the transaction, the buffer log item is unconditionally freed. If the log item is in the AIL, however, this leads to a use after free condition as the item still has other users. In this case, xfs_buf_item_relse() should only be called on clean buffer items if the reference count has dropped to zero. This ensures only the last user frees the item. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-15xfs: add capability check to free eofblocks ioctlDwight Engen1-0/+6
Check for CAP_SYS_ADMIN since the caller can truncate preallocated blocks from files they do not own nor have write access to. A more fine grained access check was considered: require the caller to specify their own uid/gid and to use inode_permission to check for write, but this would not catch the case of an inode not reachable via path traversal from the callers mount namespace. Add check for read-only filesystem to free eofblocks ioctl. Reviewed-by: Brian Foster <[email protected]> Reviewed-by: Dave Chinner <[email protected]> Reviewed-by: Gao feng <[email protected]> Signed-off-by: Dwight Engen <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-15xfs: create internal eofblocks structure with kuid_t typesDwight Engen4-19/+56
Have eofblocks ioctl convert uid_t to kuid_t into internal structure. Update internal filter matching to compare ids with kuid_t types. Reviewed-by: Brian Foster <[email protected]> Reviewed-by: Dave Chinner <[email protected]> Reviewed-by: Gao feng <[email protected]> Signed-off-by: Dwight Engen <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-15xfs: convert kuid_t to/from uid_t for internal structuresDwight Engen5-34/+41
Use uint32 from init_user_ns for xfs internal uid/gid representation in xfs_icdinode, xfs_dqid_t. Reviewed-by: Dave Chinner <[email protected]> Reviewed-by: Gao feng <[email protected]> Signed-off-by: Dwight Engen <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-15xfs: ioctl check for capabilities in the current user namespaceDwight Engen1-2/+9
Use inode_capable() to check if SUID|SGID bits should be cleared to match similar check in inode_change_ok(). The check for CAP_LINUX_IMMUTABLE was not modified since all other file systems also check against init_user_ns rather than current_user_ns. Only allow changing of projid from init_user_ns. Reviewed-by: Dave Chinner <[email protected]> Reviewed-by: Gao feng <[email protected]> Signed-off-by: Dwight Engen <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-15xfs: convert kuid_t to/from uid_t in ACLsDwight Engen1-4/+16
Change permission check for setting ACL to use inode_owner_or_capable() which will additionally allow a CAP_FOWNER user in a user namespace to be able to set an ACL on an inode covered by the user namespace mapping. Reviewed-by: Dave Chinner <[email protected]> Reviewed-by: Gao feng <[email protected]> Signed-off-by: Dwight Engen <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-15xfs: create wrappers for converting kuid_t to/from uid_tDwight Engen1-0/+26
Reviewed-by: Dave Chinner <[email protected]> Reviewed-by: Gao feng <[email protected]> Signed-off-by: Dwight Engen <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: split the CIL lockDave Chinner2-23/+27
The xc_cil_lock is used for two purposes - to protect the CIL itself, and to protect the push/commit state and lists. These are two logically separate structures and operations, so can have their own locks. This means that pushing on the CIL and the commit wait ordering won't contend for a lock with other transactions that are completing concurrently. As the CIL insertion is the hottest path throught eh CIL, this is a big win. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: Combine CIL insert and prepare passesDave Chinner1-127/+100
Now that all the log item preparation and formatting is done under the CIL lock, we can get rid of the intermediate log vector chain used to track items to be inserted into the CIL. We can already find all the items to be committed from the transaction handle, so as long as we attach the log vectors to the item before we insert the items into the CIL, we don't need to create a log vector chain to pass around. This means we can move all the item insertion code into and optimise it into a pair of simple passes across all the items in the transaction. The first pass does the formatting and accounting, the second inserts them all into the CIL. We keep this two pass split so that we can separate the CIL insertion - which must be done under the CIL spinlock - from the formatting. We could insert each item into the CIL with a single pass, but that massively increases the number of times we have to grab the CIL spinlock. It is much more efficient (and hence scalable) to do a batch operation and insert all objects in a single lock grab. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: avoid CIL allocation during insertDave Chinner2-20/+33
Now that we have the size of the log vector that has been allocated, we can determine if we need to allocate a new log vector for formatting and insertion. We only need to allocate a new vector if it won't fit into the existing buffer. However, we need to hold the CIL context lock while we do this so that we can't race with a push draining the currently queued log vectors. It is safe to do this as long as we do GFP_NOFS allocation to avoid avoid memory allocation recursing into the filesystem. Hence we can safely overwrite the existing log vector on the CIL if it is large enough to hold all the dirty regions of the current item. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: Reduce allocations during CIL insertionDave Chinner3-40/+57
Now that we have the size of the object before the formatting pass is called, we can allocation the log vector and it's buffer in a single allocation rather than two separate allocations. Store the size of the allocated buffer in the log vector so that we potentially avoid allocation for future modifications of the object. While touching this code, remove the IOP_FORMAT definition. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: return log item size in IOP_SIZEDave Chinner7-73/+126
To begin optimising the CIL commit process, we need to have IOP_SIZE return both the number of vectors and the size of the data pointed to by the vectors. This enables us to calculate the size ofthe memory allocation needed before the formatting step and reduces the number of memory allocations per item by one. While there, kill the IOP_SIZE macro. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs:free bp in xlog_find_tail() error pathEric Sandeen1-0/+1
xlog_find_tail() currently leaks a bp on one error path. There is no error target, so manually free the bp before returning the error. Found by Coverity. Signed-off-by: Eric Sandeen <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: free bp in xlog_find_zeroed() error pathEric Sandeen1-1/+2
xlog_find_zeroed() currently leaks a bp on one error path. Using the bp_err: target resolves this. Found by Coverity. Signed-off-by: Eric Sandeen <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: avoid double-free in xfs_attr_node_addnameEric Sandeen1-0/+1
xfs_attr_node_addname()'s error handling tests whether it should free "state" in the out: error handling label: out: if (state) xfs_da_state_free(state); but an earlier free doesn't set state to NULL afterwards; this could lead to a double free. Fix it by setting state to NULL after it's freed. This was found by Coverity. Signed-off-by: Eric Sandeen <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-13xfs: call roundup_64() to calculate the min_logblksJie Liu1-3/+5
Replace roundup() with roundup_64() as we calculate min_logblks with 64-bit divisions. Hence, call roundup() will cause the following error while compiling a 32-bit kernel: fs/built-in.o: In function `xfs_log_calc_minimum_size': fs/xfs/xfs_log_rlimit.c:140: undefined reference to `__udivdi3' Reported-by: Fengguang Wu <[email protected]> Cc: Dave Chinner <[email protected]> Signed-off-by: Jie Liu <[email protected]> Reviewed-by: Dave Chinner <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: Validate log space at mount timeJie Liu2-2/+49
Validate log space during log mount stage, the underlying function will drop a warning message via syslog in critical level if the log space is too small or too large. [ dchinner: For CRC enable filesystems, abort the mounting of the filesystem as mkfs should never make a log too small for the given filesystem configuration. ] [ dchinner: make a note of the fact that the log size limits in block counts are in units of filesystem blocks, not basic blocks. ] Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: Add xfs_log_rlimit.cJie Liu3-1/+152
Add source files for xfs_log_rlimit.c The new file is used for log size calculations and validation shared with userspace. [dchinner: xfs_log_calc_max_attrsetm_res() does not modify the tr_attrsetm reservation, just calculates the maximum. ] [dchinner: rework loop in xfs_log_get_max_trans_res() ] Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: Refactor xfs_ticket_alloc() to extract a new helperJie Liu2-22/+42
Refactor xlog_ticket_alloc() to extract a new helper, i.e. xfs_log_calc_unit_res(). This helper would be used to calculate the total log reservation size by adding extra log operation/transation headers for a new log ticket. Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: Get rid of all XFS_XXX_LOG_RES() macroJie Liu1-36/+0
Get rid of all XFS_XXX_LOG_RES() macros since they are obsoleted now. Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: refactor xfs_trans_reserve() interfaceJie Liu21-197/+150
With the new xfs_trans_res structure has been introduced, the log reservation size, log count as well as log flags are pre-initialized at mount time. So it's time to refine xfs_trans_reserve() interface to be more neat. Also, introduce a new helper M_RES() to return a pointer to the mp->m_resv structure to simplify the input. Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: Make writeid transaction use tr_writeidJie Liu1-1/+1
tr_writeid is defined at mp->m_resv structure, however, it does not really being used when it should be.. This patch changes it to tr_writeid to fetch the correct log reservation size. Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: Introduce tr_fsyncts to m_reservationJie Liu2-1/+3
A preparation step. For now fsync_ts transaction use the pre-calculated log reservation size of tr_swrite. This patch introduce a new item tr_fsyncts to mp->m_reservations structure so that we can fetch the log reservation value for it in a same manner to others. Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: Introduce a new structure to hold transaction reservation itemsJie Liu4-87/+163
Introduce a new structure xfs_trans_res to hold transaction reservation item info per log ticket. We also need to improve xfs_trans_resv_calc() by initializing the log count as well as log flags for permanent log reservation. Signed-off-by: Jie Liu <[email protected]> Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: make struct xfs_perag kernel onlyDave Chinner4-53/+54
The struct xfs_perag has many kernel-only definitions in it, requiring a __KERNEL__ guard so userspace can use it to. Move it to xfs_mount.h so that it it kernel-only, and let userspace redefine it's own version of the structure containing only what it needs. This gets rid of another __KERNEL__ check in the XFS header files. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
2013-08-12xfs: move kernel specific type definitions to xfs.hDave Chinner2-36/+32
xfs_types.h is shared with userspace, so having kernel specific types defined in it is problematic. Move all the kernel specific defines to xfs_linux.h so we can remove the __KERNEL__ guards from xfs_types.h. Signed-off-by: Dave Chinner <[email protected]> Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>