@@ -236,27 +236,31 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry
236236 mutex_unlock (& op_mutex );
237237 if (IS_ERR (inode ))
238238 return ERR_CAST (inode );
239- ent_oi = OP_I (inode );
240- ent_oi -> type = ent_type ;
241- ent_oi -> u = ent_data ;
242-
243- switch (ent_type ) {
244- case op_inode_node :
245- inode -> i_mode = S_IFDIR | S_IRUGO | S_IXUGO ;
246- inode -> i_op = & openprom_inode_operations ;
247- inode -> i_fop = & openprom_operations ;
248- set_nlink (inode , 2 );
249- break ;
250- case op_inode_prop :
251- if (of_node_name_eq (dp , "options" ) && (len == 17 ) &&
252- !strncmp (name , "security-password" , 17 ))
253- inode -> i_mode = S_IFREG | S_IRUSR | S_IWUSR ;
254- else
255- inode -> i_mode = S_IFREG | S_IRUGO ;
256- inode -> i_fop = & openpromfs_prop_ops ;
257- set_nlink (inode , 1 );
258- inode -> i_size = ent_oi -> u .prop -> length ;
259- break ;
239+ if (inode -> i_state & I_NEW ) {
240+ inode -> i_mtime = inode -> i_atime = inode -> i_ctime = current_time (inode );
241+ ent_oi = OP_I (inode );
242+ ent_oi -> type = ent_type ;
243+ ent_oi -> u = ent_data ;
244+
245+ switch (ent_type ) {
246+ case op_inode_node :
247+ inode -> i_mode = S_IFDIR | S_IRUGO | S_IXUGO ;
248+ inode -> i_op = & openprom_inode_operations ;
249+ inode -> i_fop = & openprom_operations ;
250+ set_nlink (inode , 2 );
251+ break ;
252+ case op_inode_prop :
253+ if (of_node_name_eq (dp , "options" ) && (len == 17 ) &&
254+ !strncmp (name , "security-password" , 17 ))
255+ inode -> i_mode = S_IFREG | S_IRUSR | S_IWUSR ;
256+ else
257+ inode -> i_mode = S_IFREG | S_IRUGO ;
258+ inode -> i_fop = & openpromfs_prop_ops ;
259+ set_nlink (inode , 1 );
260+ inode -> i_size = ent_oi -> u .prop -> length ;
261+ break ;
262+ }
263+ unlock_new_inode (inode );
260264 }
261265
262266 return d_splice_alias (inode , dentry );
@@ -345,20 +349,9 @@ static void openprom_free_inode(struct inode *inode)
345349
346350static struct inode * openprom_iget (struct super_block * sb , ino_t ino )
347351{
348- struct inode * inode ;
349-
350- inode = iget_locked (sb , ino );
352+ struct inode * inode = iget_locked (sb , ino );
351353 if (!inode )
352- return ERR_PTR (- ENOMEM );
353- if (inode -> i_state & I_NEW ) {
354- inode -> i_mtime = inode -> i_atime = inode -> i_ctime = current_time (inode );
355- if (inode -> i_ino == OPENPROM_ROOT_INO ) {
356- inode -> i_op = & openprom_inode_operations ;
357- inode -> i_fop = & openprom_operations ;
358- inode -> i_mode = S_IFDIR | S_IRUGO | S_IXUGO ;
359- }
360- unlock_new_inode (inode );
361- }
354+ inode = ERR_PTR (- ENOMEM );
362355 return inode ;
363356}
364357
@@ -394,9 +387,15 @@ static int openprom_fill_super(struct super_block *s, struct fs_context *fc)
394387 goto out_no_root ;
395388 }
396389
390+ root_inode -> i_mtime = root_inode -> i_atime =
391+ root_inode -> i_ctime = current_time (root_inode );
392+ root_inode -> i_op = & openprom_inode_operations ;
393+ root_inode -> i_fop = & openprom_operations ;
394+ root_inode -> i_mode = S_IFDIR | S_IRUGO | S_IXUGO ;
397395 oi = OP_I (root_inode );
398396 oi -> type = op_inode_node ;
399397 oi -> u .node = of_find_node_by_path ("/" );
398+ unlock_new_inode (root_inode );
400399
401400 s -> s_root = d_make_root (root_inode );
402401 if (!s -> s_root )
0 commit comments