summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ubifs/journal.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c
index 666ad82ec51a..3bc3fc947099 100644
--- a/fs/ubifs/journal.c
+++ b/fs/ubifs/journal.c
@@ -447,13 +447,11 @@ static int get_dent_type(int mode)
* @ino: buffer in which to pack inode node
* @inode: inode to pack
* @last: indicates the last node of the group
- * @last_reference: non-zero if this is a deletion inode
*/
static void pack_inode(struct ubifs_info *c, struct ubifs_ino_node *ino,
- const struct inode *inode, int last,
- int last_reference)
+ const struct inode *inode, int last)
{
- int data_len = 0;
+ int data_len = 0, last_reference = !inode->i_nlink;
struct ubifs_inode *ui = ubifs_inode(inode);
ino->ch.node_type = UBIFS_INO_NODE;
@@ -596,9 +594,9 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
ubifs_prep_grp_node(c, dent, dlen, 0);
ino = (void *)dent + aligned_dlen;
- pack_inode(c, ino, inode, 0, last_reference);
+ pack_inode(c, ino, inode, 0);
ino = (void *)ino + aligned_ilen;
- pack_inode(c, ino, dir, 1, 0);
+ pack_inode(c, ino, dir, 1);
if (last_reference) {
err = ubifs_add_orphan(c, inode->i_ino);
@@ -781,7 +779,7 @@ int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode)
if (err)
goto out_free;
- pack_inode(c, ino, inode, 1, last_reference);
+ pack_inode(c, ino, inode, 1);
err = write_head(c, BASEHD, ino, len, &lnum, &offs, sync);
if (err)
goto out_release;
@@ -912,16 +910,16 @@ int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir,
p = (void *)dent2 + aligned_dlen2;
if (new_inode) {
- pack_inode(c, p, new_inode, 0, last_reference);
+ pack_inode(c, p, new_inode, 0);
p += ALIGN(ilen, 8);
}
if (!move)
- pack_inode(c, p, old_dir, 1, 0);
+ pack_inode(c, p, old_dir, 1);
else {
- pack_inode(c, p, old_dir, 0, 0);
+ pack_inode(c, p, old_dir, 0);
p += ALIGN(plen, 8);
- pack_inode(c, p, new_dir, 1, 0);
+ pack_inode(c, p, new_dir, 1);
}
if (last_reference) {
@@ -1126,7 +1124,7 @@ int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode,
if (err)
goto out_free;
- pack_inode(c, ino, inode, 0, 0);
+ pack_inode(c, ino, inode, 0);
ubifs_prep_grp_node(c, trun, UBIFS_TRUN_NODE_SZ, dlen ? 0 : 1);
if (dlen)
ubifs_prep_grp_node(c, dn, dlen, 1);
@@ -1246,9 +1244,9 @@ int ubifs_jnl_delete_xattr(struct ubifs_info *c, const struct inode *host,
ubifs_prep_grp_node(c, xent, xlen, 0);
ino = (void *)xent + aligned_xlen;
- pack_inode(c, ino, inode, 0, 1);
+ pack_inode(c, ino, inode, 0);
ino = (void *)ino + UBIFS_INO_NODE_SZ;
- pack_inode(c, ino, host, 1, 0);
+ pack_inode(c, ino, host, 1);
err = write_head(c, BASEHD, xent, len, &lnum, &xent_offs, sync);
if (!sync && !err)
@@ -1339,8 +1337,8 @@ int ubifs_jnl_change_xattr(struct ubifs_info *c, const struct inode *inode,
if (err)
goto out_free;
- pack_inode(c, ino, host, 0, 0);
- pack_inode(c, (void *)ino + aligned_len1, inode, 1, 0);
+ pack_inode(c, ino, host, 0);
+ pack_inode(c, (void *)ino + aligned_len1, inode, 1);
err = write_head(c, BASEHD, ino, aligned_len, &lnum, &offs, 0);
if (!sync && !err) {
02-10-27 22:41:26 -0800'>2002-10-27[PATCH] xd_open is goneAlan Cox1-1/+0 2002-10-27[PATCH] fix umem driver to use pci_get/set..Alan Cox1-8/+3 2002-10-27[PATCH] merge befs file system from 2.4 (no core changes)Alan Cox23-1/+3940 2002-10-27[PATCH] get the right thing out of se401 on gcc 3.2Alan Cox1-2/+4 2002-10-27[PATCH] update qlogicfas driverAlan Cox2-273/+388 2002-10-27[PATCH] correct notes on scsi generic releaseAlan Cox1-2/+2 2002-10-27[PATCH] SCSI configure helpAlan Cox1-8/+21 2002-10-27[PATCH] next NCR5380 updatesAlan Cox15-537/+507 Fix more locking, do a major rethink on the bh handling (now workqueue) 2002-10-27[PATCH] u14-34f update from maintainerAlan Cox2-18/+48 2002-10-27[PATCH] finish updating sym53c416Alan Cox2-25/+47 2002-10-27[PATCH] nsp_cs update from maintainerAlan Cox5-291/+722 2002-10-27[PATCH] fix scsi irq errors on seagateAlan Cox2-0/+9 2002-10-27[PATCH] nsp32 needs updating for scsi_hn_getAlan Cox1-5/+3 2002-10-27[PATCH] resurrect the NCR53c406aAlan Cox2-806/+777 2002-10-27[PATCH] ncr53c8xxx needs updating for scsi_hn_getAlan Cox1-9/+4 2002-10-27[PATCH] inia100 just has to lose a next: NULLAlan Cox1-2/+1 2002-10-27[PATCH] fix all the IRQ breakage on the in2000Alan Cox2-14/+13 2002-10-27[PATCH] initial eata driver updatesAlan Cox4-88/+216 2002-10-27[PATCH] fix aic7xxx on gcc 3.2 warning spewAlan Cox1-20/+20 2002-10-27[PATCH] move advansys from pcibios to pci_Alan Cox1-23/+11 2002-10-27[PATCH] ressurect the aha1740 driverAlan Cox1-12/+19 2002-10-27[PATCH] move 53c7,8xx to pci_ not pcibiosAlan Cox2-11/+7 2002-10-27[PATCH] small scsi compile fixesAlan Cox7-24/+15 This is stuff like next: pointers that are not present rather than anything bigger 2002-10-27[PATCH] MCA bus basic cleanupsAlan Cox8-1540/+1323 2002-10-18Linux v2.5.44v2.5.44Linus Torvalds1-1/+1 2002-10-18[PATCH] device removalPatrick Mochel2-3/+4 The problem was that when the refcount hit 0, it was unconditionally assuming that it had been added, which is wrong. The patch below corrects that, and fixes the Oops when loading the floppy driver.