These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / fs / nfsd / nfs4recover.c
index d88ea7b..e3d4709 100644 (file)
@@ -272,6 +272,7 @@ nfsd4_list_rec_dir(recdir_func *f, struct nfsd_net *nn)
                .ctx.actor = nfsd4_build_namelist,
                .names = LIST_HEAD_INIT(ctx.names)
        };
+       struct name_list *entry, *tmp;
        int status;
 
        status = nfs4_save_creds(&original_cred);
@@ -286,9 +287,8 @@ nfsd4_list_rec_dir(recdir_func *f, struct nfsd_net *nn)
 
        status = iterate_dir(nn->rec_file, &ctx.ctx);
        mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
-       while (!list_empty(&ctx.names)) {
-               struct name_list *entry;
-               entry = list_entry(ctx.names.next, struct name_list, list);
+
+       list_for_each_entry_safe(entry, tmp, &ctx.names, list) {
                if (!status) {
                        struct dentry *dentry;
                        dentry = lookup_one_len(entry->name, dir, HEXDIR_LEN-1);
@@ -304,6 +304,12 @@ nfsd4_list_rec_dir(recdir_func *f, struct nfsd_net *nn)
        }
        mutex_unlock(&d_inode(dir)->i_mutex);
        nfs4_reset_creds(original_cred);
+
+       list_for_each_entry_safe(entry, tmp, &ctx.names, list) {
+               dprintk("NFSD: %s. Left entry %s\n", __func__, entry->name);
+               list_del(&entry->list);
+               kfree(entry);
+       }
        return status;
 }
 
@@ -541,8 +547,7 @@ nfsd4_legacy_tracking_init(struct net *net)
 
        /* XXX: The legacy code won't work in a container */
        if (net != &init_net) {
-               WARN(1, KERN_ERR "NFSD: attempt to initialize legacy client "
-                       "tracking in a container!\n");
+               pr_warn("NFSD: attempt to initialize legacy client tracking in a container ignored.\n");
                return -EINVAL;
        }
 
@@ -1254,8 +1259,7 @@ nfsd4_umh_cltrack_init(struct net *net)
 
        /* XXX: The usermode helper s not working in container yet. */
        if (net != &init_net) {
-               WARN(1, KERN_ERR "NFSD: attempt to initialize umh client "
-                       "tracking in a container!\n");
+               pr_warn("NFSD: attempt to initialize umh client tracking in a container ignored.\n");
                return -EINVAL;
        }