提交 73a0e405 编写于 作者: L Linus Torvalds

Merge git://oss.sgi.com:8090/nathans/xfs-2.6

* git://oss.sgi.com:8090/nathans/xfs-2.6:
  [XFS] Fixup whitespace damage in log_write, remove final warning.
  [XFS] Rework code snippets slightly to remove remaining recent-gcc
  [XFS] Fix realtime subvolume expansion, a porting bug b0rked it.  Coverity
  [XFS] Remove a race condition where a linked inode could BUG_ON in
  [XFS] Remove redundant directory checks from inode link operation.
  [XFS] Remove a couple of no-longer-used macros.
  [XFS] Reduce size of xfs_trans_t structure. * remove ->t_forw, ->t_back --
  [XFS] remove unused behaviour lock - shrink XFS vnode as a side effect.
  [XFS] * There is trivial "inode => vnode => inode" conversion, but only
  [XFS] link(2) on directory is banned in VFS.
......@@ -419,16 +419,15 @@ xfs_vn_link(
int error;
ip = old_dentry->d_inode; /* inode being linked to */
if (S_ISDIR(ip->i_mode))
return -EPERM;
tdvp = vn_from_inode(dir);
vp = vn_from_inode(ip);
VN_HOLD(vp);
error = bhv_vop_link(tdvp, vp, dentry, NULL);
if (likely(!error)) {
if (unlikely(error)) {
VN_RELE(vp);
} else {
VMODIFY(tdvp);
VN_HOLD(vp);
xfs_validate_fields(ip, &vattr);
d_instantiate(dentry, ip);
}
......
......@@ -140,9 +140,7 @@ BUFFER_FNS(PrivateStart, unwritten);
#define current_pid() (current->pid)
#define current_fsuid(cred) (current->fsuid)
#define current_fsgid(cred) (current->fsgid)
#define current_set_flags(f) (current->flags |= (f))
#define current_test_flags(f) (current->flags & (f))
#define current_clear_flags(f) (current->flags & ~(f))
#define current_set_flags_nested(sp, f) \
(*(sp) = current->flags, current->flags |= (f))
#define current_clear_flags_nested(sp, f) \
......
......@@ -93,7 +93,7 @@ typedef enum {
*/
static inline struct bhv_vnode *vn_from_inode(struct inode *inode)
{
return (bhv_vnode_t *)list_entry(inode, bhv_vnode_t, v_inode);
return container_of(inode, bhv_vnode_t, v_inode);
}
static inline struct inode *vn_to_inode(struct bhv_vnode *vnode)
{
......
......@@ -78,15 +78,12 @@
*
*/
struct bhv_head_lock;
/*
* Behavior head. Head of the chain of behaviors.
* Contained within each virtualized object data structure.
*/
typedef struct bhv_head {
struct bhv_desc *bh_first; /* first behavior in chain */
struct bhv_head_lock *bh_lockp; /* pointer to lock info struct */
} bhv_head_t;
/*
......
......@@ -1961,9 +1961,9 @@ xfs_iunlink_remove(
xfs_agino_t agino;
xfs_agino_t next_agino;
xfs_buf_t *last_ibp;
xfs_dinode_t *last_dip;
xfs_dinode_t *last_dip = NULL;
short bucket_index;
int offset, last_offset;
int offset, last_offset = 0;
int error;
int agi_ok;
......
......@@ -1740,10 +1740,10 @@ xlog_write(xfs_mount_t * mp,
xlog_in_core_t **commit_iclog,
uint flags)
{
xlog_t *log = mp->m_log;
xlog_t *log = mp->m_log;
xlog_ticket_t *ticket = (xlog_ticket_t *)tic;
xlog_in_core_t *iclog = NULL; /* ptr to current in-core log */
xlog_op_header_t *logop_head; /* ptr to log operation header */
xlog_in_core_t *iclog; /* ptr to current in-core log */
__psint_t ptr; /* copy address into data region */
int len; /* # xlog_write() bytes 2 still copy */
int index; /* region index currently copying */
......
......@@ -990,6 +990,8 @@ xlog_find_zeroed(
xfs_daddr_t num_scan_bblks;
int error, log_bbnum = log->l_logBBsize;
*blk_no = 0;
/* check totally zeroed log */
bp = xlog_get_bp(log, 1);
if (!bp)
......
......@@ -2028,7 +2028,7 @@ xfs_icsb_balance_counter(
xfs_sb_field_t field,
int flags)
{
uint64_t count, resid = 0;
uint64_t count, resid;
int weight = num_online_cpus();
int s;
......@@ -2060,6 +2060,7 @@ xfs_icsb_balance_counter(
break;
default:
BUG();
count = resid = 0; /* quiet, gcc */
break;
}
......
......@@ -1929,7 +1929,7 @@ xfs_growfs_rt(
/*
* Initial error checking.
*/
if (mp->m_rtdev_targp || mp->m_rbmip == NULL ||
if (mp->m_rtdev_targp == NULL || mp->m_rbmip == NULL ||
(nrblocks = in->newblocks) <= sbp->sb_rblocks ||
(sbp->sb_rblocks && (in->extsize != sbp->sb_rextsize)))
return XFS_ERROR(EINVAL);
......
......@@ -338,8 +338,6 @@ typedef void (*xfs_trans_callback_t)(struct xfs_trans *, void *);
typedef struct xfs_trans {
unsigned int t_magic; /* magic number */
xfs_log_callback_t t_logcb; /* log callback struct */
struct xfs_trans *t_forw; /* async list pointers */
struct xfs_trans *t_back; /* async list pointers */
unsigned int t_type; /* transaction type */
unsigned int t_log_res; /* amt of log space resvd */
unsigned int t_log_count; /* count for perm log res */
......@@ -364,9 +362,11 @@ typedef struct xfs_trans {
long t_res_fdblocks_delta; /* on-disk only chg */
long t_frextents_delta;/* superblock freextents chg*/
long t_res_frextents_delta; /* on-disk only chg */
#ifdef DEBUG
long t_ag_freeblks_delta; /* debugging counter */
long t_ag_flist_delta; /* debugging counter */
long t_ag_btree_delta; /* debugging counter */
#endif
long t_dblocks_delta;/* superblock dblocks change */
long t_agcount_delta;/* superblock agcount change */
long t_imaxpct_delta;/* superblock imaxpct change */
......
......@@ -2603,8 +2603,7 @@ xfs_link(
vn_trace_entry(src_vp, __FUNCTION__, (inst_t *)__return_address);
target_namelen = VNAMELEN(dentry);
if (VN_ISDIR(src_vp))
return XFS_ERROR(EPERM);
ASSERT(!VN_ISDIR(src_vp));
sip = xfs_vtoi(src_vp);
tdp = XFS_BHVTOI(target_dir_bdp);
......@@ -2699,9 +2698,8 @@ xfs_link(
xfs_trans_log_inode(tp, tdp, XFS_ILOG_CORE);
error = xfs_bumplink(tp, sip);
if (error) {
if (error)
goto abort_return;
}
/*
* If this is a synchronous mount, make sure that the
......@@ -2719,9 +2717,8 @@ xfs_link(
}
error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES, NULL);
if (error) {
if (error)
goto std_return;
}
/* Fall through to std_return with error = 0. */
std_return:
......@@ -2742,6 +2739,8 @@ xfs_link(
xfs_trans_cancel(tp, cancel_flags);
goto std_return;
}
/*
* xfs_mkdir
*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册