[JFFS2] Use f->target instead of f->dents for symlink target

JFFS2 uses f->dents to store the pointer to the symlink target string (in case
the inode is symlink). This is somewhat ugly to use the same field for
different reasons. Introduce distinct field f->target for this purpose.
Note, f->fragtree, f->dents, f->target may probably be put in a union.

Signed-off-by: Artem B. Bityutskiy <dedekind@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c
index cf39bcf..49da1a6 100644
--- a/fs/jffs2/readinode.c
+++ b/fs/jffs2/readinode.c
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: readinode.c,v 1.126 2005/07/17 06:56:21 dedekind Exp $
+ * $Id: readinode.c,v 1.127 2005/07/17 11:13:46 dedekind Exp $
  *
  */
 
@@ -547,11 +547,10 @@
 
 		if (f->inocache->state != INO_STATE_CHECKING) {
 			/* Symlink's inode data is the target path. Read it and
-			 * keep in RAM to facilitate quick follow symlink operation.
-			 * We use f->dents field to store the target path, which
-			 * is somewhat ugly. */
-			f->dents = kmalloc(je32_to_cpu(latest_node->csize) + 1, GFP_KERNEL);
-			if (!f->dents) {
+			 * keep in RAM to facilitate quick follow symlink
+			 * operation. */
+			f->target = kmalloc(je32_to_cpu(latest_node->csize) + 1, GFP_KERNEL);
+			if (!f->target) {
 				printk(KERN_WARNING "Can't allocate %d bytes of memory "
 						"for the symlink target path cache\n",
 						je32_to_cpu(latest_node->csize));
@@ -561,21 +560,21 @@
 			}
 			
 			ret = jffs2_flash_read(c, ref_offset(fn->raw) + sizeof(*latest_node),
-						je32_to_cpu(latest_node->csize), &retlen, (char *)f->dents);
+						je32_to_cpu(latest_node->csize), &retlen, (char *)f->target);
 			
 			if (ret  || retlen != je32_to_cpu(latest_node->csize)) {
 				if (retlen != je32_to_cpu(latest_node->csize))
 					ret = -EIO;
-				kfree(f->dents);
-				f->dents = NULL;
+				kfree(f->target);
+				f->target = NULL;
 				up(&f->sem);
 				jffs2_do_clear_inode(c, f);
 				return -ret;
 			}
 
-			((char *)f->dents)[je32_to_cpu(latest_node->csize)] = '\0';
+			f->target[je32_to_cpu(latest_node->csize)] = '\0';
 			D1(printk(KERN_DEBUG "jffs2_do_read_inode(): symlink's target '%s' cached\n",
-						(char *)f->dents));
+						f->target));
 		}
 		
 		/* fall through... */
@@ -638,20 +637,16 @@
 
 	jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL);
 
-	/* For symlink inodes we us f->dents to store the target path name */
-	if (S_ISLNK(OFNI_EDONI_2SFFJ(f)->i_mode)) {
-		if (f->dents) {
-			kfree(f->dents);
-			f->dents = NULL;
-		}
-	} else {
-		fds = f->dents;
-
-		while(fds) {
-			fd = fds;
-			fds = fd->next;
-			jffs2_free_full_dirent(fd);
-		}
+	if (f->target) {
+		kfree(f->target);
+		f->target = NULL;
+	}
+	
+	fds = f->dents;
+	while(fds) {
+		fd = fds;
+		fds = fd->next;
+		jffs2_free_full_dirent(fd);
 	}
 
 	if (f->inocache && f->inocache->state != INO_STATE_CHECKING) {