• Home
  • Raw
  • Download

Lines Matching +full:set +full:- +full:aces

1 // SPDX-License-Identifier: GPL-2.0-or-later
11 #include <linux/backing-dev.h>
43 if (!test_share_config_flag(work->tcon->share_conf, in ksmbd_vfs_inherit_owner()
51 * ksmbd_vfs_lock_parent() - lock parent dentry if it is stable
55 * Returns: %0 on success, %-ENOENT if the parent dentry is not stable
60 if (child->d_parent != parent) { in ksmbd_vfs_lock_parent()
62 return -ENOENT; in ksmbd_vfs_lock_parent()
75 struct path *root_share_path = &share_conf->vfs_path; in ksmbd_vfs_path_lookup_locked()
80 pathname = share_conf->path; in ksmbd_vfs_path_lookup_locked()
101 return -ENOENT; in ksmbd_vfs_path_lookup_locked()
104 err = mnt_want_write(parent_path->mnt); in ksmbd_vfs_path_lookup_locked()
108 return -ENOENT; in ksmbd_vfs_path_lookup_locked()
111 inode_lock_nested(parent_path->dentry->d_inode, I_MUTEX_PARENT); in ksmbd_vfs_path_lookup_locked()
112 d = lookup_one_qstr_excl(&last, parent_path->dentry, 0); in ksmbd_vfs_path_lookup_locked()
121 path->dentry = d; in ksmbd_vfs_path_lookup_locked()
122 path->mnt = mntget(parent_path->mnt); in ksmbd_vfs_path_lookup_locked()
136 inode_unlock(d_inode(parent_path->dentry)); in ksmbd_vfs_path_lookup_locked()
137 mnt_drop_write(parent_path->mnt); in ksmbd_vfs_path_lookup_locked()
140 return -ENOENT; in ksmbd_vfs_path_lookup_locked()
160 if (!inode_permission(idmap, d_inode(dentry->d_parent), MAY_EXEC | MAY_WRITE)) in ksmbd_vfs_query_maximal_access()
165 * ksmbd_vfs_create() - vfs helper for smb create file
182 if (err != -ENOENT) in ksmbd_vfs_create()
203 * ksmbd_vfs_mkdir() - vfs helper for smb create directory
222 if (err != -EEXIST) in ksmbd_vfs_mkdir()
234 d = lookup_one(idmap, dentry->d_name.name, dentry->d_parent, in ksmbd_vfs_mkdir()
235 dentry->d_name.len); in ksmbd_vfs_mkdir()
242 err = -ENOENT; in ksmbd_vfs_mkdir()
262 ssize_t value_len = -ENOENT, xattr_list_len; in ksmbd_vfs_getcasexattr()
268 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_getcasexattr()
297 v_len = ksmbd_vfs_getcasexattr(file_mnt_idmap(fp->filp), in ksmbd_vfs_stream_read()
298 fp->filp->f_path.dentry, in ksmbd_vfs_stream_read()
299 fp->stream.name, in ksmbd_vfs_stream_read()
300 fp->stream.size, in ksmbd_vfs_stream_read()
306 count = -EINVAL; in ksmbd_vfs_stream_read()
310 if (v_len - *pos < count) in ksmbd_vfs_stream_read()
311 count = v_len - *pos; in ksmbd_vfs_stream_read()
321 * check_lock_range() - vfs helper for smb byte range file locking
336 if (!ctx || list_empty_careful(&ctx->flc_posix)) in check_lock_range()
339 spin_lock(&ctx->flc_lock); in check_lock_range()
340 list_for_each_entry(flock, &ctx->flc_posix, fl_list) { in check_lock_range()
342 if (flock->fl_end >= start && end >= flock->fl_start) { in check_lock_range()
343 if (flock->fl_type == F_RDLCK) { in check_lock_range()
349 } else if (flock->fl_type == F_WRLCK) { in check_lock_range()
351 if (flock->fl_file != filp) { in check_lock_range()
360 spin_unlock(&ctx->flc_lock); in check_lock_range()
365 * ksmbd_vfs_read() - vfs helper for smb file read
377 struct file *filp = fp->filp; in ksmbd_vfs_read()
381 if (S_ISDIR(inode->i_mode)) in ksmbd_vfs_read()
382 return -EISDIR; in ksmbd_vfs_read()
387 if (work->conn->connection_type) { in ksmbd_vfs_read()
388 if (!(fp->daccess & (FILE_READ_DATA_LE | FILE_EXECUTE_LE))) { in ksmbd_vfs_read()
389 pr_err("no right to read(%pD)\n", fp->filp); in ksmbd_vfs_read()
390 return -EACCES; in ksmbd_vfs_read()
397 if (!work->tcon->posix_extensions) { in ksmbd_vfs_read()
400 ret = check_lock_range(filp, *pos, *pos + count - 1, READ); in ksmbd_vfs_read()
403 return -EAGAIN; in ksmbd_vfs_read()
413 filp->f_pos = *pos; in ksmbd_vfs_read()
421 struct mnt_idmap *idmap = file_mnt_idmap(fp->filp); in ksmbd_vfs_stream_write()
431 return -EINVAL; in ksmbd_vfs_stream_write()
437 count = XATTR_SIZE_MAX - *pos; in ksmbd_vfs_stream_write()
441 fp->filp->f_path.dentry, in ksmbd_vfs_stream_write()
442 fp->stream.name, in ksmbd_vfs_stream_write()
443 fp->stream.size, in ksmbd_vfs_stream_write()
454 err = -ENOMEM; in ksmbd_vfs_stream_write()
467 &fp->filp->f_path, in ksmbd_vfs_stream_write()
468 fp->stream.name, in ksmbd_vfs_stream_write()
476 fp->filp->f_pos = *pos; in ksmbd_vfs_stream_write()
484 * ksmbd_vfs_write() - vfs helper for smb file write
503 if (work->conn->connection_type) { in ksmbd_vfs_write()
504 if (!(fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE)) || in ksmbd_vfs_write()
505 S_ISDIR(file_inode(fp->filp)->i_mode)) { in ksmbd_vfs_write()
506 pr_err("no right to write(%pD)\n", fp->filp); in ksmbd_vfs_write()
507 err = -EACCES; in ksmbd_vfs_write()
512 filp = fp->filp; in ksmbd_vfs_write()
521 if (!work->tcon->posix_extensions) { in ksmbd_vfs_write()
522 err = check_lock_range(filp, *pos, *pos + count - 1, WRITE); in ksmbd_vfs_write()
525 err = -EAGAIN; in ksmbd_vfs_write()
531 fp->reserve_lease_break = true; in ksmbd_vfs_write()
542 filp->f_pos = *pos; in ksmbd_vfs_write()
549 fp->filp, err); in ksmbd_vfs_write()
557 * ksmbd_vfs_getattr() - vfs helper for smb getattr
573 * ksmbd_vfs_fsync() - vfs helper for smb fsync
588 return -ENOENT; in ksmbd_vfs_fsync()
590 err = vfs_fsync(fp->filp, 0); in ksmbd_vfs_fsync()
598 * ksmbd_vfs_remove_file() - vfs helper for smb rmdir or unlink
607 struct dentry *parent = path->dentry->d_parent; in ksmbd_vfs_remove_file()
611 return -ENOMEM; in ksmbd_vfs_remove_file()
613 if (!d_inode(path->dentry)->i_nlink) { in ksmbd_vfs_remove_file()
614 err = -ENOENT; in ksmbd_vfs_remove_file()
618 idmap = mnt_idmap(path->mnt); in ksmbd_vfs_remove_file()
619 if (S_ISDIR(d_inode(path->dentry)->i_mode)) { in ksmbd_vfs_remove_file()
620 err = vfs_rmdir(idmap, d_inode(parent), path->dentry); in ksmbd_vfs_remove_file()
621 if (err && err != -ENOTEMPTY) in ksmbd_vfs_remove_file()
624 err = vfs_unlink(idmap, d_inode(parent), path->dentry, NULL); in ksmbd_vfs_remove_file()
635 * ksmbd_vfs_link() - vfs helper for creating smb hardlink
650 return -ENOMEM; in ksmbd_vfs_link()
668 err = -EXDEV; in ksmbd_vfs_link()
693 struct dentry *old_child = old_path->dentry; in ksmbd_vfs_rename()
698 struct ksmbd_share_config *share_conf = work->tcon->share_conf; in ksmbd_vfs_rename()
704 return -ENOMEM; in ksmbd_vfs_rename()
715 &share_conf->vfs_path); in ksmbd_vfs_rename()
719 if (old_path->mnt != new_path.mnt) { in ksmbd_vfs_rename()
720 err = -EXDEV; in ksmbd_vfs_rename()
724 err = mnt_want_write(old_path->mnt); in ksmbd_vfs_rename()
730 old_parent = dget(old_child->d_parent); in ksmbd_vfs_rename()
732 err = -EINVAL; in ksmbd_vfs_rename()
736 parent_fp = ksmbd_lookup_fd_inode(old_child->d_parent); in ksmbd_vfs_rename()
738 if (parent_fp->daccess & FILE_DELETE_LE) { in ksmbd_vfs_rename()
740 err = -ESHARE; in ksmbd_vfs_rename()
755 err = -EACCES; in ksmbd_vfs_rename()
764 err = -EEXIST; in ksmbd_vfs_rename()
770 err = -EINVAL; in ksmbd_vfs_rename()
775 err = -ENOTEMPTY; in ksmbd_vfs_rename()
779 rd.old_mnt_idmap = mnt_idmap(old_path->mnt), in ksmbd_vfs_rename()
783 rd.new_dir = new_path.dentry->d_inode, in ksmbd_vfs_rename()
796 mnt_drop_write(old_path->mnt); in ksmbd_vfs_rename()
812 * ksmbd_vfs_truncate() - vfs helper for smb file truncate
825 filp = fp->filp; in ksmbd_vfs_truncate()
830 if (!work->tcon->posix_extensions) { in ksmbd_vfs_truncate()
833 if (size < inode->i_size) { in ksmbd_vfs_truncate()
835 inode->i_size - 1, WRITE); in ksmbd_vfs_truncate()
837 err = check_lock_range(filp, inode->i_size, in ksmbd_vfs_truncate()
838 size - 1, WRITE); in ksmbd_vfs_truncate()
843 return -EAGAIN; in ksmbd_vfs_truncate()
847 err = vfs_truncate(&filp->f_path, size); in ksmbd_vfs_truncate()
854 * ksmbd_vfs_listxattr() - vfs helper for smb list extended attributes
871 return -ENOMEM; in ksmbd_vfs_listxattr()
891 * ksmbd_vfs_getxattr() - vfs helper for smb get extended attributes value
913 return -ENOMEM; in ksmbd_vfs_getxattr()
925 * ksmbd_vfs_setxattr() - vfs helper for smb set extended attributes value
927 * @path: path of dentry to set XATTR at
929 * @attr_value: xattr value to set
944 err = mnt_want_write(path->mnt); in ksmbd_vfs_setxattr()
950 path->dentry, in ksmbd_vfs_setxattr()
958 mnt_drop_write(path->mnt); in ksmbd_vfs_setxattr()
963 * ksmbd_vfs_set_fadvise() - convert smb IO caching options to linux options
971 mapping = filp->f_mapping; in ksmbd_vfs_set_fadvise()
977 filp->f_flags |= O_SYNC; in ksmbd_vfs_set_fadvise()
979 filp->f_ra.ra_pages = inode_to_bdi(mapping->host)->ra_pages * 2; in ksmbd_vfs_set_fadvise()
980 spin_lock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
981 filp->f_mode &= ~FMODE_RANDOM; in ksmbd_vfs_set_fadvise()
982 spin_unlock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
984 spin_lock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
985 filp->f_mode |= FMODE_RANDOM; in ksmbd_vfs_set_fadvise()
986 spin_unlock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
994 if (fp->f_ci->m_fattr & FILE_ATTRIBUTE_SPARSE_FILE_LE) in ksmbd_vfs_zero_data()
995 return vfs_fallocate(fp->filp, in ksmbd_vfs_zero_data()
999 return vfs_fallocate(fp->filp, in ksmbd_vfs_zero_data()
1008 struct file *f = fp->filp; in ksmbd_vfs_fqar_lseek()
1009 struct inode *inode = file_inode(fp->filp); in ksmbd_vfs_fqar_lseek()
1010 loff_t maxbytes = (u64)inode->i_sb->s_maxbytes, end; in ksmbd_vfs_fqar_lseek()
1015 return -EFBIG; in ksmbd_vfs_fqar_lseek()
1023 if (length > maxbytes || (maxbytes - length) < start) in ksmbd_vfs_fqar_lseek()
1024 length = maxbytes - start; in ksmbd_vfs_fqar_lseek()
1026 if (start + length > inode->i_size) in ksmbd_vfs_fqar_lseek()
1027 length = inode->i_size - start; in ksmbd_vfs_fqar_lseek()
1034 if (extent_start != -ENXIO) in ksmbd_vfs_fqar_lseek()
1044 if (extent_end != -ENXIO) in ksmbd_vfs_fqar_lseek()
1053 cpu_to_le64(min(extent_end, end) - extent_start); in ksmbd_vfs_fqar_lseek()
1068 err = mnt_want_write(path->mnt); in ksmbd_vfs_remove_xattr()
1073 err = vfs_removexattr(idmap, path->dentry, attr_name); in ksmbd_vfs_remove_xattr()
1076 mnt_drop_write(path->mnt); in ksmbd_vfs_remove_xattr()
1084 struct dentry *dir, *dentry = filp->f_path.dentry; in ksmbd_vfs_unlink()
1087 err = mnt_want_write(filp->f_path.mnt); in ksmbd_vfs_unlink()
1097 if (S_ISDIR(d_inode(dentry)->i_mode)) in ksmbd_vfs_unlink()
1108 mnt_drop_write(filp->f_path.mnt); in ksmbd_vfs_unlink()
1120 buf->dirent_count++; in __dir_empty()
1122 return !buf->dirent_count; in __dir_empty()
1126 * ksmbd_vfs_empty_dir() - check for empty directory
1141 err = iterate_dir(fp->filp, &readdir_data.ctx); in ksmbd_vfs_empty_dir()
1143 err = -ENOTEMPTY; in ksmbd_vfs_empty_dir()
1154 int cmp = -EINVAL; in __caseless_lookup()
1158 if (buf->used != namlen) in __caseless_lookup()
1160 if (IS_ENABLED(CONFIG_UNICODE) && buf->um) { in __caseless_lookup()
1161 const struct qstr q_buf = {.name = buf->private, in __caseless_lookup()
1162 .len = buf->used}; in __caseless_lookup()
1166 cmp = utf8_strncasecmp(buf->um, &q_buf, &q_name); in __caseless_lookup()
1169 cmp = strncasecmp((char *)buf->private, name, namlen); in __caseless_lookup()
1171 memcpy((char *)buf->private, name, buf->used); in __caseless_lookup()
1172 buf->dirent_count = 1; in __caseless_lookup()
1179 * ksmbd_vfs_lookup_in_dir() - lookup a file in a directory
1213 * ksmbd_vfs_kern_path_locked() - lookup a file and get path info
1227 struct ksmbd_share_config *share_conf = work->tcon->share_conf; in ksmbd_vfs_kern_path_locked()
1243 *parent_path = share_conf->vfs_path; in ksmbd_vfs_kern_path_locked()
1246 while (d_can_lookup(parent_path->dentry)) { in ksmbd_vfs_kern_path_locked()
1247 char *filename = filepath + path_len - remain_len; in ksmbd_vfs_kern_path_locked()
1249 size_t filename_len = next - filename; in ksmbd_vfs_kern_path_locked()
1257 work->conn->um); in ksmbd_vfs_kern_path_locked()
1263 err = vfs_path_lookup(share_conf->vfs_path.dentry, in ksmbd_vfs_kern_path_locked()
1264 share_conf->vfs_path.mnt, in ksmbd_vfs_kern_path_locked()
1277 remain_len -= filename_len + 1; in ksmbd_vfs_kern_path_locked()
1280 err = -EINVAL; in ksmbd_vfs_kern_path_locked()
1287 err = mnt_want_write(parent_path->mnt); in ksmbd_vfs_kern_path_locked()
1294 err = ksmbd_vfs_lock_parent(parent_path->dentry, path->dentry); in ksmbd_vfs_kern_path_locked()
1296 mnt_drop_write(parent_path->mnt); in ksmbd_vfs_kern_path_locked()
1306 inode_unlock(d_inode(parent_path->dentry)); in ksmbd_vfs_kern_path_unlock()
1307 mnt_drop_write(parent_path->mnt); in ksmbd_vfs_kern_path_unlock()
1320 abs_name = convert_to_unix_name(work->tcon->share_conf, name); in ksmbd_vfs_kern_path_create()
1322 return ERR_PTR(-ENOMEM); in ksmbd_vfs_kern_path_create()
1336 xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list); in ksmbd_vfs_remove_acl_xattrs()
1344 err = mnt_want_write(path->mnt); in ksmbd_vfs_remove_acl_xattrs()
1348 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_remove_acl_xattrs()
1353 sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1) || in ksmbd_vfs_remove_acl_xattrs()
1355 sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1)) { in ksmbd_vfs_remove_acl_xattrs()
1356 err = vfs_remove_acl(idmap, path->dentry, name); in ksmbd_vfs_remove_acl_xattrs()
1362 mnt_drop_write(path->mnt); in ksmbd_vfs_remove_acl_xattrs()
1375 xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list); in ksmbd_vfs_remove_sd_xattrs()
1383 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_remove_sd_xattrs()
1416 sizeof(struct xattr_acl_entry) * posix_acls->a_count, in ksmbd_vfs_make_xattr_posix_acl()
1421 smb_acl->count = posix_acls->a_count; in ksmbd_vfs_make_xattr_posix_acl()
1422 pa_entry = posix_acls->a_entries; in ksmbd_vfs_make_xattr_posix_acl()
1423 xa_entry = smb_acl->entries; in ksmbd_vfs_make_xattr_posix_acl()
1424 for (i = 0; i < posix_acls->a_count; i++, pa_entry++, xa_entry++) { in ksmbd_vfs_make_xattr_posix_acl()
1425 switch (pa_entry->e_tag) { in ksmbd_vfs_make_xattr_posix_acl()
1427 xa_entry->type = SMB_ACL_USER; in ksmbd_vfs_make_xattr_posix_acl()
1428 xa_entry->uid = posix_acl_uid_translate(idmap, pa_entry); in ksmbd_vfs_make_xattr_posix_acl()
1431 xa_entry->type = SMB_ACL_USER_OBJ; in ksmbd_vfs_make_xattr_posix_acl()
1434 xa_entry->type = SMB_ACL_GROUP; in ksmbd_vfs_make_xattr_posix_acl()
1435 xa_entry->gid = posix_acl_gid_translate(idmap, pa_entry); in ksmbd_vfs_make_xattr_posix_acl()
1438 xa_entry->type = SMB_ACL_GROUP_OBJ; in ksmbd_vfs_make_xattr_posix_acl()
1441 xa_entry->type = SMB_ACL_OTHER; in ksmbd_vfs_make_xattr_posix_acl()
1444 xa_entry->type = SMB_ACL_MASK; in ksmbd_vfs_make_xattr_posix_acl()
1447 pr_err("unknown type : 0x%x\n", pa_entry->e_tag); in ksmbd_vfs_make_xattr_posix_acl()
1451 if (pa_entry->e_perm & ACL_READ) in ksmbd_vfs_make_xattr_posix_acl()
1452 xa_entry->perm |= SMB_ACL_READ; in ksmbd_vfs_make_xattr_posix_acl()
1453 if (pa_entry->e_perm & ACL_WRITE) in ksmbd_vfs_make_xattr_posix_acl()
1454 xa_entry->perm |= SMB_ACL_WRITE; in ksmbd_vfs_make_xattr_posix_acl()
1455 if (pa_entry->e_perm & ACL_EXECUTE) in ksmbd_vfs_make_xattr_posix_acl()
1456 xa_entry->perm |= SMB_ACL_EXECUTE; in ksmbd_vfs_make_xattr_posix_acl()
1473 struct dentry *dentry = path->dentry; in ksmbd_vfs_set_sd_xattr()
1483 pntsd->osidoffset = in ksmbd_vfs_set_sd_xattr()
1484 cpu_to_le32(le32_to_cpu(pntsd->osidoffset) + NDR_NTSD_OFFSETOF); in ksmbd_vfs_set_sd_xattr()
1485 pntsd->gsidoffset = in ksmbd_vfs_set_sd_xattr()
1486 cpu_to_le32(le32_to_cpu(pntsd->gsidoffset) + NDR_NTSD_OFFSETOF); in ksmbd_vfs_set_sd_xattr()
1487 pntsd->dacloffset = in ksmbd_vfs_set_sd_xattr()
1488 cpu_to_le32(le32_to_cpu(pntsd->dacloffset) + NDR_NTSD_OFFSETOF); in ksmbd_vfs_set_sd_xattr()
1501 if (S_ISDIR(inode->i_mode)) in ksmbd_vfs_set_sd_xattr()
1563 if (S_ISDIR(inode->i_mode)) in ksmbd_vfs_get_sd_xattr()
1582 rc = -EINVAL; in ksmbd_vfs_get_sd_xattr()
1592 (*pntsd)->osidoffset = cpu_to_le32(le32_to_cpu((*pntsd)->osidoffset) - in ksmbd_vfs_get_sd_xattr()
1594 (*pntsd)->gsidoffset = cpu_to_le32(le32_to_cpu((*pntsd)->gsidoffset) - in ksmbd_vfs_get_sd_xattr()
1596 (*pntsd)->dacloffset = cpu_to_le32(le32_to_cpu((*pntsd)->dacloffset) - in ksmbd_vfs_get_sd_xattr()
1647 err = -EINVAL; in ksmbd_vfs_get_dos_attrib_xattr()
1657 * ksmbd_vfs_init_kstat() - convert unix stat information to smb stat format
1666 struct kstat *kstat = ksmbd_kstat->kstat; in ksmbd_vfs_init_kstat()
1669 info->FileIndex = 0; in ksmbd_vfs_init_kstat()
1670 info->CreationTime = cpu_to_le64(ksmbd_kstat->create_time); in ksmbd_vfs_init_kstat()
1671 time = ksmbd_UnixTimeToNT(kstat->atime); in ksmbd_vfs_init_kstat()
1672 info->LastAccessTime = cpu_to_le64(time); in ksmbd_vfs_init_kstat()
1673 time = ksmbd_UnixTimeToNT(kstat->mtime); in ksmbd_vfs_init_kstat()
1674 info->LastWriteTime = cpu_to_le64(time); in ksmbd_vfs_init_kstat()
1675 time = ksmbd_UnixTimeToNT(kstat->ctime); in ksmbd_vfs_init_kstat()
1676 info->ChangeTime = cpu_to_le64(time); in ksmbd_vfs_init_kstat()
1678 if (ksmbd_kstat->file_attributes & FILE_ATTRIBUTE_DIRECTORY_LE) { in ksmbd_vfs_init_kstat()
1679 info->EndOfFile = 0; in ksmbd_vfs_init_kstat()
1680 info->AllocationSize = 0; in ksmbd_vfs_init_kstat()
1682 info->EndOfFile = cpu_to_le64(kstat->size); in ksmbd_vfs_init_kstat()
1683 info->AllocationSize = cpu_to_le64(kstat->blocks << 9); in ksmbd_vfs_init_kstat()
1685 info->ExtFileAttributes = ksmbd_kstat->file_attributes; in ksmbd_vfs_init_kstat()
1695 struct ksmbd_share_config *share_conf = work->tcon->share_conf; in ksmbd_vfs_fill_dentry_attrs()
1699 .mnt = share_conf->vfs_path.mnt, in ksmbd_vfs_fill_dentry_attrs()
1703 rc = vfs_getattr(&path, ksmbd_kstat->kstat, in ksmbd_vfs_fill_dentry_attrs()
1709 time = ksmbd_UnixTimeToNT(ksmbd_kstat->kstat->ctime); in ksmbd_vfs_fill_dentry_attrs()
1710 ksmbd_kstat->create_time = time; in ksmbd_vfs_fill_dentry_attrs()
1713 * set default value for the case that store dos attributes is not yes in ksmbd_vfs_fill_dentry_attrs()
1716 if (S_ISDIR(ksmbd_kstat->kstat->mode)) in ksmbd_vfs_fill_dentry_attrs()
1717 ksmbd_kstat->file_attributes = FILE_ATTRIBUTE_DIRECTORY_LE; in ksmbd_vfs_fill_dentry_attrs()
1719 ksmbd_kstat->file_attributes = FILE_ATTRIBUTE_ARCHIVE_LE; in ksmbd_vfs_fill_dentry_attrs()
1721 if (test_share_config_flag(work->tcon->share_conf, in ksmbd_vfs_fill_dentry_attrs()
1727 ksmbd_kstat->file_attributes = cpu_to_le32(da.attr); in ksmbd_vfs_fill_dentry_attrs()
1728 ksmbd_kstat->create_time = da.create_time; in ksmbd_vfs_fill_dentry_attrs()
1742 ssize_t value_len = -ENOENT, xattr_list_len; in ksmbd_vfs_casexattr_len()
1748 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_casexattr_len()
1776 return -ENOMEM; in ksmbd_vfs_xattr_stream_name()
1802 if (!(src_fp->daccess & (FILE_READ_DATA_LE | FILE_EXECUTE_LE))) { in ksmbd_vfs_copy_file_ranges()
1803 pr_err("no right to read(%pD)\n", src_fp->filp); in ksmbd_vfs_copy_file_ranges()
1804 return -EACCES; in ksmbd_vfs_copy_file_ranges()
1806 if (!(dst_fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE))) { in ksmbd_vfs_copy_file_ranges()
1807 pr_err("no right to write(%pD)\n", dst_fp->filp); in ksmbd_vfs_copy_file_ranges()
1808 return -EACCES; in ksmbd_vfs_copy_file_ranges()
1812 return -EBADF; in ksmbd_vfs_copy_file_ranges()
1816 if (!work->tcon->posix_extensions) { in ksmbd_vfs_copy_file_ranges()
1822 if (check_lock_range(src_fp->filp, src_off, in ksmbd_vfs_copy_file_ranges()
1823 src_off + len - 1, READ)) in ksmbd_vfs_copy_file_ranges()
1824 return -EAGAIN; in ksmbd_vfs_copy_file_ranges()
1825 if (check_lock_range(dst_fp->filp, dst_off, in ksmbd_vfs_copy_file_ranges()
1826 dst_off + len - 1, WRITE)) in ksmbd_vfs_copy_file_ranges()
1827 return -EAGAIN; in ksmbd_vfs_copy_file_ranges()
1831 src_file_size = i_size_read(file_inode(src_fp->filp)); in ksmbd_vfs_copy_file_ranges()
1839 return -E2BIG; in ksmbd_vfs_copy_file_ranges()
1841 ret = vfs_copy_file_range(src_fp->filp, src_off, in ksmbd_vfs_copy_file_ranges()
1842 dst_fp->filp, dst_off, len, 0); in ksmbd_vfs_copy_file_ranges()
1843 if (ret == -EOPNOTSUPP || ret == -EXDEV) in ksmbd_vfs_copy_file_ranges()
1844 ret = vfs_copy_file_range(src_fp->filp, src_off, in ksmbd_vfs_copy_file_ranges()
1845 dst_fp->filp, dst_off, len, in ksmbd_vfs_copy_file_ranges()
1858 wait_event(flock->fl_wait, !flock->fl_blocker); in ksmbd_vfs_posix_lock_wait()
1863 return wait_event_interruptible_timeout(flock->fl_wait, in ksmbd_vfs_posix_lock_wait_timeout()
1864 !flock->fl_blocker, in ksmbd_vfs_posix_lock_wait_timeout()
1878 struct dentry *dentry = path->dentry; in ksmbd_vfs_set_init_posix_acl()
1883 return -EOPNOTSUPP; in ksmbd_vfs_set_init_posix_acl()
1885 ksmbd_debug(SMB, "Set posix acls\n"); in ksmbd_vfs_set_init_posix_acl()
1890 /* Set default owner group */ in ksmbd_vfs_set_init_posix_acl()
1891 acl_state.owner.allow = (inode->i_mode & 0700) >> 6; in ksmbd_vfs_set_init_posix_acl()
1892 acl_state.group.allow = (inode->i_mode & 0070) >> 3; in ksmbd_vfs_set_init_posix_acl()
1893 acl_state.other.allow = inode->i_mode & 0007; in ksmbd_vfs_set_init_posix_acl()
1894 acl_state.users->aces[acl_state.users->n].uid = inode->i_uid; in ksmbd_vfs_set_init_posix_acl()
1895 acl_state.users->aces[acl_state.users->n++].perms.allow = in ksmbd_vfs_set_init_posix_acl()
1897 acl_state.groups->aces[acl_state.groups->n].gid = inode->i_gid; in ksmbd_vfs_set_init_posix_acl()
1898 acl_state.groups->aces[acl_state.groups->n++].perms.allow = in ksmbd_vfs_set_init_posix_acl()
1905 return -ENOMEM; in ksmbd_vfs_set_init_posix_acl()
1907 posix_state_to_acl(&acl_state, acls->a_entries); in ksmbd_vfs_set_init_posix_acl()
1911 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n", in ksmbd_vfs_set_init_posix_acl()
1913 else if (S_ISDIR(inode->i_mode)) { in ksmbd_vfs_set_init_posix_acl()
1914 posix_state_to_acl(&acl_state, acls->a_entries); in ksmbd_vfs_set_init_posix_acl()
1917 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n", in ksmbd_vfs_set_init_posix_acl()
1931 struct dentry *dentry = path->dentry; in ksmbd_vfs_inherit_posix_acl()
1936 return -EOPNOTSUPP; in ksmbd_vfs_inherit_posix_acl()
1940 return -ENOENT; in ksmbd_vfs_inherit_posix_acl()
1941 pace = acls->a_entries; in ksmbd_vfs_inherit_posix_acl()
1943 for (i = 0; i < acls->a_count; i++, pace++) { in ksmbd_vfs_inherit_posix_acl()
1944 if (pace->e_tag == ACL_MASK) { in ksmbd_vfs_inherit_posix_acl()
1945 pace->e_perm = 0x07; in ksmbd_vfs_inherit_posix_acl()
1952 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n", in ksmbd_vfs_inherit_posix_acl()
1954 if (S_ISDIR(inode->i_mode)) { in ksmbd_vfs_inherit_posix_acl()
1958 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n", in ksmbd_vfs_inherit_posix_acl()