Lines Matching +full:super +full:- +full:frames

1 // SPDX-License-Identifier: LGPL-2.1
41 #include <linux/key-type.h>
124 /* Module-wide total cached dirents (in bytes) across all tcons */
128 * Write-only module parameter to drop all cached directory entries across
129 * all CIFS mounts. Echo a non-zero value to trigger.
139 list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { in cifs_drop_all_dir_caches()
142 list_for_each_entry(tcon, &ses->tcon_list, tcon_list) in cifs_drop_all_dir_caches()
203 * Bumps refcount for cifs super block.
204 * Note that it should be only called if a reference to VFS super block is
205 * already held, e.g. in open-type syscalls context. Otherwise it can race with
213 if (atomic_inc_return(&server->active) == 1) in cifs_sb_active()
214 atomic_inc(&sb->s_active); in cifs_sb_active()
222 if (atomic_dec_and_test(&server->active)) in cifs_sb_deactive()
238 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL) in cifs_read_super()
239 sb->s_flags |= SB_POSIXACL; in cifs_read_super()
241 if (tcon->snapshot_time) in cifs_read_super()
242 sb->s_flags |= SB_RDONLY; in cifs_read_super()
244 if (tcon->ses->capabilities & tcon->ses->server->vals->cap_large_files) in cifs_read_super()
245 sb->s_maxbytes = MAX_LFS_FILESIZE; in cifs_read_super()
247 sb->s_maxbytes = MAX_NON_LFS; in cifs_read_super()
251 * (while all current servers use 100ns granularity - see MS-DTYP) in cifs_read_super()
256 if ((tcon->ses->server->vals->protocol_id == SMB10_PROT_ID) && in cifs_read_super()
257 ((tcon->ses->capabilities & in cifs_read_super()
258 tcon->ses->server->vals->cap_nt_find) == 0) && in cifs_read_super()
259 !tcon->unix_ext) { in cifs_read_super()
260 sb->s_time_gran = 1000000000; /* 1 second is max allowed gran */ in cifs_read_super()
262 sb->s_time_min = ts.tv_sec; in cifs_read_super()
265 sb->s_time_max = ts.tv_sec; in cifs_read_super()
269 * ie 100 nanosecond units, since 1601. See MS-DTYP and MS-FSCC in cifs_read_super()
271 sb->s_time_gran = 100; in cifs_read_super()
273 sb->s_time_min = ts.tv_sec; in cifs_read_super()
275 sb->s_time_max = ts.tv_sec; in cifs_read_super()
278 sb->s_magic = CIFS_SUPER_MAGIC; in cifs_read_super()
279 sb->s_op = &cifs_super_ops; in cifs_read_super()
280 sb->s_xattr = cifs_xattr_handlers; in cifs_read_super()
285 if (cifs_sb->ctx->rsize == 0) in cifs_read_super()
286 cifs_sb->ctx->rsize = in cifs_read_super()
287 tcon->ses->server->ops->negotiate_rsize(tcon, cifs_sb->ctx); in cifs_read_super()
288 if (cifs_sb->ctx->rasize) in cifs_read_super()
289 sb->s_bdi->ra_pages = cifs_sb->ctx->rasize / PAGE_SIZE; in cifs_read_super()
291 sb->s_bdi->ra_pages = 2 * (cifs_sb->ctx->rsize / PAGE_SIZE); in cifs_read_super()
293 sb->s_blocksize = CIFS_MAX_MSGSIZE; in cifs_read_super()
294 sb->s_blocksize_bits = 14; /* default 2**14 = CIFS_MAX_MSGSIZE */ in cifs_read_super()
302 if (tcon->nocase) in cifs_read_super()
307 sb->s_root = d_make_root(inode); in cifs_read_super()
308 if (!sb->s_root) { in cifs_read_super()
309 rc = -ENOMEM; in cifs_read_super()
314 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) { in cifs_read_super()
316 sb->s_export_op = &cifs_export_ops; in cifs_read_super()
335 if (cifs_sb->root) { in cifs_kill_sb()
339 dput(cifs_sb->root); in cifs_kill_sb()
340 cifs_sb->root = NULL; in cifs_kill_sb()
350 struct super_block *sb = dentry->d_sb; in cifs_statfs()
353 struct TCP_Server_Info *server = tcon->ses->server; in cifs_statfs()
368 if (le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength) > 0) in cifs_statfs()
369 buf->f_namelen = in cifs_statfs()
370 le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength); in cifs_statfs()
372 buf->f_namelen = PATH_MAX; in cifs_statfs()
374 buf->f_fsid.val[0] = tcon->vol_serial_number; in cifs_statfs()
376 buf->f_fsid.val[1] = (int)le64_to_cpu(tcon->vol_create_time); in cifs_statfs()
378 buf->f_files = 0; /* undefined */ in cifs_statfs()
379 buf->f_ffree = 0; /* unlimited */ in cifs_statfs()
381 if (server->ops->queryfs) in cifs_statfs()
382 rc = server->ops->queryfs(xid, tcon, full_path, cifs_sb, buf); in cifs_statfs()
394 struct TCP_Server_Info *server = tcon->ses->server; in cifs_fallocate()
398 if (!server->ops->fallocate) in cifs_fallocate()
399 return -EOPNOTSUPP; in cifs_fallocate()
411 rc = server->ops->fallocate(file, tcon, mode, off, len); in cifs_fallocate()
423 cifs_sb = CIFS_SB(inode->i_sb); in cifs_permission()
425 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) { in cifs_permission()
427 return -EACCES; in cifs_permission()
456 cifs_inode->cifsAttrs = ATTR_ARCHIVE; /* default */ in cifs_alloc_inode()
457 cifs_inode->time = 0; in cifs_alloc_inode()
463 cifs_inode->lease_granted = false; in cifs_alloc_inode()
464 cifs_inode->flags = 0; in cifs_alloc_inode()
465 spin_lock_init(&cifs_inode->writers_lock); in cifs_alloc_inode()
466 cifs_inode->writers = 0; in cifs_alloc_inode()
467 cifs_inode->netfs.inode.i_blkbits = 14; /* 2**14 = CIFS_MAX_MSGSIZE */ in cifs_alloc_inode()
468 cifs_inode->netfs.remote_i_size = 0; in cifs_alloc_inode()
469 cifs_inode->uniqueid = 0; in cifs_alloc_inode()
470 cifs_inode->createtime = 0; in cifs_alloc_inode()
471 cifs_inode->epoch = 0; in cifs_alloc_inode()
472 spin_lock_init(&cifs_inode->open_file_lock); in cifs_alloc_inode()
473 generate_random_uuid(cifs_inode->lease_key); in cifs_alloc_inode()
474 cifs_inode->symlink_target = NULL; in cifs_alloc_inode()
477 * Can not set i_flags here - they get immediately overwritten to zero in cifs_alloc_inode()
480 /* cifs_inode->netfs.inode.i_flags = S_NOATIME | S_NOCMTIME; */ in cifs_alloc_inode()
481 INIT_LIST_HEAD(&cifs_inode->openFileList); in cifs_alloc_inode()
482 INIT_LIST_HEAD(&cifs_inode->llist); in cifs_alloc_inode()
483 INIT_LIST_HEAD(&cifs_inode->deferred_closes); in cifs_alloc_inode()
484 spin_lock_init(&cifs_inode->deferred_lock); in cifs_alloc_inode()
485 return &cifs_inode->netfs.inode; in cifs_alloc_inode()
493 if (S_ISLNK(inode->i_mode)) in cifs_free_inode()
494 kfree(cinode->symlink_target); in cifs_free_inode()
502 truncate_inode_pages_final(&inode->i_data); in cifs_evict_inode()
503 if (inode->i_state & I_PINNING_NETFS_WB) in cifs_evict_inode()
512 struct sockaddr_in *sa = (struct sockaddr_in *) &server->dstaddr; in cifs_show_address()
513 struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &server->dstaddr; in cifs_show_address()
517 switch (server->dstaddr.ss_family) { in cifs_show_address()
519 seq_printf(s, "%pI4", &sa->sin_addr.s_addr); in cifs_show_address()
522 seq_printf(s, "%pI6", &sa6->sin6_addr.s6_addr); in cifs_show_address()
523 if (sa6->sin6_scope_id) in cifs_show_address()
524 seq_printf(s, "%%%u", sa6->sin6_scope_id); in cifs_show_address()
529 if (server->rdma) in cifs_show_address()
536 if (ses->sectype == Unspecified) { in cifs_show_security()
537 if (ses->user_name == NULL) in cifs_show_security()
544 switch (ses->sectype) { in cifs_show_security()
560 if (ses->sign) in cifs_show_security()
563 if (ses->sectype == Kerberos) in cifs_show_security()
565 from_kuid_munged(&init_user_ns, ses->cred_uid)); in cifs_show_security()
573 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) in cifs_show_cache_flavor()
575 else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) in cifs_show_cache_flavor()
577 else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RW_CACHE) in cifs_show_cache_flavor()
579 else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE) in cifs_show_cache_flavor()
591 struct cifs_sb_info *cifs_sb = CIFS_SB(root->d_sb); in cifs_show_devname()
592 char *devname = kstrdup(cifs_sb->ctx->source, GFP_KERNEL); in cifs_show_devname()
608 if (cifs_sb->ctx->upcall_target == UPTARGET_UNSPECIFIED) { in cifs_show_upcall_target()
615 switch (cifs_sb->ctx->upcall_target) { in cifs_show_upcall_target()
637 struct cifs_sb_info *cifs_sb = CIFS_SB(root->d_sb); in cifs_show_options()
640 srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr; in cifs_show_options()
642 seq_show_option(s, "vers", tcon->ses->server->vals->version_string); in cifs_show_options()
643 cifs_show_security(s, tcon->ses); in cifs_show_options()
647 if (tcon->no_lease) in cifs_show_options()
649 if (cifs_sb->ctx->multiuser) in cifs_show_options()
651 else if (tcon->ses->user_name) in cifs_show_options()
652 seq_show_option(s, "username", tcon->ses->user_name); in cifs_show_options()
654 if (tcon->ses->domainName && tcon->ses->domainName[0] != 0) in cifs_show_options()
655 seq_show_option(s, "domain", tcon->ses->domainName); in cifs_show_options()
657 if (srcaddr->sa_family != AF_UNSPEC) { in cifs_show_options()
662 if (srcaddr->sa_family == AF_INET6) in cifs_show_options()
664 &saddr6->sin6_addr); in cifs_show_options()
665 else if (srcaddr->sa_family == AF_INET) in cifs_show_options()
667 &saddr4->sin_addr.s_addr); in cifs_show_options()
669 seq_printf(s, ",srcaddr=BAD-AF:%i", in cifs_show_options()
670 (int)(srcaddr->sa_family)); in cifs_show_options()
674 from_kuid_munged(&init_user_ns, cifs_sb->ctx->linux_uid)); in cifs_show_options()
675 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID) in cifs_show_options()
681 from_kgid_munged(&init_user_ns, cifs_sb->ctx->linux_gid)); in cifs_show_options()
682 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID) in cifs_show_options()
687 cifs_show_address(s, tcon->ses->server); in cifs_show_options()
689 if (!tcon->unix_ext) in cifs_show_options()
691 cifs_sb->ctx->file_mode, in cifs_show_options()
692 cifs_sb->ctx->dir_mode); in cifs_show_options()
693 if (cifs_sb->ctx->iocharset) in cifs_show_options()
694 seq_printf(s, ",iocharset=%s", cifs_sb->ctx->iocharset); in cifs_show_options()
695 if (tcon->ses->unicode == 0) in cifs_show_options()
697 else if (tcon->ses->unicode == 1) in cifs_show_options()
699 if (tcon->seal) in cifs_show_options()
701 else if (tcon->ses->server->ignore_signature) in cifs_show_options()
703 if (tcon->nocase) in cifs_show_options()
705 if (tcon->nodelete) in cifs_show_options()
707 if (cifs_sb->ctx->no_sparse) in cifs_show_options()
709 if (tcon->local_lease) in cifs_show_options()
711 if (tcon->retry) in cifs_show_options()
715 if (tcon->use_persistent) in cifs_show_options()
717 else if (tcon->use_resilient) in cifs_show_options()
719 if (tcon->posix_extensions) in cifs_show_options()
721 else if (tcon->unix_ext) in cifs_show_options()
725 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS) in cifs_show_options()
727 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) in cifs_show_options()
729 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) in cifs_show_options()
731 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UID_FROM_ACL) in cifs_show_options()
733 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) in cifs_show_options()
735 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD) in cifs_show_options()
737 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) in cifs_show_options()
739 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR) in cifs_show_options()
741 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR) in cifs_show_options()
743 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SFM_CHR) in cifs_show_options()
745 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) in cifs_show_options()
747 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL) in cifs_show_options()
749 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_HANDLE_CACHE) in cifs_show_options()
751 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MODE_FROM_SID) in cifs_show_options()
753 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) in cifs_show_options()
755 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM) in cifs_show_options()
757 if (root->d_sb->s_flags & SB_POSIXACL) in cifs_show_options()
759 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MF_SYMLINKS) in cifs_show_options()
761 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE) in cifs_show_options()
763 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC) in cifs_show_options()
765 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) in cifs_show_options()
767 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPUID) in cifs_show_options()
770 cifs_sb->ctx->backupuid)); in cifs_show_options()
771 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPGID) in cifs_show_options()
774 cifs_sb->ctx->backupgid)); in cifs_show_options()
776 cifs_reparse_type_str(cifs_sb->ctx->reparse_type)); in cifs_show_options()
777 if (cifs_sb->ctx->nonativesocket) in cifs_show_options()
784 seq_printf(s, ",rsize=%u", cifs_sb->ctx->rsize); in cifs_show_options()
785 seq_printf(s, ",wsize=%u", cifs_sb->ctx->wsize); in cifs_show_options()
786 seq_printf(s, ",bsize=%u", cifs_sb->ctx->bsize); in cifs_show_options()
787 if (cifs_sb->ctx->rasize) in cifs_show_options()
788 seq_printf(s, ",rasize=%u", cifs_sb->ctx->rasize); in cifs_show_options()
789 if (tcon->ses->server->min_offload) in cifs_show_options()
790 seq_printf(s, ",esize=%u", tcon->ses->server->min_offload); in cifs_show_options()
791 if (tcon->ses->server->retrans) in cifs_show_options()
792 seq_printf(s, ",retrans=%u", tcon->ses->server->retrans); in cifs_show_options()
794 tcon->ses->server->echo_interval / HZ); in cifs_show_options()
797 if (tcon->ses->server->max_credits != SMB2_MAX_CREDITS_AVAILABLE) in cifs_show_options()
798 seq_printf(s, ",max_credits=%u", tcon->ses->server->max_credits); in cifs_show_options()
799 if (tcon->ses->server->tcp_nodelay) in cifs_show_options()
801 if (tcon->ses->server->noautotune) in cifs_show_options()
803 if (tcon->ses->server->noblocksnd) in cifs_show_options()
805 if (tcon->ses->server->nosharesock) in cifs_show_options()
808 if (tcon->snapshot_time) in cifs_show_options()
809 seq_printf(s, ",snapshot=%llu", tcon->snapshot_time); in cifs_show_options()
810 if (tcon->handle_timeout) in cifs_show_options()
811 seq_printf(s, ",handletimeout=%u", tcon->handle_timeout); in cifs_show_options()
812 if (tcon->max_cached_dirs != MAX_CACHED_FIDS) in cifs_show_options()
813 seq_printf(s, ",max_cached_dirs=%u", tcon->max_cached_dirs); in cifs_show_options()
820 if (cifs_sb->ctx->acdirmax == cifs_sb->ctx->acregmax) in cifs_show_options()
821 seq_printf(s, ",actimeo=%lu", cifs_sb->ctx->acregmax / HZ); in cifs_show_options()
823 seq_printf(s, ",acdirmax=%lu", cifs_sb->ctx->acdirmax / HZ); in cifs_show_options()
824 seq_printf(s, ",acregmax=%lu", cifs_sb->ctx->acregmax / HZ); in cifs_show_options()
826 seq_printf(s, ",closetimeo=%lu", cifs_sb->ctx->closetimeo / HZ); in cifs_show_options()
828 if (tcon->ses->chan_max > 1) in cifs_show_options()
830 tcon->ses->chan_max); in cifs_show_options()
832 if (tcon->use_witness) in cifs_show_options()
849 spin_lock(&tcon->tc_lock); in cifs_umount_begin()
850 trace_smb3_tcon_ref(tcon->debug_id, tcon->tc_count, in cifs_umount_begin()
852 if ((tcon->tc_count > 1) || (tcon->status == TID_EXITING)) { in cifs_umount_begin()
856 spin_unlock(&tcon->tc_lock); in cifs_umount_begin()
861 * can not set tcon->status to TID_EXITING yet since we don't know if umount -f will in cifs_umount_begin()
864 spin_unlock(&tcon->tc_lock); in cifs_umount_begin()
870 if (tcon->ses && tcon->ses->server) { in cifs_umount_begin()
871 cifs_dbg(FYI, "wake up tasks now - umount begin not complete\n"); in cifs_umount_begin()
872 wake_up_all(&tcon->ses->server->request_q); in cifs_umount_begin()
873 wake_up_all(&tcon->ses->server->response_q); in cifs_umount_begin()
876 wake_up_all(&tcon->ses->server->response_q); in cifs_umount_begin()
912 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); in cifs_drop_inode()
915 return !(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) || in cifs_drop_inode()
953 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH) in cifs_get_root()
954 return dget(sb->s_root); in cifs_get_root()
959 return ERR_PTR(-ENOMEM); in cifs_get_root()
964 dentry = dget(sb->s_root); in cifs_get_root()
971 if (!S_ISDIR(dir->i_mode)) { in cifs_get_root()
973 dentry = ERR_PTR(-ENOTDIR); in cifs_get_root()
987 child = lookup_noperm_positive_unlocked(&QSTR_LEN(p, s - p), in cifs_get_root()
999 sb->s_fs_info = mnt_data->cifs_sb; in cifs_set_super()
1015 old_ctx->source, flags); in cifs_smb3_do_mount()
1017 cifs_info("Attempting to mount %s\n", old_ctx->source); in cifs_smb3_do_mount()
1022 return ERR_PTR(-ENOMEM); in cifs_smb3_do_mount()
1024 cifs_sb->ctx = kzalloc(sizeof(struct smb3_fs_context), GFP_KERNEL); in cifs_smb3_do_mount()
1025 if (!cifs_sb->ctx) { in cifs_smb3_do_mount()
1026 root = ERR_PTR(-ENOMEM); in cifs_smb3_do_mount()
1029 rc = smb3_fs_context_dup(cifs_sb->ctx, old_ctx); in cifs_smb3_do_mount()
1041 rc = cifs_mount(cifs_sb, cifs_sb->ctx); in cifs_smb3_do_mount()
1050 mnt_data.ctx = cifs_sb->ctx; in cifs_smb3_do_mount()
1063 if (sb->s_root) { in cifs_smb3_do_mount()
1074 sb->s_flags |= SB_ACTIVE; in cifs_smb3_do_mount()
1077 root = cifs_get_root(cifs_sb ? cifs_sb->ctx : old_ctx, sb); in cifs_smb3_do_mount()
1082 cifs_sb->root = dget(root); in cifs_smb3_do_mount()
1091 kfree(cifs_sb->prepath); in cifs_smb3_do_mount()
1092 smb3_cleanup_fs_context(cifs_sb->ctx); in cifs_smb3_do_mount()
1099 struct cifsFileInfo *cfile = file->private_data; in cifs_llseek()
1114 if (!CIFS_CACHE_READ(CIFS_I(inode)) && inode->i_mapping && in cifs_llseek()
1115 inode->i_mapping->nrpages != 0) { in cifs_llseek()
1116 rc = filemap_fdatawait(inode->i_mapping); in cifs_llseek()
1118 mapping_set_error(inode->i_mapping, rc); in cifs_llseek()
1124 * way so we must seek to end on non-oplocked files by in cifs_llseek()
1127 CIFS_I(inode)->time = 0; in cifs_llseek()
1133 if (cfile && cfile->tlink) { in cifs_llseek()
1134 tcon = tlink_tcon(cfile->tlink); in cifs_llseek()
1135 if (tcon->ses->server->ops->llseek) in cifs_llseek()
1136 return tcon->ses->server->ops->llseek(file, tcon, in cifs_llseek()
1150 struct cifsFileInfo *cfile = file->private_data; in cifs_setlease()
1157 else if (tlink_tcon(cfile->tlink)->local_lease && in cifs_setlease()
1169 return -EAGAIN; in cifs_setlease()
1228 return ERR_PTR(-ECHILD); in cifs_get_link()
1232 return ERR_PTR(-ENOMEM); in cifs_get_link()
1234 spin_lock(&inode->i_lock); in cifs_get_link()
1235 if (likely(CIFS_I(inode)->symlink_target)) { in cifs_get_link()
1236 strscpy(target_path, CIFS_I(inode)->symlink_target, PATH_MAX); in cifs_get_link()
1239 target_path = ERR_PTR(-EOPNOTSUPP); in cifs_get_link()
1241 spin_unlock(&inode->i_lock); in cifs_get_link()
1264 int rc = -EINVAL; in cifs_precopy_set_eof()
1268 if (src_tcon->ses->server->ops->set_file_size) in cifs_precopy_set_eof()
1269 rc = src_tcon->ses->server->ops->set_file_size( in cifs_precopy_set_eof()
1271 src_inode->i_size, true /* no need to set sparse */); in cifs_precopy_set_eof()
1273 rc = -ENOSYS; in cifs_precopy_set_eof()
1281 netfs_resize_file(&src_cifsi->netfs, src_end, true); in cifs_precopy_set_eof()
1286 return filemap_write_and_wait(src_inode->i_mapping); in cifs_precopy_set_eof()
1304 folio = filemap_get_folio(inode->i_mapping, index); in cifs_flush_folio()
1310 fend = fpos + size - 1; in cifs_flush_folio()
1316 rc = filemap_write_and_wait_range(inode->i_mapping, fpos, fend); in cifs_flush_folio()
1330 struct cifsFileInfo *smb_file_src = src_file->private_data; in cifs_remap_file_range()
1331 struct cifsFileInfo *smb_file_target = dst_file->private_data; in cifs_remap_file_range()
1338 return -EOPNOTSUPP; in cifs_remap_file_range()
1340 return -EINVAL; in cifs_remap_file_range()
1347 rc = -EBADF; in cifs_remap_file_range()
1352 src_tcon = tlink_tcon(smb_file_src->tlink); in cifs_remap_file_range()
1353 target_tcon = tlink_tcon(smb_file_target->tlink); in cifs_remap_file_range()
1363 len = src_inode->i_size - off; in cifs_remap_file_range()
1368 rc = filemap_write_and_wait_range(src_inode->i_mapping, off, in cifs_remap_file_range()
1369 off + len - 1); in cifs_remap_file_range()
1373 /* The server-side copy will fail if the source crosses the EOF marker. in cifs_remap_file_range()
1377 if (src_cifsi->netfs.remote_i_size < off + len) { in cifs_remap_file_range()
1384 destend = destoff + len - 1; in cifs_remap_file_range()
1398 if (fend > target_cifsi->netfs.zero_point) in cifs_remap_file_range()
1399 target_cifsi->netfs.zero_point = fend + 1; in cifs_remap_file_range()
1400 old_size = target_cifsi->netfs.remote_i_size; in cifs_remap_file_range()
1403 cifs_dbg(FYI, "about to discard pages %llx-%llx\n", fstart, fend); in cifs_remap_file_range()
1404 truncate_inode_pages_range(&target_inode->i_data, fstart, fend); in cifs_remap_file_range()
1409 rc = -EOPNOTSUPP; in cifs_remap_file_range()
1410 if (target_tcon->ses->server->ops->duplicate_extents) { in cifs_remap_file_range()
1411 rc = target_tcon->ses->server->ops->duplicate_extents(xid, in cifs_remap_file_range()
1417 } else if (rc == -EOPNOTSUPP) { in cifs_remap_file_range()
1425 if (off >= src_inode->i_size) { in cifs_remap_file_range()
1426 rc = -EINVAL; in cifs_remap_file_range()
1429 rc = -EINVAL; in cifs_remap_file_range()
1432 if (rc == 0 && new_size > target_cifsi->netfs.zero_point) in cifs_remap_file_range()
1433 target_cifsi->netfs.zero_point = new_size; in cifs_remap_file_range()
1438 CIFS_I(target_inode)->time = 0; in cifs_remap_file_range()
1465 if (!src_file->private_data || !dst_file->private_data) { in cifs_file_copychunk_range()
1466 rc = -EBADF; in cifs_file_copychunk_range()
1471 rc = -EXDEV; in cifs_file_copychunk_range()
1472 smb_file_target = dst_file->private_data; in cifs_file_copychunk_range()
1473 smb_file_src = src_file->private_data; in cifs_file_copychunk_range()
1474 src_tcon = tlink_tcon(smb_file_src->tlink); in cifs_file_copychunk_range()
1475 target_tcon = tlink_tcon(smb_file_target->tlink); in cifs_file_copychunk_range()
1477 if (src_tcon->ses != target_tcon->ses) { in cifs_file_copychunk_range()
1482 rc = -EOPNOTSUPP; in cifs_file_copychunk_range()
1483 if (!target_tcon->ses->server->ops->copychunk_range) in cifs_file_copychunk_range()
1495 rc = filemap_write_and_wait_range(src_inode->i_mapping, off, in cifs_file_copychunk_range()
1496 off + len - 1); in cifs_file_copychunk_range()
1500 /* The server-side copy will fail if the source crosses the EOF marker. in cifs_file_copychunk_range()
1504 if (src_cifsi->netfs.remote_i_size < off + len) { in cifs_file_copychunk_range()
1514 rc = filemap_invalidate_inode(target_inode, true, destoff, destoff + len - 1); in cifs_file_copychunk_range()
1523 rc = target_tcon->ses->server->ops->copychunk_range(xid, in cifs_file_copychunk_range()
1527 netfs_resize_file(&target_cifsi->netfs, in cifs_file_copychunk_range()
1532 if (rc > 0 && destoff + rc > target_cifsi->netfs.zero_point) in cifs_file_copychunk_range()
1533 target_cifsi->netfs.zero_point = destoff + rc; in cifs_file_copychunk_range()
1541 CIFS_I(target_inode)->time = 0; in cifs_file_copychunk_range()
1559 cifs_dbg(FYI, "Sync directory - name: %pD datasync: 0x%x\n", in cifs_dir_fsync()
1571 struct cifsFileInfo *cfile = dst_file->private_data; in cifs_copy_file_range()
1573 if (cfile->swapfile) { in cifs_copy_file_range()
1574 rc = -EOPNOTSUPP; in cifs_copy_file_range()
1583 if (rc == -EOPNOTSUPP || rc == -EXDEV) in cifs_copy_file_range()
1719 inode_init_once(&cifsi->netfs.inode); in cifs_init_once()
1720 init_rwsem(&cifsi->lock_sem); in cifs_init_once()
1732 return -ENOMEM; in cifs_init_inodecache()
1752 * SMB2 maximum header size is bigger than CIFS one - no problems to in cifs_init_request_bufs()
1759 Unicode path name has to fit in any SMB/CIFS path based frames */ in cifs_init_request_bufs()
1776 return -ENOMEM; in cifs_init_request_bufs()
1790 return -ENOMEM; in cifs_init_request_bufs()
1806 return -ENOMEM; in cifs_init_request_bufs()
1823 return -ENOMEM; in cifs_init_request_bufs()
1844 return -ENOMEM; in init_mids()
1850 return -ENOMEM; in init_mids()
1893 return -ENOMEM; in cifs_init_netfs()
1958 rc = -ENOMEM; in init_cifs()
1963 * Consider in future setting limit!=0 maybe to min(num_of_cores - 1, 3) in init_cifs()
1965 * Documentation/core-api/workqueue.rst recommends setting it to 0 in init_cifs()
1972 rc = -ENOMEM; in init_cifs()
1979 rc = -ENOMEM; in init_cifs()
1987 rc = -ENOMEM; in init_cifs()
1995 rc = -ENOMEM; in init_cifs()
2003 rc = -ENOMEM; in init_cifs()
2011 rc = -ENOMEM; in init_cifs()