diff options
Diffstat (limited to 'fs/nfsd/nfs4recover.c')
-rw-r--r-- | fs/nfsd/nfs4recover.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 80a0be9ed008..0b3e875d1abd 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c | |||
@@ -117,8 +117,7 @@ out_no_tfm: | |||
117 | return status; | 117 | return status; |
118 | } | 118 | } |
119 | 119 | ||
120 | int | 120 | void nfsd4_create_clid_dir(struct nfs4_client *clp) |
121 | nfsd4_create_clid_dir(struct nfs4_client *clp) | ||
122 | { | 121 | { |
123 | const struct cred *original_cred; | 122 | const struct cred *original_cred; |
124 | char *dname = clp->cl_recdir; | 123 | char *dname = clp->cl_recdir; |
@@ -127,13 +126,14 @@ nfsd4_create_clid_dir(struct nfs4_client *clp) | |||
127 | 126 | ||
128 | dprintk("NFSD: nfsd4_create_clid_dir for \"%s\"\n", dname); | 127 | dprintk("NFSD: nfsd4_create_clid_dir for \"%s\"\n", dname); |
129 | 128 | ||
130 | if (!rec_file || clp->cl_firststate) | 129 | if (clp->cl_firststate) |
131 | return 0; | 130 | return; |
132 | |||
133 | clp->cl_firststate = 1; | 131 | clp->cl_firststate = 1; |
132 | if (!rec_file) | ||
133 | return; | ||
134 | status = nfs4_save_creds(&original_cred); | 134 | status = nfs4_save_creds(&original_cred); |
135 | if (status < 0) | 135 | if (status < 0) |
136 | return status; | 136 | return; |
137 | 137 | ||
138 | dir = rec_file->f_path.dentry; | 138 | dir = rec_file->f_path.dentry; |
139 | /* lock the parent */ | 139 | /* lock the parent */ |
@@ -144,8 +144,15 @@ nfsd4_create_clid_dir(struct nfs4_client *clp) | |||
144 | status = PTR_ERR(dentry); | 144 | status = PTR_ERR(dentry); |
145 | goto out_unlock; | 145 | goto out_unlock; |
146 | } | 146 | } |
147 | status = -EEXIST; | ||
148 | if (dentry->d_inode) | 147 | if (dentry->d_inode) |
148 | /* | ||
149 | * In the 4.1 case, where we're called from | ||
150 | * reclaim_complete(), records from the previous reboot | ||
151 | * may still be left, so this is OK. | ||
152 | * | ||
153 | * In the 4.0 case, we should never get here; but we may | ||
154 | * as well be forgiving and just succeed silently. | ||
155 | */ | ||
149 | goto out_put; | 156 | goto out_put; |
150 | status = mnt_want_write_file(rec_file); | 157 | status = mnt_want_write_file(rec_file); |
151 | if (status) | 158 | if (status) |
@@ -164,7 +171,6 @@ out_unlock: | |||
164 | " and is writeable", status, | 171 | " and is writeable", status, |
165 | user_recovery_dirname); | 172 | user_recovery_dirname); |
166 | nfs4_reset_creds(original_cred); | 173 | nfs4_reset_creds(original_cred); |
167 | return status; | ||
168 | } | 174 | } |
169 | 175 | ||
170 | typedef int (recdir_func)(struct dentry *, struct dentry *); | 176 | typedef int (recdir_func)(struct dentry *, struct dentry *); |