Home
last modified time | relevance | path

Searched refs:subreq (Results 1 – 25 of 40) sorted by relevance

12

/linux/fs/netfs/
H A Dread_retry.c13 struct netfs_io_subrequest *subreq) in netfs_reissue_read() argument
15 subreq->error = 0; in netfs_reissue_read()
16 __clear_bit(NETFS_SREQ_MADE_PROGRESS, &subreq->flags); in netfs_reissue_read()
17 __set_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags); in netfs_reissue_read()
19 subreq->rreq->netfs_ops->issue_read(subreq); in netfs_reissue_read()
28 struct netfs_io_subrequest *subreq; in netfs_retry_read_subrequests() local
45 list_for_each_entry(subreq, &stream->subrequests, rreq_link) { in netfs_retry_read_subrequests()
46 if (test_bit(NETFS_SREQ_FAILED, &subreq->flags)) in netfs_retry_read_subrequests()
48 if (__test_and_clear_bit(NETFS_SREQ_NEED_RETRY, &subreq->flags)) { in netfs_retry_read_subrequests()
49 __clear_bit(NETFS_SREQ_MADE_PROGRESS, &subreq->flags); in netfs_retry_read_subrequests()
[all …]
H A Dwrite_retry.c36 struct netfs_io_subrequest *subreq; in netfs_retry_write_stream() local
38 list_for_each_entry(subreq, &stream->subrequests, rreq_link) { in netfs_retry_write_stream()
39 if (test_bit(NETFS_SREQ_FAILED, &subreq->flags)) in netfs_retry_write_stream()
41 if (__test_and_clear_bit(NETFS_SREQ_NEED_RETRY, &subreq->flags)) { in netfs_retry_write_stream()
44 netfs_reset_iter(subreq); in netfs_retry_write_stream()
45 source = subreq->io_iter; in netfs_retry_write_stream()
46 netfs_get_subrequest(subreq, netfs_sreq_trace_get_resubmit); in netfs_retry_write_stream()
47 netfs_reissue_write(stream, subreq, &source); in netfs_retry_write_stream()
56 struct netfs_io_subrequest *subreq = NULL, *from, *to, *tmp; in netfs_retry_write_stream() local
76 subreq = list_entry(next, struct netfs_io_subrequest, rreq_link); in netfs_retry_write_stream()
[all …]
H A Ddirect_write.c67 struct netfs_io_subrequest *subreq) in netfs_unbuffered_write_collect() argument
69 trace_netfs_collect_sreq(wreq, subreq); in netfs_unbuffered_write_collect()
72 list_del_init(&subreq->rreq_link); in netfs_unbuffered_write_collect()
75 wreq->transferred += subreq->transferred; in netfs_unbuffered_write_collect()
76 iov_iter_advance(&wreq->buffer.iter, subreq->transferred); in netfs_unbuffered_write_collect()
78 stream->collected_to = subreq->start + subreq->transferred; in netfs_unbuffered_write_collect()
80 netfs_put_subrequest(subreq, netfs_sreq_trace_put_done); in netfs_unbuffered_write_collect()
96 struct netfs_io_subrequest *subreq = NULL; in netfs_unbuffered_write() local
110 if (!subreq) { in netfs_unbuffered_write()
112 subreq = stream->construct; in netfs_unbuffered_write()
[all …]
H A Dread_single.c62 struct netfs_io_subrequest *subreq) in netfs_single_cache_prepare_read() argument
67 subreq->source = NETFS_DOWNLOAD_FROM_SERVER; in netfs_single_cache_prepare_read()
70 subreq->source = cres->ops->prepare_read(subreq, rreq->i_size); in netfs_single_cache_prepare_read()
71 trace_netfs_sreq(subreq, netfs_sreq_trace_prepare); in netfs_single_cache_prepare_read()
76 struct netfs_io_subrequest *subreq) in netfs_single_read_cache() argument
80 _enter("R=%08x[%x]", rreq->debug_id, subreq->debug_index); in netfs_single_read_cache()
82 cres->ops->read(cres, subreq->start, &subreq->io_iter, NETFS_READ_HOLE_FAIL, in netfs_single_read_cache()
83 netfs_cache_read_terminated, subreq); in netfs_single_read_cache()
92 struct netfs_io_subrequest *subreq; in netfs_single_dispatch_read() local
95 subreq = netfs_alloc_subrequest(rreq); in netfs_single_dispatch_read()
[all …]
H A Dread_collect.c28 static void netfs_clear_unread(struct netfs_io_subrequest *subreq) in netfs_clear_unread() argument
30 netfs_reset_iter(subreq); in netfs_clear_unread()
31 WARN_ON_ONCE(subreq->len - subreq->transferred != iov_iter_count(&subreq->io_iter)); in netfs_clear_unread()
32 iov_iter_zero(iov_iter_count(&subreq->io_iter), &subreq->io_iter); in netfs_clear_unread()
33 if (subreq->start + subreq->transferred >= subreq->rreq->i_size) in netfs_clear_unread()
34 __set_bit(NETFS_SREQ_HIT_EOF, &subreq->flags); in netfs_clear_unread()
477 void netfs_read_subreq_progress(struct netfs_io_subrequest *subreq) in netfs_read_subreq_progress() argument
479 struct netfs_io_request *rreq = subreq->rreq; in netfs_read_subreq_progress()
483 trace_netfs_sreq(subreq, netfs_sreq_trace_progress); in netfs_read_subreq_progress()
488 if (subreq->start + subreq->transferred > rreq->cleaned_to + fsize && in netfs_read_subreq_progress()
[all …]
H A Dbuffered_read.c81 static ssize_t netfs_prepare_read_iterator(struct netfs_io_subrequest *subreq, in netfs_prepare_read_iterator() argument
84 struct netfs_io_request *rreq = subreq->rreq; in netfs_prepare_read_iterator()
85 size_t rsize = subreq->len; in netfs_prepare_read_iterator()
87 if (subreq->source == NETFS_DOWNLOAD_FROM_SERVER) in netfs_prepare_read_iterator()
100 while (rreq->submitted < subreq->start + rsize) { in netfs_prepare_read_iterator()
112 subreq->len = rsize; in netfs_prepare_read_iterator()
118 subreq->len = limit; in netfs_prepare_read_iterator()
119 trace_netfs_sreq(subreq, netfs_sreq_trace_limited); in netfs_prepare_read_iterator()
123 subreq->io_iter = rreq->buffer.iter; in netfs_prepare_read_iterator()
125 iov_iter_truncate(&subreq->io_iter, subreq->len); in netfs_prepare_read_iterator()
[all …]
H A Dobjects.c96 struct netfs_io_subrequest *subreq; in netfs_clear_subrequests() local
103 subreq = list_first_entry(&stream->subrequests, in netfs_clear_subrequests()
105 list_del(&subreq->rreq_link); in netfs_clear_subrequests()
106 netfs_put_subrequest(subreq, netfs_sreq_trace_put_clear); in netfs_clear_subrequests()
199 struct netfs_io_subrequest *subreq; in netfs_alloc_subrequest() local
204 subreq = mempool_alloc(rreq->netfs_ops->subrequest_pool ?: &netfs_subrequest_pool, in netfs_alloc_subrequest()
206 if (subreq) in netfs_alloc_subrequest()
211 memset(subreq, 0, kmem_cache_size(cache)); in netfs_alloc_subrequest()
212 INIT_WORK(&subreq->work, NULL); in netfs_alloc_subrequest()
213 INIT_LIST_HEAD(&subreq->rreq_link); in netfs_alloc_subrequest()
[all …]
H A Ddirect_read.c19 static void netfs_prepare_dio_read_iterator(struct netfs_io_subrequest *subreq) in netfs_prepare_dio_read_iterator() argument
21 struct netfs_io_request *rreq = subreq->rreq; in netfs_prepare_dio_read_iterator()
24 rsize = umin(subreq->len, rreq->io_streams[0].sreq_max_len); in netfs_prepare_dio_read_iterator()
25 subreq->len = rsize; in netfs_prepare_dio_read_iterator()
32 subreq->len = limit; in netfs_prepare_dio_read_iterator()
33 trace_netfs_sreq(subreq, netfs_sreq_trace_limited); in netfs_prepare_dio_read_iterator()
37 trace_netfs_sreq(subreq, netfs_sreq_trace_prepare); in netfs_prepare_dio_read_iterator()
39 subreq->io_iter = rreq->buffer.iter; in netfs_prepare_dio_read_iterator()
40 iov_iter_truncate(&subreq->io_iter, subreq->len); in netfs_prepare_dio_read_iterator()
41 iov_iter_advance(&rreq->buffer.iter, subreq->len); in netfs_prepare_dio_read_iterator()
[all …]
H A Dwrite_issue.c146 void netfs_prepare_write_failed(struct netfs_io_subrequest *subreq) in netfs_prepare_write_failed() argument
148 __set_bit(NETFS_SREQ_FAILED, &subreq->flags); in netfs_prepare_write_failed()
149 trace_netfs_sreq(subreq, netfs_sreq_trace_prep_failed); in netfs_prepare_write_failed()
161 struct netfs_io_subrequest *subreq; in netfs_prepare_write() local
172 subreq = netfs_alloc_subrequest(wreq); in netfs_prepare_write()
173 subreq->source = stream->source; in netfs_prepare_write()
174 subreq->start = start; in netfs_prepare_write()
175 subreq->stream_nr = stream->stream_nr; in netfs_prepare_write()
176 subreq->io_iter = *wreq_iter; in netfs_prepare_write()
178 _enter("R=%x[%x]", wreq->debug_id, subreq->debug_index); in netfs_prepare_write()
[all …]
H A Dwrite_collect.c461 struct netfs_io_subrequest *subreq = _op; in netfs_write_subrequest_terminated() local
462 struct netfs_io_request *wreq = subreq->rreq; in netfs_write_subrequest_terminated()
464 _enter("%x[%x] %zd", wreq->debug_id, subreq->debug_index, transferred_or_error); in netfs_write_subrequest_terminated()
466 switch (subreq->source) { in netfs_write_subrequest_terminated()
478 subreq->error = transferred_or_error; in netfs_write_subrequest_terminated()
480 if (!test_bit(NETFS_SREQ_NEED_RETRY, &subreq->flags)) { in netfs_write_subrequest_terminated()
481 set_bit(NETFS_SREQ_FAILED, &subreq->flags); in netfs_write_subrequest_terminated()
482 trace_netfs_failure(wreq, subreq, transferred_or_error, netfs_fail_write); in netfs_write_subrequest_terminated()
485 switch (subreq->source) { in netfs_write_subrequest_terminated()
498 if (WARN(transferred_or_error > subreq->len - subreq->transferred, in netfs_write_subrequest_terminated()
[all …]
H A Dmisc.c113 void netfs_reset_iter(struct netfs_io_subrequest *subreq) in netfs_reset_iter() argument
115 struct iov_iter *io_iter = &subreq->io_iter; in netfs_reset_iter()
116 size_t remain = subreq->len - subreq->transferred; in netfs_reset_iter()
122 iov_iter_truncate(&subreq->io_iter, remain); in netfs_reset_iter()
353 void netfs_subreq_clear_in_progress(struct netfs_io_subrequest *subreq) in netfs_subreq_clear_in_progress() argument
355 struct netfs_io_request *rreq = subreq->rreq; in netfs_subreq_clear_in_progress()
356 struct netfs_io_stream *stream = &rreq->io_streams[subreq->stream_nr]; in netfs_subreq_clear_in_progress()
358 clear_bit_unlock(NETFS_SREQ_IN_PROGRESS, &subreq->flags); in netfs_subreq_clear_in_progress()
362 if (list_is_first(&subreq->rreq_link, &stream->subrequests) || in netfs_subreq_clear_in_progress()
373 struct netfs_io_subrequest *subreq; in netfs_wait_for_in_progress_stream() local
[all …]
H A Dinternal.h27 struct netfs_io_subrequest *subreq);
72 void netfs_reset_iter(struct netfs_io_subrequest *subreq);
74 void netfs_subreq_clear_in_progress(struct netfs_io_subrequest *subreq);
101 static inline void netfs_see_subrequest(struct netfs_io_subrequest *subreq, in netfs_see_subrequest() argument
104 trace_netfs_sreq_ref(subreq->rreq->debug_id, subreq->debug_index, in netfs_see_subrequest()
105 refcount_read(&subreq->ref), what); in netfs_see_subrequest()
113 void netfs_cancel_read(struct netfs_io_subrequest *subreq, int error);
208 struct netfs_io_subrequest *subreq,
301 static inline bool netfs_check_subreq_in_progress(const struct netfs_io_subrequest *subreq) in netfs_check_subreq_in_progress() argument
304 return test_bit_acquire(NETFS_SREQ_IN_PROGRESS, &subreq->flags); in netfs_check_subreq_in_progress()
/linux/fs/afs/
H A Dwrite.c89 void afs_prepare_write(struct netfs_io_subrequest *subreq) in afs_prepare_write() argument
91 struct netfs_io_stream *stream = &subreq->rreq->io_streams[subreq->stream_nr]; in afs_prepare_write()
104 struct netfs_io_subrequest *subreq = container_of(work, struct netfs_io_subrequest, work); in afs_issue_write_worker() local
105 struct netfs_io_request *wreq = subreq->rreq; in afs_issue_write_worker()
108 unsigned long long pos = subreq->start + subreq->transferred; in afs_issue_write_worker()
109 size_t len = subreq->len - subreq->transferred; in afs_issue_write_worker()
113 wreq->debug_id, subreq->debug_index, in afs_issue_write_worker()
121 if (subreq->debug_index == 3) in afs_issue_write_worker()
122 return netfs_write_subrequest_terminated(subreq, -ENOANO); in afs_issue_write_worker()
124 if (!subreq->retry_count) { in afs_issue_write_worker()
[all …]
H A Dfile.c208 struct netfs_io_subrequest *subreq = op->fetch.subreq; in afs_fetch_data_notify() local
210 subreq->error = afs_op_error(op); in afs_fetch_data_notify()
211 netfs_read_subreq_terminated(subreq); in afs_fetch_data_notify()
221 atomic_long_add(op->fetch.subreq->transferred, &op->net->n_fetch_bytes); in afs_fetch_data_success()
289 netfs_read_subreq_progress(op->fetch.subreq); in afs_read_receive()
335 static void afs_issue_read(struct netfs_io_subrequest *subreq) in afs_issue_read() argument
338 struct afs_vnode *vnode = AFS_FS_I(subreq->rreq->inode); in afs_issue_read()
339 struct key *key = subreq->rreq->netfs_priv; in afs_issue_read()
350 subreq->error = PTR_ERR(op); in afs_issue_read()
351 netfs_read_subreq_terminated(subreq); in afs_issue_read()
[all …]
H A Dfsclient.c304 struct netfs_io_subrequest *subreq = op->fetch.subreq; in afs_deliver_fs_fetch_data() local
342 call->iter = &subreq->io_iter; in afs_deliver_fs_fetch_data()
343 call->iov_len = umin(call->remaining, subreq->len - subreq->transferred); in afs_deliver_fs_fetch_data()
353 subreq->transferred += count_before - call->iov_len; in afs_deliver_fs_fetch_data()
391 if (subreq->start + subreq->transferred >= vp->scb.status.size) in afs_deliver_fs_fetch_data()
392 __set_bit(NETFS_SREQ_HIT_EOF, &subreq->flags); in afs_deliver_fs_fetch_data()
431 struct netfs_io_subrequest *subreq = op->fetch.subreq; in afs_fs_fetch_data64() local
451 bp[4] = htonl(upper_32_bits(subreq->start + subreq->transferred)); in afs_fs_fetch_data64()
452 bp[5] = htonl(lower_32_bits(subreq->start + subreq->transferred)); in afs_fs_fetch_data64()
454 bp[7] = htonl(lower_32_bits(subreq->len - subreq->transferred)); in afs_fs_fetch_data64()
[all …]
/linux/crypto/
H A Dseqiv.c23 struct aead_request *subreq = aead_request_ctx(req); in seqiv_aead_encrypt_complete2() local
33 memcpy(req->iv, subreq->iv, crypto_aead_ivsize(geniv)); in seqiv_aead_encrypt_complete2()
36 kfree_sensitive(subreq->iv); in seqiv_aead_encrypt_complete2()
51 struct aead_request *subreq = aead_request_ctx(req); in seqiv_aead_encrypt() local
62 aead_request_set_tfm(subreq, ctx->child); in seqiv_aead_encrypt()
85 aead_request_set_callback(subreq, req->base.flags, compl, data); in seqiv_aead_encrypt()
86 aead_request_set_crypt(subreq, req->dst, req->dst, in seqiv_aead_encrypt()
88 aead_request_set_ad(subreq, req->assoclen + ivsize); in seqiv_aead_encrypt()
93 err = crypto_aead_encrypt(subreq); in seqiv_aead_encrypt()
103 struct aead_request *subreq = aead_request_ctx(req); in seqiv_aead_decrypt() local
[all …]
H A Dessiv.c145 struct skcipher_request *subreq = skcipher_request_ctx(req); in essiv_skcipher_crypt() local
149 skcipher_request_set_tfm(subreq, tctx->u.skcipher); in essiv_skcipher_crypt()
150 skcipher_request_set_crypt(subreq, req->src, req->dst, req->cryptlen, in essiv_skcipher_crypt()
152 skcipher_request_set_callback(subreq, skcipher_request_flags(req), in essiv_skcipher_crypt()
155 return enc ? crypto_skcipher_encrypt(subreq) : in essiv_skcipher_crypt()
156 crypto_skcipher_decrypt(subreq); in essiv_skcipher_crypt()
188 struct aead_request *subreq = &rctx->aead_req; in essiv_aead_crypt() local
244 aead_request_set_tfm(subreq, tctx->u.aead); in essiv_aead_crypt()
245 aead_request_set_ad(subreq, req->assoclen); in essiv_aead_crypt()
246 aead_request_set_callback(subreq, aead_request_flags(req), in essiv_aead_crypt()
[all …]
/linux/fs/nfs/
H A Dwrite.c332 struct nfs_page *subreq = destroy_list; in nfs_destroy_unlinked_subrequests() local
334 destroy_list = (subreq->wb_this_page == old_head) ? in nfs_destroy_unlinked_subrequests()
335 NULL : subreq->wb_this_page; in nfs_destroy_unlinked_subrequests()
338 nfs_page_set_headlock(subreq); in nfs_destroy_unlinked_subrequests()
339 WARN_ON_ONCE(old_head != subreq->wb_head); in nfs_destroy_unlinked_subrequests()
342 subreq->wb_this_page = subreq; in nfs_destroy_unlinked_subrequests()
343 subreq->wb_head = subreq; in nfs_destroy_unlinked_subrequests()
345 clear_bit(PG_REMOVE, &subreq->wb_flags); in nfs_destroy_unlinked_subrequests()
348 if (!kref_read(&subreq->wb_kref)) { in nfs_destroy_unlinked_subrequests()
350 if (test_and_clear_bit(PG_TEARDOWN, &subreq->wb_flags)) { in nfs_destroy_unlinked_subrequests()
[all …]
/linux/arch/arm64/crypto/
H A Dsm4-ce-glue.c206 struct skcipher_request subreq; in sm4_cbc_cts_crypt() local
217 skcipher_request_set_tfm(&subreq, tfm); in sm4_cbc_cts_crypt()
218 skcipher_request_set_callback(&subreq, skcipher_request_flags(req), in sm4_cbc_cts_crypt()
224 skcipher_request_set_crypt(&subreq, src, dst, in sm4_cbc_cts_crypt()
228 err = sm4_cbc_crypt(&subreq, ctx, encrypt); in sm4_cbc_cts_crypt()
232 dst = src = scatterwalk_ffwd(sg_src, src, subreq.cryptlen); in sm4_cbc_cts_crypt()
235 subreq.cryptlen); in sm4_cbc_cts_crypt()
239 skcipher_request_set_crypt(&subreq, src, dst, in sm4_cbc_cts_crypt()
243 err = skcipher_walk_virt(&walk, &subreq, false); in sm4_cbc_cts_crypt()
317 struct skcipher_request subreq; in sm4_xts_crypt() local
[all …]
/linux/include/linux/
H A Dnetfs.h139 void (*prepare_write)(struct netfs_io_subrequest *subreq);
140 void (*issue_write)(struct netfs_io_subrequest *subreq);
296 int (*prepare_read)(struct netfs_io_subrequest *subreq);
297 void (*issue_read)(struct netfs_io_subrequest *subreq);
309 void (*prepare_write)(struct netfs_io_subrequest *subreq);
310 void (*issue_write)(struct netfs_io_subrequest *subreq);
346 void (*issue_write)(struct netfs_io_subrequest *subreq);
357 enum netfs_io_source (*prepare_read)(struct netfs_io_subrequest *subreq,
365 void (*prepare_write_subreq)(struct netfs_io_subrequest *subreq);
432 void netfs_read_subreq_progress(struct netfs_io_subrequest *subreq);
[all …]
/linux/fs/ceph/
H A Daddr.c218 struct netfs_io_subrequest *subreq = req->r_priv; in finish_netfs_read() local
227 subreq->len, i_size_read(req->r_inode)); in finish_netfs_read()
231 __set_bit(NETFS_SREQ_CLEAR_TAIL, &subreq->flags); in finish_netfs_read()
232 __set_bit(NETFS_SREQ_MADE_PROGRESS, &subreq->flags); in finish_netfs_read()
241 if (err < subreq->len && in finish_netfs_read()
242 subreq->rreq->origin != NETFS_UNBUFFERED_READ && in finish_netfs_read()
243 subreq->rreq->origin != NETFS_DIO_READ) in finish_netfs_read()
244 __set_bit(NETFS_SREQ_CLEAR_TAIL, &subreq->flags); in finish_netfs_read()
247 osd_data->pages, subreq->start, in finish_netfs_read()
250 if (err > subreq->len) in finish_netfs_read()
[all …]
/linux/fs/smb/client/
H A Dfile.c46 static void cifs_prepare_write(struct netfs_io_subrequest *subreq) in cifs_prepare_write() argument
49 container_of(subreq, struct cifs_io_subrequest, subreq); in cifs_prepare_write()
51 struct netfs_io_stream *stream = &req->rreq.io_streams[subreq->stream_nr]; in cifs_prepare_write()
76 subreq->error = rc; in cifs_prepare_write()
77 return netfs_prepare_write_failed(subreq); in cifs_prepare_write()
84 subreq->error = rc; in cifs_prepare_write()
85 return netfs_prepare_write_failed(subreq); in cifs_prepare_write()
88 wdata->credits.rreq_debug_id = subreq->rreq->debug_id; in cifs_prepare_write()
89 wdata->credits.rreq_debug_index = subreq->debug_index; in cifs_prepare_write()
92 wdata->subreq.debug_index, in cifs_prepare_write()
[all …]
H A Dsmb2pdu.c4544 rdata ? rdata->subreq.debug_index : 0, in smb2_new_read_req()
4558 rdata->mr = smbd_register_mr(server->smbd_conn, &rdata->subreq.io_iter, in smb2_new_read_req()
4616 .rreq_debug_index = rdata->subreq.debug_index, in smb2_readv_callback()
4620 unsigned int subreq_debug_index = rdata->subreq.debug_index; in smb2_readv_callback()
4623 rqst.rq_iter = rdata->subreq.io_iter; in smb2_readv_callback()
4632 rdata->got_bytes, rdata->subreq.len - rdata->subreq.transferred); in smb2_readv_callback()
4647 rdata->subreq.error = rc; in smb2_readv_callback()
4651 trace_netfs_sreq(&rdata->subreq, netfs_sreq_trace_io_retry_needed); in smb2_readv_callback()
4652 __set_bit(NETFS_SREQ_NEED_RETRY, &rdata->subreq in smb2_readv_callback()
4761 struct netfs_io_subrequest *subreq = &rdata->subreq; smb2_async_readv() local
[all...]
/linux/include/trace/events/
H A Dnetfs.h472 __field(unsigned int, subreq)
479 __entry->subreq = subreq_debug_index;
486 __entry->subreq,
629 const struct netfs_io_subrequest *subreq),
631 TP_ARGS(wreq, subreq),
635 __field(unsigned int, subreq)
644 __entry->subreq = subreq->debug_index;
645 __entry->stream = subreq->stream_nr;
646 __entry->start = subreq->start;
647 __entry->len = subreq->len;
[all …]
/linux/drivers/crypto/
H A Dgeode-aes.c272 struct skcipher_request *subreq = skcipher_request_ctx(req); in geode_skcipher_crypt() local
274 *subreq = *req; in geode_skcipher_crypt()
275 skcipher_request_set_tfm(subreq, tctx->fallback.skcipher); in geode_skcipher_crypt()
277 return crypto_skcipher_decrypt(subreq); in geode_skcipher_crypt()
279 return crypto_skcipher_encrypt(subreq); in geode_skcipher_crypt()

12