mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	iget: introduce a function to register iget failure
Introduce a function to register failure in an inode construction path. This includes marking the inode under construction as bad, unlocking it and releasing it. Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									e231c2ee64
								
							
						
					
					
						commit
						b46980feed
					
				
					 3 changed files with 28 additions and 5 deletions
				
			
		|  | @ -184,11 +184,19 @@ just takes the superblock and inode number as arguments and does the | |||
| test and set for you. | ||||
| 
 | ||||
| e.g. | ||||
|        inode = iget_locked(sb, ino); | ||||
|        if (inode->i_state & I_NEW) { | ||||
|                read_inode_from_disk(inode); | ||||
|                unlock_new_inode(inode); | ||||
|        } | ||||
| 	inode = iget_locked(sb, ino); | ||||
| 	if (inode->i_state & I_NEW) { | ||||
| 		err = read_inode_from_disk(inode); | ||||
| 		if (err < 0) { | ||||
| 			iget_failed(inode); | ||||
| 			return err; | ||||
| 		} | ||||
| 		unlock_new_inode(inode); | ||||
| 	} | ||||
| 
 | ||||
| Note that if the process of setting up a new inode fails, then iget_failed() | ||||
| should be called on the inode to render it dead, and an appropriate error | ||||
| should be passed back to the caller. | ||||
| 
 | ||||
| --- | ||||
| [recommended] | ||||
|  |  | |||
|  | @ -359,3 +359,17 @@ int is_bad_inode(struct inode *inode) | |||
| } | ||||
| 
 | ||||
| EXPORT_SYMBOL(is_bad_inode); | ||||
| 
 | ||||
| /**
 | ||||
|  * iget_failed - Mark an under-construction inode as dead and release it | ||||
|  * @inode: The inode to discard | ||||
|  * | ||||
|  * Mark an under-construction inode as dead and release it. | ||||
|  */ | ||||
| void iget_failed(struct inode *inode) | ||||
| { | ||||
| 	make_bad_inode(inode); | ||||
| 	unlock_new_inode(inode); | ||||
| 	iput(inode); | ||||
| } | ||||
| EXPORT_SYMBOL(iget_failed); | ||||
|  |  | |||
|  | @ -1780,6 +1780,7 @@ static inline struct inode *iget(struct super_block *sb, unsigned long ino) | |||
| } | ||||
| 
 | ||||
| extern void __iget(struct inode * inode); | ||||
| extern void iget_failed(struct inode *); | ||||
| extern void clear_inode(struct inode *); | ||||
| extern void destroy_inode(struct inode *); | ||||
| extern struct inode *new_inode(struct super_block *); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 David Howells
						David Howells