diff options
-rw-r--r-- | fs/nfs/dir.c | 23 | ||||
-rw-r--r-- | fs/nfs/inode.c | 15 | ||||
-rw-r--r-- | fs/nfs/nfs4proc.c | 69 |
3 files changed, 96 insertions, 11 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index e9ab2cd9dd3d..736b607ac8a8 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -585,10 +585,16 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page, | |||
585 | if (entry.fh == NULL || entry.fattr == NULL) | 585 | if (entry.fh == NULL || entry.fattr == NULL) |
586 | goto out; | 586 | goto out; |
587 | 587 | ||
588 | entry.label = nfs4_label_alloc(NFS_SERVER(inode), GFP_NOWAIT); | ||
589 | if (IS_ERR(entry.label)) { | ||
590 | status = PTR_ERR(entry.label); | ||
591 | goto out; | ||
592 | } | ||
593 | |||
588 | array = nfs_readdir_get_array(page); | 594 | array = nfs_readdir_get_array(page); |
589 | if (IS_ERR(array)) { | 595 | if (IS_ERR(array)) { |
590 | status = PTR_ERR(array); | 596 | status = PTR_ERR(array); |
591 | goto out; | 597 | goto out_label_free; |
592 | } | 598 | } |
593 | memset(array, 0, sizeof(struct nfs_cache_array)); | 599 | memset(array, 0, sizeof(struct nfs_cache_array)); |
594 | array->eof_index = -1; | 600 | array->eof_index = -1; |
@@ -614,6 +620,8 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page, | |||
614 | nfs_readdir_free_large_page(pages_ptr, pages, array_size); | 620 | nfs_readdir_free_large_page(pages_ptr, pages, array_size); |
615 | out_release_array: | 621 | out_release_array: |
616 | nfs_readdir_release_array(page); | 622 | nfs_readdir_release_array(page); |
623 | out_label_free: | ||
624 | nfs4_label_free(entry.label); | ||
617 | out: | 625 | out: |
618 | nfs_free_fattr(entry.fattr); | 626 | nfs_free_fattr(entry.fattr); |
619 | nfs_free_fhandle(entry.fh); | 627 | nfs_free_fhandle(entry.fh); |
@@ -1083,6 +1091,10 @@ static int nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags) | |||
1083 | if (fhandle == NULL || fattr == NULL) | 1091 | if (fhandle == NULL || fattr == NULL) |
1084 | goto out_error; | 1092 | goto out_error; |
1085 | 1093 | ||
1094 | label = nfs4_label_alloc(NFS_SERVER(inode), GFP_NOWAIT); | ||
1095 | if (IS_ERR(label)) | ||
1096 | goto out_error; | ||
1097 | |||
1086 | error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr, label); | 1098 | error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr, label); |
1087 | if (error) | 1099 | if (error) |
1088 | goto out_bad; | 1100 | goto out_bad; |
@@ -1093,6 +1105,8 @@ static int nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags) | |||
1093 | 1105 | ||
1094 | nfs_free_fattr(fattr); | 1106 | nfs_free_fattr(fattr); |
1095 | nfs_free_fhandle(fhandle); | 1107 | nfs_free_fhandle(fhandle); |
1108 | nfs4_label_free(label); | ||
1109 | |||
1096 | out_set_verifier: | 1110 | out_set_verifier: |
1097 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); | 1111 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); |
1098 | out_valid: | 1112 | out_valid: |
@@ -1109,6 +1123,7 @@ out_zap_parent: | |||
1109 | out_bad: | 1123 | out_bad: |
1110 | nfs_free_fattr(fattr); | 1124 | nfs_free_fattr(fattr); |
1111 | nfs_free_fhandle(fhandle); | 1125 | nfs_free_fhandle(fhandle); |
1126 | nfs4_label_free(label); | ||
1112 | nfs_mark_for_revalidate(dir); | 1127 | nfs_mark_for_revalidate(dir); |
1113 | if (inode && S_ISDIR(inode->i_mode)) { | 1128 | if (inode && S_ISDIR(inode->i_mode)) { |
1114 | /* Purge readdir caches. */ | 1129 | /* Purge readdir caches. */ |
@@ -1129,6 +1144,7 @@ out_zap_parent: | |||
1129 | out_error: | 1144 | out_error: |
1130 | nfs_free_fattr(fattr); | 1145 | nfs_free_fattr(fattr); |
1131 | nfs_free_fhandle(fhandle); | 1146 | nfs_free_fhandle(fhandle); |
1147 | nfs4_label_free(label); | ||
1132 | dput(parent); | 1148 | dput(parent); |
1133 | dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) lookup returned error %d\n", | 1149 | dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) lookup returned error %d\n", |
1134 | __func__, dentry->d_parent->d_name.name, | 1150 | __func__, dentry->d_parent->d_name.name, |
@@ -1284,6 +1300,10 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in | |||
1284 | if (fhandle == NULL || fattr == NULL) | 1300 | if (fhandle == NULL || fattr == NULL) |
1285 | goto out; | 1301 | goto out; |
1286 | 1302 | ||
1303 | label = nfs4_label_alloc(NFS_SERVER(dir), GFP_NOWAIT); | ||
1304 | if (IS_ERR(label)) | ||
1305 | goto out; | ||
1306 | |||
1287 | parent = dentry->d_parent; | 1307 | parent = dentry->d_parent; |
1288 | /* Protect against concurrent sillydeletes */ | 1308 | /* Protect against concurrent sillydeletes */ |
1289 | nfs_block_sillyrename(parent); | 1309 | nfs_block_sillyrename(parent); |
@@ -1312,6 +1332,7 @@ no_entry: | |||
1312 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); | 1332 | nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); |
1313 | out_unblock_sillyrename: | 1333 | out_unblock_sillyrename: |
1314 | nfs_unblock_sillyrename(parent); | 1334 | nfs_unblock_sillyrename(parent); |
1335 | nfs4_label_free(label); | ||
1315 | out: | 1336 | out: |
1316 | nfs_free_fattr(fattr); | 1337 | nfs_free_fattr(fattr); |
1317 | nfs_free_fhandle(fhandle); | 1338 | nfs_free_fhandle(fhandle); |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 58e7bf876e6c..12e8ad85ae50 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -836,6 +836,13 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) | |||
836 | goto out; | 836 | goto out; |
837 | 837 | ||
838 | nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE); | 838 | nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE); |
839 | |||
840 | label = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL); | ||
841 | if (IS_ERR(label)) { | ||
842 | status = PTR_ERR(label); | ||
843 | goto out; | ||
844 | } | ||
845 | |||
839 | status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, label); | 846 | status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, label); |
840 | if (status != 0) { | 847 | if (status != 0) { |
841 | dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) getattr failed, error=%d\n", | 848 | dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) getattr failed, error=%d\n", |
@@ -846,7 +853,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) | |||
846 | if (!S_ISDIR(inode->i_mode)) | 853 | if (!S_ISDIR(inode->i_mode)) |
847 | set_bit(NFS_INO_STALE, &NFS_I(inode)->flags); | 854 | set_bit(NFS_INO_STALE, &NFS_I(inode)->flags); |
848 | } | 855 | } |
849 | goto out; | 856 | goto err_out; |
850 | } | 857 | } |
851 | 858 | ||
852 | status = nfs_refresh_inode(inode, fattr); | 859 | status = nfs_refresh_inode(inode, fattr); |
@@ -854,7 +861,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) | |||
854 | dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n", | 861 | dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n", |
855 | inode->i_sb->s_id, | 862 | inode->i_sb->s_id, |
856 | (long long)NFS_FILEID(inode), status); | 863 | (long long)NFS_FILEID(inode), status); |
857 | goto out; | 864 | goto err_out; |
858 | } | 865 | } |
859 | 866 | ||
860 | if (nfsi->cache_validity & NFS_INO_INVALID_ACL) | 867 | if (nfsi->cache_validity & NFS_INO_INVALID_ACL) |
@@ -864,7 +871,9 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) | |||
864 | inode->i_sb->s_id, | 871 | inode->i_sb->s_id, |
865 | (long long)NFS_FILEID(inode)); | 872 | (long long)NFS_FILEID(inode)); |
866 | 873 | ||
867 | out: | 874 | err_out: |
875 | nfs4_label_free(label); | ||
876 | out: | ||
868 | nfs_free_fattr(fattr); | 877 | nfs_free_fattr(fattr); |
869 | return status; | 878 | return status; |
870 | } | 879 | } |
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 004de2081554..e9488f5e1037 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -833,9 +833,14 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry, | |||
833 | p = kzalloc(sizeof(*p), gfp_mask); | 833 | p = kzalloc(sizeof(*p), gfp_mask); |
834 | if (p == NULL) | 834 | if (p == NULL) |
835 | goto err; | 835 | goto err; |
836 | |||
837 | p->f_label = nfs4_label_alloc(server, gfp_mask); | ||
838 | if (IS_ERR(p->f_label)) | ||
839 | goto err_free_p; | ||
840 | |||
836 | p->o_arg.seqid = nfs_alloc_seqid(&sp->so_seqid, gfp_mask); | 841 | p->o_arg.seqid = nfs_alloc_seqid(&sp->so_seqid, gfp_mask); |
837 | if (p->o_arg.seqid == NULL) | 842 | if (p->o_arg.seqid == NULL) |
838 | goto err_free; | 843 | goto err_free_label; |
839 | nfs_sb_active(dentry->d_sb); | 844 | nfs_sb_active(dentry->d_sb); |
840 | p->dentry = dget(dentry); | 845 | p->dentry = dget(dentry); |
841 | p->dir = parent; | 846 | p->dir = parent; |
@@ -889,7 +894,10 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry, | |||
889 | nfs4_init_opendata_res(p); | 894 | nfs4_init_opendata_res(p); |
890 | kref_init(&p->kref); | 895 | kref_init(&p->kref); |
891 | return p; | 896 | return p; |
892 | err_free: | 897 | |
898 | err_free_label: | ||
899 | nfs4_label_free(p->f_label); | ||
900 | err_free_p: | ||
893 | kfree(p); | 901 | kfree(p); |
894 | err: | 902 | err: |
895 | dput(parent); | 903 | dput(parent); |
@@ -906,6 +914,9 @@ static void nfs4_opendata_free(struct kref *kref) | |||
906 | if (p->state != NULL) | 914 | if (p->state != NULL) |
907 | nfs4_put_open_state(p->state); | 915 | nfs4_put_open_state(p->state); |
908 | nfs4_put_state_owner(p->owner); | 916 | nfs4_put_state_owner(p->owner); |
917 | |||
918 | nfs4_label_free(p->f_label); | ||
919 | |||
909 | dput(p->dir); | 920 | dput(p->dir); |
910 | dput(p->dentry); | 921 | dput(p->dentry); |
911 | nfs_sb_deactive(sb); | 922 | nfs_sb_deactive(sb); |
@@ -2020,10 +2031,18 @@ static int _nfs4_do_open(struct inode *dir, | |||
2020 | if (opendata == NULL) | 2031 | if (opendata == NULL) |
2021 | goto err_put_state_owner; | 2032 | goto err_put_state_owner; |
2022 | 2033 | ||
2034 | if (label) { | ||
2035 | olabel = nfs4_label_alloc(server, GFP_KERNEL); | ||
2036 | if (IS_ERR(olabel)) { | ||
2037 | status = PTR_ERR(olabel); | ||
2038 | goto err_opendata_put; | ||
2039 | } | ||
2040 | } | ||
2041 | |||
2023 | if (ctx_th && server->attr_bitmask[2] & FATTR4_WORD2_MDSTHRESHOLD) { | 2042 | if (ctx_th && server->attr_bitmask[2] & FATTR4_WORD2_MDSTHRESHOLD) { |
2024 | opendata->f_attr.mdsthreshold = pnfs_mdsthreshold_alloc(); | 2043 | opendata->f_attr.mdsthreshold = pnfs_mdsthreshold_alloc(); |
2025 | if (!opendata->f_attr.mdsthreshold) | 2044 | if (!opendata->f_attr.mdsthreshold) |
2026 | goto err_opendata_put; | 2045 | goto err_free_label; |
2027 | opendata->o_arg.open_bitmap = &nfs4_pnfs_open_bitmap[0]; | 2046 | opendata->o_arg.open_bitmap = &nfs4_pnfs_open_bitmap[0]; |
2028 | } | 2047 | } |
2029 | if (dentry->d_inode != NULL) | 2048 | if (dentry->d_inode != NULL) |
@@ -2031,7 +2050,7 @@ static int _nfs4_do_open(struct inode *dir, | |||
2031 | 2050 | ||
2032 | status = _nfs4_open_and_get_state(opendata, fmode, flags, &state); | 2051 | status = _nfs4_open_and_get_state(opendata, fmode, flags, &state); |
2033 | if (status != 0) | 2052 | if (status != 0) |
2034 | goto err_opendata_put; | 2053 | goto err_free_label; |
2035 | 2054 | ||
2036 | if ((opendata->o_arg.open_flags & O_EXCL) && | 2055 | if ((opendata->o_arg.open_flags & O_EXCL) && |
2037 | (opendata->o_arg.createmode != NFS4_CREATE_GUARDED)) { | 2056 | (opendata->o_arg.createmode != NFS4_CREATE_GUARDED)) { |
@@ -2053,10 +2072,14 @@ static int _nfs4_do_open(struct inode *dir, | |||
2053 | kfree(opendata->f_attr.mdsthreshold); | 2072 | kfree(opendata->f_attr.mdsthreshold); |
2054 | opendata->f_attr.mdsthreshold = NULL; | 2073 | opendata->f_attr.mdsthreshold = NULL; |
2055 | 2074 | ||
2075 | nfs4_label_free(olabel); | ||
2076 | |||
2056 | nfs4_opendata_put(opendata); | 2077 | nfs4_opendata_put(opendata); |
2057 | nfs4_put_state_owner(sp); | 2078 | nfs4_put_state_owner(sp); |
2058 | *res = state; | 2079 | *res = state; |
2059 | return 0; | 2080 | return 0; |
2081 | err_free_label: | ||
2082 | nfs4_label_free(olabel); | ||
2060 | err_opendata_put: | 2083 | err_opendata_put: |
2061 | kfree(opendata->f_attr.mdsthreshold); | 2084 | kfree(opendata->f_attr.mdsthreshold); |
2062 | nfs4_opendata_put(opendata); | 2085 | nfs4_opendata_put(opendata); |
@@ -2670,16 +2693,23 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *mntfh, | |||
2670 | return error; | 2693 | return error; |
2671 | } | 2694 | } |
2672 | 2695 | ||
2696 | label = nfs4_label_alloc(server, GFP_KERNEL); | ||
2697 | if (IS_ERR(label)) | ||
2698 | return PTR_ERR(label); | ||
2699 | |||
2673 | error = nfs4_proc_getattr(server, mntfh, fattr, label); | 2700 | error = nfs4_proc_getattr(server, mntfh, fattr, label); |
2674 | if (error < 0) { | 2701 | if (error < 0) { |
2675 | dprintk("nfs4_get_root: getattr error = %d\n", -error); | 2702 | dprintk("nfs4_get_root: getattr error = %d\n", -error); |
2676 | return error; | 2703 | goto err_free_label; |
2677 | } | 2704 | } |
2678 | 2705 | ||
2679 | if (fattr->valid & NFS_ATTR_FATTR_FSID && | 2706 | if (fattr->valid & NFS_ATTR_FATTR_FSID && |
2680 | !nfs_fsid_equal(&server->fsid, &fattr->fsid)) | 2707 | !nfs_fsid_equal(&server->fsid, &fattr->fsid)) |
2681 | memcpy(&server->fsid, &fattr->fsid, sizeof(server->fsid)); | 2708 | memcpy(&server->fsid, &fattr->fsid, sizeof(server->fsid)); |
2682 | 2709 | ||
2710 | err_free_label: | ||
2711 | nfs4_label_free(label); | ||
2712 | |||
2683 | return error; | 2713 | return error; |
2684 | } | 2714 | } |
2685 | 2715 | ||
@@ -2785,6 +2815,7 @@ nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, | |||
2785 | struct inode *inode = dentry->d_inode; | 2815 | struct inode *inode = dentry->d_inode; |
2786 | struct rpc_cred *cred = NULL; | 2816 | struct rpc_cred *cred = NULL; |
2787 | struct nfs4_state *state = NULL; | 2817 | struct nfs4_state *state = NULL; |
2818 | struct nfs4_label *label = NULL; | ||
2788 | int status; | 2819 | int status; |
2789 | 2820 | ||
2790 | if (pnfs_ld_layoutret_on_setattr(inode)) | 2821 | if (pnfs_ld_layoutret_on_setattr(inode)) |
@@ -2811,9 +2842,15 @@ nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, | |||
2811 | } | 2842 | } |
2812 | } | 2843 | } |
2813 | 2844 | ||
2814 | status = nfs4_do_setattr(inode, cred, fattr, sattr, state, NULL, NULL); | 2845 | label = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL); |
2846 | if (IS_ERR(label)) | ||
2847 | return PTR_ERR(label); | ||
2848 | |||
2849 | status = nfs4_do_setattr(inode, cred, fattr, sattr, state, NULL, label); | ||
2815 | if (status == 0) | 2850 | if (status == 0) |
2816 | nfs_setattr_update_inode(inode, sattr); | 2851 | nfs_setattr_update_inode(inode, sattr); |
2852 | |||
2853 | nfs4_label_free(label); | ||
2817 | return status; | 2854 | return status; |
2818 | } | 2855 | } |
2819 | 2856 | ||
@@ -3193,7 +3230,7 @@ static int _nfs4_proc_rename(struct inode *old_dir, struct qstr *old_name, | |||
3193 | .rpc_resp = &res, | 3230 | .rpc_resp = &res, |
3194 | }; | 3231 | }; |
3195 | int status = -ENOMEM; | 3232 | int status = -ENOMEM; |
3196 | 3233 | ||
3197 | status = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, &res.seq_res, 1); | 3234 | status = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, &res.seq_res, 1); |
3198 | if (!status) { | 3235 | if (!status) { |
3199 | update_changeattr(old_dir, &res.old_cinfo); | 3236 | update_changeattr(old_dir, &res.old_cinfo); |
@@ -3240,11 +3277,21 @@ static int _nfs4_proc_link(struct inode *inode, struct inode *dir, struct qstr * | |||
3240 | if (res.fattr == NULL) | 3277 | if (res.fattr == NULL) |
3241 | goto out; | 3278 | goto out; |
3242 | 3279 | ||
3280 | res.label = nfs4_label_alloc(server, GFP_KERNEL); | ||
3281 | if (IS_ERR(res.label)) { | ||
3282 | status = PTR_ERR(res.label); | ||
3283 | goto out; | ||
3284 | } | ||
3285 | |||
3243 | status = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, &res.seq_res, 1); | 3286 | status = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, &res.seq_res, 1); |
3244 | if (!status) { | 3287 | if (!status) { |
3245 | update_changeattr(dir, &res.cinfo); | 3288 | update_changeattr(dir, &res.cinfo); |
3246 | nfs_post_op_update_inode(inode, res.fattr); | 3289 | nfs_post_op_update_inode(inode, res.fattr); |
3247 | } | 3290 | } |
3291 | |||
3292 | |||
3293 | nfs4_label_free(res.label); | ||
3294 | |||
3248 | out: | 3295 | out: |
3249 | nfs_free_fattr(res.fattr); | 3296 | nfs_free_fattr(res.fattr); |
3250 | return status; | 3297 | return status; |
@@ -3280,6 +3327,10 @@ static struct nfs4_createdata *nfs4_alloc_createdata(struct inode *dir, | |||
3280 | if (data != NULL) { | 3327 | if (data != NULL) { |
3281 | struct nfs_server *server = NFS_SERVER(dir); | 3328 | struct nfs_server *server = NFS_SERVER(dir); |
3282 | 3329 | ||
3330 | data->label = nfs4_label_alloc(server, GFP_KERNEL); | ||
3331 | if (IS_ERR(data->label)) | ||
3332 | goto out_free; | ||
3333 | |||
3283 | data->msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CREATE]; | 3334 | data->msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CREATE]; |
3284 | data->msg.rpc_argp = &data->arg; | 3335 | data->msg.rpc_argp = &data->arg; |
3285 | data->msg.rpc_resp = &data->res; | 3336 | data->msg.rpc_resp = &data->res; |
@@ -3296,6 +3347,9 @@ static struct nfs4_createdata *nfs4_alloc_createdata(struct inode *dir, | |||
3296 | nfs_fattr_init(data->res.fattr); | 3347 | nfs_fattr_init(data->res.fattr); |
3297 | } | 3348 | } |
3298 | return data; | 3349 | return data; |
3350 | out_free: | ||
3351 | kfree(data); | ||
3352 | return NULL; | ||
3299 | } | 3353 | } |
3300 | 3354 | ||
3301 | static int nfs4_do_create(struct inode *dir, struct dentry *dentry, struct nfs4_createdata *data) | 3355 | static int nfs4_do_create(struct inode *dir, struct dentry *dentry, struct nfs4_createdata *data) |
@@ -3311,6 +3365,7 @@ static int nfs4_do_create(struct inode *dir, struct dentry *dentry, struct nfs4_ | |||
3311 | 3365 | ||
3312 | static void nfs4_free_createdata(struct nfs4_createdata *data) | 3366 | static void nfs4_free_createdata(struct nfs4_createdata *data) |
3313 | { | 3367 | { |
3368 | nfs4_label_free(data->label); | ||
3314 | kfree(data); | 3369 | kfree(data); |
3315 | } | 3370 | } |
3316 | 3371 | ||