| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * JFFS2 -- Journalling Flash File System, Version 2. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2007-04-25 14:16:47 +01:00
										 |  |  |  * Copyright © 2001-2007 Red Hat, Inc. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Created by David Woodhouse <dwmw2@infradead.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * For licensing information, see the file 'LICENCE' in this directory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/kernel.h>
 | 
					
						
							|  |  |  | #include <linux/slab.h>
 | 
					
						
							|  |  |  | #include <linux/fs.h>
 | 
					
						
							|  |  |  | #include <linux/namei.h>
 | 
					
						
							|  |  |  | #include "nodelist.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												[PATCH] Fix up symlink function pointers
This fixes up the symlink functions for the calling convention change:
 * afs, autofs4, befs, devfs, freevxfs, jffs2, jfs, ncpfs, procfs,
   smbfs, sysvfs, ufs, xfs - prototype change for ->follow_link()
 * befs, smbfs, xfs - same for ->put_link()
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
											
										 
											2005-08-20 00:17:39 +01:00
										 |  |  | static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-12 00:55:39 -08:00
										 |  |  | const struct inode_operations jffs2_symlink_inode_operations = | 
					
						
							| 
									
										
										
										
											2005-11-07 11:16:07 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	.readlink =	generic_readlink, | 
					
						
							|  |  |  | 	.follow_link =	jffs2_follow_link, | 
					
						
							| 
									
										
										
										
											2006-05-13 15:09:47 +09:00
										 |  |  | 	.permission =	jffs2_permission, | 
					
						
							|  |  |  | 	.setattr =	jffs2_setattr, | 
					
						
							|  |  |  | 	.setxattr =	jffs2_setxattr, | 
					
						
							|  |  |  | 	.getxattr =	jffs2_getxattr, | 
					
						
							|  |  |  | 	.listxattr =	jffs2_listxattr, | 
					
						
							|  |  |  | 	.removexattr =	jffs2_removexattr | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												[PATCH] Fix up symlink function pointers
This fixes up the symlink functions for the calling convention change:
 * afs, autofs4, befs, devfs, freevxfs, jffs2, jfs, ncpfs, procfs,
   smbfs, sysvfs, ufs, xfs - prototype change for ->follow_link()
 * befs, smbfs, xfs - same for ->put_link()
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
											
										 
											2005-08-20 00:17:39 +01:00
										 |  |  | static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	struct jffs2_inode_info *f = JFFS2_INODE_INFO(dentry->d_inode); | 
					
						
							| 
									
										
										
										
											2005-07-17 12:13:51 +01:00
										 |  |  | 	char *p = (char *)f->target; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * We don't acquire the f->sem mutex here since the only data we | 
					
						
							| 
									
										
										
										
											2005-07-17 12:13:51 +01:00
										 |  |  | 	 * use is f->target. | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	 * | 
					
						
							| 
									
										
										
										
											2005-07-17 12:13:51 +01:00
										 |  |  | 	 * 1. If we are here the inode has already built and f->target has | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	 * to point to the target path. | 
					
						
							| 
									
										
										
										
											2005-07-17 12:13:51 +01:00
										 |  |  | 	 * 2. Nobody uses f->target (if the inode is symlink's inode). The | 
					
						
							|  |  |  | 	 * exception is inode freeing function which frees f->target. But | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	 * it can't be called while we are here and before VFS has | 
					
						
							| 
									
										
										
										
											2005-07-17 12:13:51 +01:00
										 |  |  | 	 * stopped using our f->target string which we provide by means of | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	 * nd_set_link() call. | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2005-11-07 11:16:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-08-19 22:42:16 +01:00
										 |  |  | 	if (!p) { | 
					
						
							| 
									
										
										
										
											2006-10-16 19:42:23 +08:00
										 |  |  | 		printk(KERN_ERR "jffs2_follow_link(): can't find symlink target\n"); | 
					
						
							| 
									
										
										
										
											2005-08-19 22:42:16 +01:00
										 |  |  | 		p = ERR_PTR(-EIO); | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2005-07-17 12:13:51 +01:00
										 |  |  | 	D1(printk(KERN_DEBUG "jffs2_follow_link(): target path is '%s'\n", (char *) f->target)); | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-08-19 22:42:16 +01:00
										 |  |  | 	nd_set_link(nd, p); | 
					
						
							| 
									
										
										
										
											2005-11-07 11:16:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	/*
 | 
					
						
							| 
									
										
										
										
											2005-07-17 12:13:51 +01:00
										 |  |  | 	 * We will unlock the f->sem mutex but VFS will use the f->target string. This is safe | 
					
						
							|  |  |  | 	 * since the only way that may cause f->target to be changed is iput() operation. | 
					
						
							|  |  |  | 	 * But VFS will not use f->target after iput() has been called. | 
					
						
							| 
									
										
										
										
											2005-03-01 10:50:52 +00:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
											
												[PATCH] Fix up symlink function pointers
This fixes up the symlink functions for the calling convention change:
 * afs, autofs4, befs, devfs, freevxfs, jffs2, jfs, ncpfs, procfs,
   smbfs, sysvfs, ufs, xfs - prototype change for ->follow_link()
 * befs, smbfs, xfs - same for ->put_link()
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
											
										 
											2005-08-20 00:17:39 +01:00
										 |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 |