unsigned int ili_fields; /* fields to be logged */
unsigned int ili_last_fields; /* fields when flushed*/
xfs_inode_log_format_t ili_format; /* logged structure */
- int ili_lock_flags;
} xfs_inode_log_item_t;
typedef struct xfs_buf_log_item {
extern int libxfs_trans_iget (xfs_mount_t *, xfs_trans_t *, xfs_ino_t,
uint, uint, struct xfs_inode **);
-extern void libxfs_trans_iput(xfs_trans_t *, struct xfs_inode *);
extern void libxfs_trans_ijoin (xfs_trans_t *, struct xfs_inode *, uint);
-extern void libxfs_trans_ihold (xfs_trans_t *, struct xfs_inode *);
extern void libxfs_trans_ijoin_ref(xfs_trans_t *, struct xfs_inode *, int);
extern void libxfs_trans_log_inode (xfs_trans_t *, struct xfs_inode *,
uint);
/*
* Commit the current transaction.
* If this commit failed, then it'd just unlock those items that
- * are not marked ihold. That also means that a filesystem shutdown
+ * are marked to be released. That also means that a filesystem shutdown
* is in progress. The caller takes the responsibility to cancel
* the duplicate transaction that gets returned.
*/
return 0;
}
-void
-libxfs_trans_iput(
- xfs_trans_t *tp,
- xfs_inode_t *ip)
-{
- xfs_inode_log_item_t *iip;
-
- if (tp == NULL) {
- IRELE(ip);
- return;
- }
-
- ASSERT(ip->i_transp == tp);
- iip = ip->i_itemp;
- ASSERT(iip != NULL);
- xfs_trans_del_item(&iip->ili_item);
-
- IRELE(ip);
-}
-
void
libxfs_trans_ijoin(
xfs_trans_t *tp,
ASSERT(ip->i_itemp != NULL);
xfs_trans_ijoin(tp, ip, lock_flags);
- ip->i_itemp->ili_lock_flags = lock_flags;
#ifdef XACT_DEBUG
fprintf(stderr, "ijoin_ref'd inode %llu, transaction %p\n", ip->i_ino, tp);
#endif
}
-void
-libxfs_trans_ihold(
- xfs_trans_t *tp,
- xfs_inode_t *ip)
-{
- ASSERT(ip->i_transp == tp);
- ASSERT(ip->i_itemp != NULL);
-
- ip->i_itemp->ili_lock_flags = 1;
-
-#ifdef XACT_DEBUG
- fprintf(stderr, "ihold'd inode %llu, transaction %p\n", ip->i_ino, tp);
-#endif
-}
-
void
libxfs_trans_inode_alloc_buf(
xfs_trans_t *tp,
if (!(iip->ili_fields & XFS_ILOG_ALL)) {
ip->i_transp = NULL; /* disassociate from transaction */
iip->ili_flags = 0; /* reset all flags */
- goto ili_done;
+ return;
}
/*
if (error) {
fprintf(stderr, _("%s: warning - imap_to_bp failed (%d)\n"),
progname, error);
- goto ili_done;
+ return;
}
XFS_BUF_SET_FSPRIVATE(bp, iip);
if (error) {
fprintf(stderr, _("%s: warning - iflush_int failed (%d)\n"),
progname, error);
- goto ili_done;
+ return;
}
ip->i_transp = NULL; /* disassociate from transaction */
XFS_BUF_SET_FSPRIVATE2(bp, NULL); /* remove xact ptr */
libxfs_writebuf(bp, 0);
#ifdef XACT_DEBUG
- fprintf(stderr, "flushing dirty inode %llu, buffer %p (hold=%u)\n",
- ip->i_ino, bp, iip->ili_lock_flags);
+ fprintf(stderr, "flushing dirty inode %llu, buffer %p\n",
+ ip->i_ino, bp);
#endif
-ili_done:
- if (iip->ili_lock_flags) {
- iip->ili_lock_flags = 0;
- return;
- }
- /* free the inode */
- IRELE(ip);
}
static void
ip->i_transp = NULL;
iip->ili_flags = 0;
- if (!iip->ili_lock_flags)
- IRELE(ip);
- else
- iip->ili_lock_flags = 0;
}
/*
break;
}
xfs_trans_ijoin(tp, ip, 0);
- xfs_trans_ihold(tp, ip);
xfs_bmap_init(&free_list, &firstfsb);
error = xfs_bmapi_write(tp, ip, startoffset_fsb, allocatesize_fsb,
#define xfs_trans_get_buf libxfs_trans_get_buf
#define xfs_trans_getsb libxfs_trans_getsb
#define xfs_trans_iget libxfs_trans_iget
-#define xfs_trans_ihold libxfs_trans_ihold
#define xfs_trans_ijoin libxfs_trans_ijoin
#define xfs_trans_ijoin_ref libxfs_trans_ijoin_ref
#define xfs_trans_init libxfs_trans_init
tp = libxfs_trans_alloc(mp, 0);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
ip->i_d.di_mode &= ~S_ISUID;
libxfs_trans_ijoin(tp, pip, 0);
xname.type = XFS_DIR3_FT_REG_FILE;
newdirent(mp, tp, pip, &xname, ip->i_ino, &first, &flist);
- libxfs_trans_ihold(tp, pip);
break;
case IF_RESERVED: /* pre-allocated space only */
xname.type = XFS_DIR3_FT_REG_FILE;
newdirent(mp, tp, pip, &xname, ip->i_ino, &first, &flist);
- libxfs_trans_ihold(tp, pip);
libxfs_trans_log_inode(tp, ip, flags);
error = libxfs_bmap_finish(&tp, &flist, &committed);
fail(_("Pre-allocated file creation failed"), error);
libxfs_trans_commit(tp, 0);
rsvfile(mp, ip, llen);
+ IRELE(ip);
return;
case IF_BLOCK:
libxfs_trans_ijoin(tp, pip, 0);
xname.type = XFS_DIR3_FT_BLKDEV;
newdirent(mp, tp, pip, &xname, ip->i_ino, &first, &flist);
- libxfs_trans_ihold(tp, pip);
flags |= XFS_ILOG_DEV;
break;
libxfs_trans_ijoin(tp, pip, 0);
xname.type = XFS_DIR3_FT_CHRDEV;
newdirent(mp, tp, pip, &xname, ip->i_ino, &first, &flist);
- libxfs_trans_ihold(tp, pip);
flags |= XFS_ILOG_DEV;
break;
libxfs_trans_ijoin(tp, pip, 0);
xname.type = XFS_DIR3_FT_FIFO;
newdirent(mp, tp, pip, &xname, ip->i_ino, &first, &flist);
- libxfs_trans_ihold(tp, pip);
break;
case IF_SYMLINK:
buf = getstr(pp);
libxfs_trans_ijoin(tp, pip, 0);
xname.type = XFS_DIR3_FT_SYMLINK;
newdirent(mp, tp, pip, &xname, ip->i_ino, &first, &flist);
- libxfs_trans_ihold(tp, pip);
break;
case IF_DIRECTORY:
getres(tp, 0);
newdirent(mp, tp, pip, &xname, ip->i_ino,
&first, &flist);
pip->i_d.di_nlink++;
- libxfs_trans_ihold(tp, pip);
libxfs_trans_log_inode(tp, pip, XFS_ILOG_CORE);
}
newdirectory(mp, tp, ip, pip);
error = libxfs_bmap_finish(&tp, &flist, &committed);
if (error)
fail(_("Directory creation failed"), error);
- libxfs_trans_ihold(tp, ip);
libxfs_trans_commit(tp, 0);
/*
* RT initialization. Do this here to ensure that
error);
}
libxfs_trans_commit(tp, 0);
+ IRELE(ip);
}
void
*(__uint64_t *)&rbmip->i_d.di_atime = 0;
libxfs_trans_log_inode(tp, rbmip, XFS_ILOG_CORE);
libxfs_mod_sb(tp, XFS_SB_RBMINO);
- libxfs_trans_ihold(tp, rbmip);
mp->m_rbmip = rbmip;
error = libxfs_inode_alloc(&tp, NULL, S_IFREG, 1, 0,
&creds, &fsxattrs, &rsumip);
rsumip->i_d.di_size = mp->m_rsumsize;
libxfs_trans_log_inode(tp, rsumip, XFS_ILOG_CORE);
libxfs_mod_sb(tp, XFS_SB_RSUMINO);
- libxfs_trans_ihold(tp, rsumip);
libxfs_trans_commit(tp, 0);
mp->m_rsumip = rsumip;
/*
res_failed(i);
libxfs_trans_ijoin(tp, rbmip, 0);
- libxfs_trans_ihold(tp, rbmip);
bno = 0;
xfs_bmap_init(&flist, &first);
while (bno < mp->m_sb.sb_rbmblocks) {
if (i)
res_failed(i);
libxfs_trans_ijoin(tp, rsumip, 0);
- libxfs_trans_ihold(tp, rsumip);
bno = 0;
xfs_bmap_init(&flist, &first);
while (bno < nsumblocks) {
if (i)
res_failed(i);
libxfs_trans_ijoin(tp, rbmip, 0);
- libxfs_trans_ihold(tp, rbmip);
xfs_bmap_init(&flist, &first);
ebno = XFS_RTMIN(mp->m_sb.sb_rextents,
bno + NBBY * mp->m_sb.sb_blocksize);
* commit changes
*/
libxfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
- libxfs_trans_ihold(tp, ip);
libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC);
/*
* commit changes
*/
libxfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
- libxfs_trans_ihold(tp, ip);
libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC);
/*
libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC);
+ IRELE(ip);
+ IRELE(pip);
add_inode_reached(irec,ino_offset);
return(ino);
libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC);
}
+ IRELE(ino_p);
+ IRELE(orphanage_ip);
}
static int
if (error)
res_failed(error);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
if ((error = libxfs_bmap_last_offset(tp, ip, &lastblock,
XFS_DATA_FORK)))
res_failed(error);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
xfs_bmap_init(&flist, &firstblock);
error = libxfs_dir_createname(tp, ip, &p->name, p->inum,
if (error)
res_failed(error);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
libxfs_trans_bjoin(tp, bp);
memset(&args, 0, sizeof(args));
xfs_bmap_init(&flist, &firstblock);
if (error)
res_failed(error);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
libxfs_trans_bjoin(tp, bp);
libxfs_trans_bhold(tp, bp);
xfs_bmap_init(&flist, &firstblock);
res_failed(error);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
shortform_dir2_entry_check(mp, ino, ip, &dirty,
irec, ino_offset,
res_failed(error);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
xfs_bmap_init(&flist, &first);
res_failed(error);
libxfs_trans_ijoin(tp, ip, 0);
- libxfs_trans_ihold(tp, ip);
xfs_bmap_init(&flist, &first);
set_nlinks(&ip->i_d, ino, nlinks, &dirty);
if (!dirty) {
- libxfs_trans_iput(tp, ip);
libxfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES);
} else {
libxfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
ASSERT(error == 0);
}
+ IRELE(ip);
}
void