NFS: Remove the nfs4_label from the nfs_entry struct
authorAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 22 Oct 2021 17:11:01 +0000 (13:11 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 5 Nov 2021 18:54:39 +0000 (14:54 -0400)
And instead allocate the fattr using nfs_alloc_fattr_with_label()

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/dir.c
fs/nfs/nfs4xdr.c
include/linux/nfs_xdr.h

index 36cb1012c7e142228912d48e3c3889726092b866..92530c3c1694e6f329783270d84b90b42088a66d 100644 (file)
@@ -682,7 +682,8 @@ again:
                        nfs_set_verifier(dentry, dir_verifier);
                        status = nfs_refresh_inode(d_inode(dentry), entry->fattr);
                        if (!status)
-                               nfs_setsecurity(d_inode(dentry), entry->fattr, entry->label);
+                               nfs_setsecurity(d_inode(dentry), entry->fattr,
+                                               entry->fattr->label);
                        goto out;
                } else {
                        d_invalidate(dentry);
@@ -696,7 +697,7 @@ again:
                goto out;
        }
 
-       inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr, entry->label);
+       inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr, entry->fattr->label);
        alias = d_splice_alias(inode, dentry);
        d_lookup_done(dentry);
        if (alias) {
@@ -732,8 +733,8 @@ static int nfs_readdir_page_filler(struct nfs_readdir_descriptor *desc,
        xdr_set_scratch_page(&stream, scratch);
 
        do {
-               if (entry->label)
-                       entry->label->len = NFS4_MAXLABELLEN;
+               if (entry->fattr->label)
+                       entry->fattr->label->len = NFS4_MAXLABELLEN;
 
                status = xdr_decode(desc, entry, &stream);
                if (status != 0)
@@ -838,21 +839,15 @@ static int nfs_readdir_xdr_to_array(struct nfs_readdir_descriptor *desc,
                return -ENOMEM;
        entry->cookie = nfs_readdir_page_last_cookie(page);
        entry->fh = nfs_alloc_fhandle();
-       entry->fattr = nfs_alloc_fattr();
+       entry->fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
        entry->server = NFS_SERVER(inode);
        if (entry->fh == NULL || entry->fattr == NULL)
                goto out;
 
-       entry->label = nfs4_label_alloc(NFS_SERVER(inode), GFP_NOWAIT);
-       if (IS_ERR(entry->label)) {
-               status = PTR_ERR(entry->label);
-               goto out;
-       }
-
        array_size = (dtsize + PAGE_SIZE - 1) >> PAGE_SHIFT;
        pages = nfs_readdir_alloc_pages(array_size);
        if (!pages)
-               goto out_release_label;
+               goto out;
 
        do {
                unsigned int pglen;
@@ -875,8 +870,6 @@ static int nfs_readdir_xdr_to_array(struct nfs_readdir_descriptor *desc,
        } while (!status && nfs_readdir_page_needs_filling(page));
 
        nfs_readdir_free_pages(pages, array_size);
-out_release_label:
-       nfs4_label_free(entry->label);
 out:
        nfs_free_fattr(entry->fattr);
        nfs_free_fhandle(entry->fh);
index 63a12181e6c799c11687b066ad2383d9b104d318..fba89f82e7b7b212004f33ec25db3ec05add882c 100644 (file)
@@ -7467,7 +7467,7 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
                return -EAGAIN;
 
        if (decode_getfattr_attrs(xdr, bitmap, entry->fattr, entry->fh,
-                       NULL, entry->label, entry->server) < 0)
+                       NULL, entry->fattr->label, entry->server) < 0)
                return -EAGAIN;
        if (entry->fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
                entry->ino = entry->fattr->mounted_on_fileid;
index e9698b6278a52856023be6deceb49a08167e27ac..9960f66280661656941c9531a30d8eea422bd90d 100644 (file)
@@ -753,7 +753,6 @@ struct nfs_entry {
        int                     eof;
        struct nfs_fh *         fh;
        struct nfs_fattr *      fattr;
-       struct nfs4_label  *label;
        unsigned char           d_type;
        struct nfs_server *     server;
 };