@@ -641,7 +641,7 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
641641 struct afs_cb_interest * dcbi , * cbi = NULL ;
642642 struct afs_super_info * as = dir -> i_sb -> s_fs_info ;
643643 struct afs_status_cb * scb ;
644- struct afs_iget_data data ;
644+ struct afs_iget_data iget_data ;
645645 struct afs_fs_cursor fc ;
646646 struct afs_server * server ;
647647 struct afs_vnode * dvnode = AFS_FS_I (dir );
@@ -684,9 +684,12 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
684684 goto out ;
685685
686686 /* Check to see if we already have an inode for the primary fid. */
687- data .volume = dvnode -> volume ;
688- data .fid = cookie -> fids [0 ];
689- inode = ilookup5 (dir -> i_sb , cookie -> fids [0 ].vnode , afs_iget5_test , & data );
687+ iget_data .fid = cookie -> fids [0 ];
688+ iget_data .volume = dvnode -> volume ;
689+ iget_data .cb_v_break = dvnode -> volume -> cb_v_break ;
690+ iget_data .cb_s_break = 0 ;
691+ inode = ilookup5 (dir -> i_sb , cookie -> fids [0 ].vnode ,
692+ afs_iget5_test , & iget_data );
690693 if (inode )
691694 goto out ;
692695
@@ -713,6 +716,8 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
713716 fc .ac .error = - ECONNABORTED ;
714717 break ;
715718 }
719+ iget_data .cb_v_break = dvnode -> volume -> cb_v_break ;
720+ iget_data .cb_s_break = fc .cbi -> server -> cb_s_break ;
716721 afs_fs_inline_bulk_status (& fc ,
717722 afs_v2net (dvnode ),
718723 cookie -> fids ,
@@ -741,6 +746,8 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
741746 inode = ERR_PTR (- ERESTARTSYS );
742747 if (afs_begin_vnode_operation (& fc , dvnode , key , true)) {
743748 while (afs_select_fileserver (& fc )) {
749+ iget_data .cb_v_break = dvnode -> volume -> cb_v_break ;
750+ iget_data .cb_s_break = fc .cbi -> server -> cb_s_break ;
744751 scb = & cookie -> statuses [0 ];
745752 afs_fs_fetch_status (& fc ,
746753 afs_v2net (dvnode ),
@@ -775,8 +782,8 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
775782 if (scb -> status .abort_code != 0 )
776783 continue ;
777784
778- ti = afs_iget ( dir -> i_sb , key , & cookie -> fids [i ],
779- scb , cbi , dvnode );
785+ iget_data . fid = cookie -> fids [i ];
786+ ti = afs_iget ( dir -> i_sb , key , & iget_data , scb , cbi , dvnode );
780787 if (i == 0 ) {
781788 inode = ti ;
782789 } else {
@@ -1112,7 +1119,7 @@ void afs_d_release(struct dentry *dentry)
11121119 */
11131120static void afs_vnode_new_inode (struct afs_fs_cursor * fc ,
11141121 struct dentry * new_dentry ,
1115- struct afs_fid * newfid ,
1122+ struct afs_iget_data * new_data ,
11161123 struct afs_status_cb * new_scb )
11171124{
11181125 struct afs_vnode * vnode ;
@@ -1122,7 +1129,7 @@ static void afs_vnode_new_inode(struct afs_fs_cursor *fc,
11221129 return ;
11231130
11241131 inode = afs_iget (fc -> vnode -> vfs_inode .i_sb , fc -> key ,
1125- newfid , new_scb , fc -> cbi , fc -> vnode );
1132+ new_data , new_scb , fc -> cbi , fc -> vnode );
11261133 if (IS_ERR (inode )) {
11271134 /* ENOMEM or EINTR at a really inconvenient time - just abandon
11281135 * the new directory on the server.
@@ -1138,15 +1145,23 @@ static void afs_vnode_new_inode(struct afs_fs_cursor *fc,
11381145 d_instantiate (new_dentry , inode );
11391146}
11401147
1148+ static void afs_prep_for_new_inode (struct afs_fs_cursor * fc ,
1149+ struct afs_iget_data * iget_data )
1150+ {
1151+ iget_data -> volume = fc -> vnode -> volume ;
1152+ iget_data -> cb_v_break = fc -> vnode -> volume -> cb_v_break ;
1153+ iget_data -> cb_s_break = fc -> cbi -> server -> cb_s_break ;
1154+ }
1155+
11411156/*
11421157 * create a directory on an AFS filesystem
11431158 */
11441159static int afs_mkdir (struct inode * dir , struct dentry * dentry , umode_t mode )
11451160{
1161+ struct afs_iget_data iget_data ;
11461162 struct afs_status_cb * scb ;
11471163 struct afs_fs_cursor fc ;
11481164 struct afs_vnode * dvnode = AFS_FS_I (dir );
1149- struct afs_fid newfid ;
11501165 struct key * key ;
11511166 int ret ;
11521167
@@ -1172,14 +1187,15 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
11721187
11731188 while (afs_select_fileserver (& fc )) {
11741189 fc .cb_break = afs_calc_vnode_cb_break (dvnode );
1190+ afs_prep_for_new_inode (& fc , & iget_data );
11751191 afs_fs_create (& fc , dentry -> d_name .name , mode ,
1176- & scb [0 ], & newfid , & scb [1 ]);
1192+ & scb [0 ], & iget_data . fid , & scb [1 ]);
11771193 }
11781194
11791195 afs_check_for_remote_deletion (& fc , dvnode );
11801196 afs_vnode_commit_status (& fc , dvnode , fc .cb_break ,
11811197 & data_version , & scb [0 ]);
1182- afs_vnode_new_inode (& fc , dentry , & newfid , & scb [1 ]);
1198+ afs_vnode_new_inode (& fc , dentry , & iget_data , & scb [1 ]);
11831199 ret = afs_end_vnode_operation (& fc );
11841200 if (ret < 0 )
11851201 goto error_key ;
@@ -1189,7 +1205,7 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
11891205
11901206 if (ret == 0 &&
11911207 test_bit (AFS_VNODE_DIR_VALID , & dvnode -> flags ))
1192- afs_edit_dir_add (dvnode , & dentry -> d_name , & newfid ,
1208+ afs_edit_dir_add (dvnode , & dentry -> d_name , & iget_data . fid ,
11931209 afs_edit_dir_for_create );
11941210
11951211 key_put (key );
@@ -1439,10 +1455,10 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
14391455static int afs_create (struct inode * dir , struct dentry * dentry , umode_t mode ,
14401456 bool excl )
14411457{
1458+ struct afs_iget_data iget_data ;
14421459 struct afs_fs_cursor fc ;
14431460 struct afs_status_cb * scb ;
14441461 struct afs_vnode * dvnode = AFS_FS_I (dir );
1445- struct afs_fid newfid ;
14461462 struct key * key ;
14471463 int ret ;
14481464
@@ -1472,14 +1488,15 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
14721488
14731489 while (afs_select_fileserver (& fc )) {
14741490 fc .cb_break = afs_calc_vnode_cb_break (dvnode );
1491+ afs_prep_for_new_inode (& fc , & iget_data );
14751492 afs_fs_create (& fc , dentry -> d_name .name , mode ,
1476- & scb [0 ], & newfid , & scb [1 ]);
1493+ & scb [0 ], & iget_data . fid , & scb [1 ]);
14771494 }
14781495
14791496 afs_check_for_remote_deletion (& fc , dvnode );
14801497 afs_vnode_commit_status (& fc , dvnode , fc .cb_break ,
14811498 & data_version , & scb [0 ]);
1482- afs_vnode_new_inode (& fc , dentry , & newfid , & scb [1 ]);
1499+ afs_vnode_new_inode (& fc , dentry , & iget_data , & scb [1 ]);
14831500 ret = afs_end_vnode_operation (& fc );
14841501 if (ret < 0 )
14851502 goto error_key ;
@@ -1488,7 +1505,7 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
14881505 }
14891506
14901507 if (test_bit (AFS_VNODE_DIR_VALID , & dvnode -> flags ))
1491- afs_edit_dir_add (dvnode , & dentry -> d_name , & newfid ,
1508+ afs_edit_dir_add (dvnode , & dentry -> d_name , & iget_data . fid ,
14921509 afs_edit_dir_for_create );
14931510
14941511 kfree (scb );
@@ -1595,10 +1612,10 @@ static int afs_link(struct dentry *from, struct inode *dir,
15951612static int afs_symlink (struct inode * dir , struct dentry * dentry ,
15961613 const char * content )
15971614{
1615+ struct afs_iget_data iget_data ;
15981616 struct afs_fs_cursor fc ;
15991617 struct afs_status_cb * scb ;
16001618 struct afs_vnode * dvnode = AFS_FS_I (dir );
1601- struct afs_fid newfid ;
16021619 struct key * key ;
16031620 int ret ;
16041621
@@ -1631,14 +1648,15 @@ static int afs_symlink(struct inode *dir, struct dentry *dentry,
16311648
16321649 while (afs_select_fileserver (& fc )) {
16331650 fc .cb_break = afs_calc_vnode_cb_break (dvnode );
1651+ afs_prep_for_new_inode (& fc , & iget_data );
16341652 afs_fs_symlink (& fc , dentry -> d_name .name , content ,
1635- & scb [0 ], & newfid , & scb [1 ]);
1653+ & scb [0 ], & iget_data . fid , & scb [1 ]);
16361654 }
16371655
16381656 afs_check_for_remote_deletion (& fc , dvnode );
16391657 afs_vnode_commit_status (& fc , dvnode , fc .cb_break ,
16401658 & data_version , & scb [0 ]);
1641- afs_vnode_new_inode (& fc , dentry , & newfid , & scb [1 ]);
1659+ afs_vnode_new_inode (& fc , dentry , & iget_data , & scb [1 ]);
16421660 ret = afs_end_vnode_operation (& fc );
16431661 if (ret < 0 )
16441662 goto error_key ;
@@ -1647,7 +1665,7 @@ static int afs_symlink(struct inode *dir, struct dentry *dentry,
16471665 }
16481666
16491667 if (test_bit (AFS_VNODE_DIR_VALID , & dvnode -> flags ))
1650- afs_edit_dir_add (dvnode , & dentry -> d_name , & newfid ,
1668+ afs_edit_dir_add (dvnode , & dentry -> d_name , & iget_data . fid ,
16511669 afs_edit_dir_for_symlink );
16521670
16531671 key_put (key );
0 commit comments