Lines Matching +full:- +full:- +full:retry +full:- +full:all +full:- +full:errors

1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
8 #include <linux/backing-dev.h>
24 vnode->fid.vid, vnode->fid.vnode, len, start); in afs_pages_written_back()
32 * writes on the vnode. wreq->netfs_priv2 will contain the last writeback key
34 * wreq->netfs_priv will be set to the key itself or NULL.
38 struct afs_wb_key *wbk, *old = wreq->netfs_priv2; in afs_get_writeback_key()
39 struct afs_vnode *vnode = AFS_FS_I(wreq->inode); in afs_get_writeback_key()
41 key_put(wreq->netfs_priv); in afs_get_writeback_key()
42 wreq->netfs_priv = NULL; in afs_get_writeback_key()
43 wreq->netfs_priv2 = NULL; in afs_get_writeback_key()
45 spin_lock(&vnode->wb_lock); in afs_get_writeback_key()
49 wbk = list_first_entry(&vnode->wb_keys, struct afs_wb_key, vnode_link); in afs_get_writeback_key()
51 list_for_each_entry_from(wbk, &vnode->wb_keys, vnode_link) { in afs_get_writeback_key()
52 _debug("wbk %u", key_serial(wbk->key)); in afs_get_writeback_key()
53 if (key_validate(wbk->key) == 0) { in afs_get_writeback_key()
54 refcount_inc(&wbk->usage); in afs_get_writeback_key()
55 wreq->netfs_priv = key_get(wbk->key); in afs_get_writeback_key()
56 wreq->netfs_priv2 = wbk; in afs_get_writeback_key()
57 _debug("USE WB KEY %u", key_serial(wbk->key)); in afs_get_writeback_key()
62 spin_unlock(&vnode->wb_lock); in afs_get_writeback_key()
69 struct afs_vnode *vnode = op->file[0].vnode; in afs_store_data_success()
71 op->ctime = op->file[0].scb.status.mtime_client; in afs_store_data_success()
72 afs_vnode_commit_status(op, &op->file[0]); in afs_store_data_success()
74 afs_pages_written_back(vnode, op->store.pos, op->store.size); in afs_store_data_success()
76 atomic_long_add(op->store.size, &afs_v2net(vnode)->n_store_bytes); in afs_store_data_success()
92 struct netfs_io_stream *stream = &subreq->rreq->io_streams[subreq->stream_nr]; in afs_prepare_write()
94 //if (test_bit(NETFS_SREQ_RETRYING, &subreq->flags)) in afs_prepare_write()
95 // subreq->max_len = 512 * 1024; in afs_prepare_write()
97 stream->sreq_max_len = 256 * 1024 * 1024; in afs_prepare_write()
106 struct netfs_io_request *wreq = subreq->rreq; in afs_issue_write_worker()
108 struct afs_vnode *vnode = AFS_FS_I(wreq->inode); in afs_issue_write_worker()
109 unsigned long long pos = subreq->start + subreq->transferred; in afs_issue_write_worker()
110 size_t len = subreq->len - subreq->transferred; in afs_issue_write_worker()
111 int ret = -ENOKEY; in afs_issue_write_worker()
114 wreq->debug_id, subreq->debug_index, in afs_issue_write_worker()
115 vnode->volume->name, in afs_issue_write_worker()
116 vnode->fid.vid, in afs_issue_write_worker()
117 vnode->fid.vnode, in afs_issue_write_worker()
118 vnode->fid.unique, in afs_issue_write_worker()
122 if (subreq->debug_index == 3) in afs_issue_write_worker()
123 return netfs_write_subrequest_terminated(subreq, -ENOANO); in afs_issue_write_worker()
125 if (!subreq->retry_count) { in afs_issue_write_worker()
126 set_bit(NETFS_SREQ_NEED_RETRY, &subreq->flags); in afs_issue_write_worker()
127 return netfs_write_subrequest_terminated(subreq, -EAGAIN); in afs_issue_write_worker()
131 op = afs_alloc_operation(wreq->netfs_priv, vnode->volume); in afs_issue_write_worker()
133 return netfs_write_subrequest_terminated(subreq, -EAGAIN); in afs_issue_write_worker()
136 op->file[0].dv_delta = 1; in afs_issue_write_worker()
137 op->file[0].modification = true; in afs_issue_write_worker()
138 op->store.pos = pos; in afs_issue_write_worker()
139 op->store.size = len; in afs_issue_write_worker()
140 op->flags |= AFS_OPERATION_UNINTR; in afs_issue_write_worker()
141 op->ops = &afs_store_data_operation; in afs_issue_write_worker()
145 op->store.write_iter = &subreq->io_iter; in afs_issue_write_worker()
146 op->store.i_size = umax(pos + len, vnode->netfs.remote_i_size); in afs_issue_write_worker()
147 op->mtime = inode_get_mtime(&vnode->netfs.inode); in afs_issue_write_worker()
153 __set_bit(NETFS_SREQ_MADE_PROGRESS, &subreq->flags); in afs_issue_write_worker()
155 case -EACCES: in afs_issue_write_worker()
156 case -EPERM: in afs_issue_write_worker()
157 case -ENOKEY: in afs_issue_write_worker()
158 case -EKEYEXPIRED: in afs_issue_write_worker()
159 case -EKEYREJECTED: in afs_issue_write_worker()
160 case -EKEYREVOKED: in afs_issue_write_worker()
161 /* If there are more keys we can try, use the retry algorithm in afs_issue_write_worker()
164 if (wreq->netfs_priv2) in afs_issue_write_worker()
165 set_bit(NETFS_SREQ_NEED_RETRY, &subreq->flags); in afs_issue_write_worker()
169 netfs_write_subrequest_terminated(subreq, ret < 0 ? ret : subreq->len); in afs_issue_write_worker()
174 subreq->work.func = afs_issue_write_worker; in afs_issue_write()
175 if (!queue_work(system_dfl_wq, &subreq->work)) in afs_issue_write()
181 * called if writeback only has copy-to-cache to deal with.
185 if (S_ISREG(wreq->inode->i_mode)) in afs_begin_writeback()
190 * Prepare to retry the writes in request. Use this to try rotating the
196 list_first_entry(&stream->subrequests, in afs_retry_request()
199 switch (wreq->origin) { in afs_retry_request()
212 switch (subreq->error) { in afs_retry_request()
213 case -EACCES: in afs_retry_request()
214 case -EPERM: in afs_retry_request()
215 case -ENOKEY: in afs_retry_request()
216 case -EKEYEXPIRED: in afs_retry_request()
217 case -EKEYREJECTED: in afs_retry_request()
218 case -EKEYREVOKED: in afs_retry_request()
220 if (!wreq->netfs_priv) in afs_retry_request()
221 stream->failed = true; in afs_retry_request()
231 struct afs_vnode *vnode = AFS_FS_I(mapping->host); in afs_writepages()
238 if (wbc->sync_mode == WB_SYNC_ALL) in afs_writepages()
239 down_read(&vnode->validate_lock); in afs_writepages()
240 else if (!down_read_trylock(&vnode->validate_lock)) in afs_writepages()
244 up_read(&vnode->validate_lock); in afs_writepages()
249 * flush any dirty pages for this process, and check for write errors.
250 * - the return status from this call provides a reliable indication of
251 * whether any write errors occurred for this process.
256 struct afs_file *af = file->private_data; in afs_fsync()
260 vnode->fid.vid, vnode->fid.vnode, file, in afs_fsync()
263 ret = afs_validate(vnode, af->key); in afs_fsync()
271 * notification that a previously read-only page is about to become writable
272 * - if it returns an error, the caller will deliver a bus error signal
276 struct file *file = vmf->vma->vm_file; in afs_page_mkwrite()
284 * Prune the keys cached for writeback. The caller must hold vnode->wb_lock.
292 spin_lock(&vnode->wb_lock); in afs_prune_wb_keys()
294 if (!mapping_tagged(&vnode->netfs.inode.i_data, PAGECACHE_TAG_WRITEBACK) && in afs_prune_wb_keys()
295 !mapping_tagged(&vnode->netfs.inode.i_data, PAGECACHE_TAG_DIRTY)) { in afs_prune_wb_keys()
296 list_for_each_entry_safe(wbk, tmp, &vnode->wb_keys, vnode_link) { in afs_prune_wb_keys()
297 if (refcount_read(&wbk->usage) == 1) in afs_prune_wb_keys()
298 list_move(&wbk->vnode_link, &graveyard); in afs_prune_wb_keys()
302 spin_unlock(&vnode->wb_lock); in afs_prune_wb_keys()
306 list_del(&wbk->vnode_link); in afs_prune_wb_keys()