@@ -1329,7 +1329,6 @@ nfs4_map_atomic_open_claim(struct nfs_server *server,
1329
1329
static void nfs4_init_opendata_res (struct nfs4_opendata * p )
1330
1330
{
1331
1331
p -> o_res .f_attr = & p -> f_attr ;
1332
- p -> o_res .f_label = p -> f_label ;
1333
1332
p -> o_res .seqid = p -> o_arg .seqid ;
1334
1333
p -> c_res .seqid = p -> c_arg .seqid ;
1335
1334
p -> o_res .server = p -> o_arg .server ;
@@ -1355,8 +1354,8 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
1355
1354
if (p == NULL )
1356
1355
goto err ;
1357
1356
1358
- p -> f_label = nfs4_label_alloc (server , gfp_mask );
1359
- if (IS_ERR (p -> f_label ))
1357
+ p -> f_attr . label = nfs4_label_alloc (server , gfp_mask );
1358
+ if (IS_ERR (p -> f_attr . label ))
1360
1359
goto err_free_p ;
1361
1360
1362
1361
p -> a_label = nfs4_label_alloc (server , gfp_mask );
@@ -1434,7 +1433,7 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
1434
1433
err_free_label :
1435
1434
nfs4_label_free (p -> a_label );
1436
1435
err_free_f :
1437
- nfs4_label_free (p -> f_label );
1436
+ nfs4_label_free (p -> f_attr . label );
1438
1437
err_free_p :
1439
1438
kfree (p );
1440
1439
err :
@@ -1456,7 +1455,7 @@ static void nfs4_opendata_free(struct kref *kref)
1456
1455
nfs4_put_state_owner (p -> owner );
1457
1456
1458
1457
nfs4_label_free (p -> a_label );
1459
- nfs4_label_free (p -> f_label );
1458
+ nfs4_label_free (p -> f_attr . label );
1460
1459
1461
1460
dput (p -> dir );
1462
1461
dput (p -> dentry );
@@ -2009,7 +2008,7 @@ nfs4_opendata_get_inode(struct nfs4_opendata *data)
2009
2008
if (!(data -> f_attr .valid & NFS_ATTR_FATTR ))
2010
2009
return ERR_PTR (- EAGAIN );
2011
2010
inode = nfs_fhget (data -> dir -> d_sb , & data -> o_res .fh ,
2012
- & data -> f_attr , data -> f_label );
2011
+ & data -> f_attr , data -> f_attr . label );
2013
2012
break ;
2014
2013
default :
2015
2014
inode = d_inode (data -> dentry );
@@ -2709,7 +2708,7 @@ static int _nfs4_proc_open(struct nfs4_opendata *data,
2709
2708
if (!(o_res -> f_attr -> valid & NFS_ATTR_FATTR )) {
2710
2709
nfs4_sequence_free_slot (& o_res -> seq_res );
2711
2710
nfs4_proc_getattr (server , & o_res -> fh , o_res -> f_attr ,
2712
- o_res -> f_label , NULL );
2711
+ o_res -> f_attr -> label , NULL );
2713
2712
}
2714
2713
return 0 ;
2715
2714
}
@@ -3125,7 +3124,6 @@ static int _nfs4_do_open(struct inode *dir,
3125
3124
enum open_claim_type4 claim = NFS4_OPEN_CLAIM_NULL ;
3126
3125
struct iattr * sattr = c -> sattr ;
3127
3126
struct nfs4_label * label = c -> label ;
3128
- struct nfs4_label * olabel = NULL ;
3129
3127
int status ;
3130
3128
3131
3129
/* Protect against reboot recovery conflicts */
@@ -3148,19 +3146,11 @@ static int _nfs4_do_open(struct inode *dir,
3148
3146
if (opendata == NULL )
3149
3147
goto err_put_state_owner ;
3150
3148
3151
- if (label ) {
3152
- olabel = nfs4_label_alloc (server , GFP_KERNEL );
3153
- if (IS_ERR (olabel )) {
3154
- status = PTR_ERR (olabel );
3155
- goto err_opendata_put ;
3156
- }
3157
- }
3158
-
3159
3149
if (server -> attr_bitmask [2 ] & FATTR4_WORD2_MDSTHRESHOLD ) {
3160
3150
if (!opendata -> f_attr .mdsthreshold ) {
3161
3151
opendata -> f_attr .mdsthreshold = pnfs_mdsthreshold_alloc ();
3162
3152
if (!opendata -> f_attr .mdsthreshold )
3163
- goto err_free_label ;
3153
+ goto err_opendata_put ;
3164
3154
}
3165
3155
opendata -> o_arg .open_bitmap = & nfs4_pnfs_open_bitmap [0 ];
3166
3156
}
@@ -3169,7 +3159,7 @@ static int _nfs4_do_open(struct inode *dir,
3169
3159
3170
3160
status = _nfs4_open_and_get_state (opendata , flags , ctx );
3171
3161
if (status != 0 )
3172
- goto err_free_label ;
3162
+ goto err_opendata_put ;
3173
3163
state = ctx -> state ;
3174
3164
3175
3165
if ((opendata -> o_arg .open_flags & (O_CREAT |O_EXCL )) == (O_CREAT |O_EXCL ) &&
@@ -3186,11 +3176,12 @@ static int _nfs4_do_open(struct inode *dir,
3186
3176
nfs_fattr_init (opendata -> o_res .f_attr );
3187
3177
status = nfs4_do_setattr (state -> inode , cred ,
3188
3178
opendata -> o_res .f_attr , sattr ,
3189
- ctx , label , olabel );
3179
+ ctx , label , opendata -> o_res . f_attr -> label );
3190
3180
if (status == 0 ) {
3191
3181
nfs_setattr_update_inode (state -> inode , sattr ,
3192
3182
opendata -> o_res .f_attr );
3193
- nfs_setsecurity (state -> inode , opendata -> o_res .f_attr , olabel );
3183
+ nfs_setsecurity (state -> inode , opendata -> o_res .f_attr ,
3184
+ opendata -> o_res .f_attr -> label );
3194
3185
}
3195
3186
sattr -> ia_valid = ia_old ;
3196
3187
}
@@ -3203,13 +3194,9 @@ static int _nfs4_do_open(struct inode *dir,
3203
3194
opendata -> f_attr .mdsthreshold = NULL ;
3204
3195
}
3205
3196
3206
- nfs4_label_free (olabel );
3207
-
3208
3197
nfs4_opendata_put (opendata );
3209
3198
nfs4_put_state_owner (sp );
3210
3199
return 0 ;
3211
- err_free_label :
3212
- nfs4_label_free (olabel );
3213
3200
err_opendata_put :
3214
3201
nfs4_opendata_put (opendata );
3215
3202
err_put_state_owner :
0 commit comments