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
56 if (child->d_parent != parent) { in ksmbd_vfs_lock_parent()
58 return -ENOENT; in ksmbd_vfs_lock_parent()
71 struct path *root_share_path = &share_conf->vfs_path; in ksmbd_vfs_path_lookup_locked()
76 pathname = share_conf->path; in ksmbd_vfs_path_lookup_locked()
97 return -ENOENT; in ksmbd_vfs_path_lookup_locked()
100 err = mnt_want_write(parent_path->mnt); in ksmbd_vfs_path_lookup_locked()
104 return -ENOENT; in ksmbd_vfs_path_lookup_locked()
107 inode_lock_nested(parent_path->dentry->d_inode, I_MUTEX_PARENT); in ksmbd_vfs_path_lookup_locked()
108 d = lookup_one_qstr_excl(&last, parent_path->dentry, 0); in ksmbd_vfs_path_lookup_locked()
117 path->dentry = d; in ksmbd_vfs_path_lookup_locked()
118 path->mnt = mntget(parent_path->mnt); in ksmbd_vfs_path_lookup_locked()
132 inode_unlock(d_inode(parent_path->dentry)); in ksmbd_vfs_path_lookup_locked()
133 mnt_drop_write(parent_path->mnt); in ksmbd_vfs_path_lookup_locked()
136 return -ENOENT; in ksmbd_vfs_path_lookup_locked()
156 if (!inode_permission(idmap, d_inode(dentry->d_parent), MAY_EXEC | MAY_WRITE)) in ksmbd_vfs_query_maximal_access()
161 * ksmbd_vfs_create() - vfs helper for smb create file
178 if (err != -ENOENT) in ksmbd_vfs_create()
199 * ksmbd_vfs_mkdir() - vfs helper for smb create directory
218 if (err != -EEXIST) in ksmbd_vfs_mkdir()
230 d = lookup_one(idmap, dentry->d_name.name, dentry->d_parent, in ksmbd_vfs_mkdir()
231 dentry->d_name.len); in ksmbd_vfs_mkdir()
238 err = -ENOENT; in ksmbd_vfs_mkdir()
258 ssize_t value_len = -ENOENT, xattr_list_len; in ksmbd_vfs_getcasexattr()
264 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_getcasexattr()
293 v_len = ksmbd_vfs_getcasexattr(file_mnt_idmap(fp->filp), in ksmbd_vfs_stream_read()
294 fp->filp->f_path.dentry, in ksmbd_vfs_stream_read()
295 fp->stream.name, in ksmbd_vfs_stream_read()
296 fp->stream.size, in ksmbd_vfs_stream_read()
302 count = -EINVAL; in ksmbd_vfs_stream_read()
306 if (v_len - *pos < count) in ksmbd_vfs_stream_read()
307 count = v_len - *pos; in ksmbd_vfs_stream_read()
317 * check_lock_range() - vfs helper for smb byte range file locking
332 if (!ctx || list_empty_careful(&ctx->flc_posix)) in check_lock_range()
335 spin_lock(&ctx->flc_lock); in check_lock_range()
336 list_for_each_entry(flock, &ctx->flc_posix, fl_list) { in check_lock_range()
338 if (flock->fl_end >= start && end >= flock->fl_start) { in check_lock_range()
339 if (flock->fl_type == F_RDLCK) { in check_lock_range()
345 } else if (flock->fl_type == F_WRLCK) { in check_lock_range()
347 if (flock->fl_file != filp) { in check_lock_range()
356 spin_unlock(&ctx->flc_lock); in check_lock_range()
361 * ksmbd_vfs_read() - vfs helper for smb file read
373 struct file *filp = fp->filp; in ksmbd_vfs_read()
377 if (S_ISDIR(inode->i_mode)) in ksmbd_vfs_read()
378 return -EISDIR; in ksmbd_vfs_read()
383 if (work->conn->connection_type) { in ksmbd_vfs_read()
384 if (!(fp->daccess & (FILE_READ_DATA_LE | FILE_EXECUTE_LE))) { in ksmbd_vfs_read()
385 pr_err("no right to read(%pD)\n", fp->filp); in ksmbd_vfs_read()
386 return -EACCES; in ksmbd_vfs_read()
393 if (!work->tcon->posix_extensions) { in ksmbd_vfs_read()
396 ret = check_lock_range(filp, *pos, *pos + count - 1, READ); in ksmbd_vfs_read()
399 return -EAGAIN; in ksmbd_vfs_read()
409 filp->f_pos = *pos; in ksmbd_vfs_read()
417 struct mnt_idmap *idmap = file_mnt_idmap(fp->filp); in ksmbd_vfs_stream_write()
428 count = (*pos + count) - XATTR_SIZE_MAX; in ksmbd_vfs_stream_write()
432 fp->filp->f_path.dentry, in ksmbd_vfs_stream_write()
433 fp->stream.name, in ksmbd_vfs_stream_write()
434 fp->stream.size, in ksmbd_vfs_stream_write()
445 err = -ENOMEM; in ksmbd_vfs_stream_write()
458 &fp->filp->f_path, in ksmbd_vfs_stream_write()
459 fp->stream.name, in ksmbd_vfs_stream_write()
467 fp->filp->f_pos = *pos; in ksmbd_vfs_stream_write()
475 * ksmbd_vfs_write() - vfs helper for smb file write
494 if (work->conn->connection_type) { in ksmbd_vfs_write()
495 if (!(fp->daccess & FILE_WRITE_DATA_LE)) { in ksmbd_vfs_write()
496 pr_err("no right to write(%pD)\n", fp->filp); in ksmbd_vfs_write()
497 err = -EACCES; in ksmbd_vfs_write()
502 filp = fp->filp; in ksmbd_vfs_write()
511 if (!work->tcon->posix_extensions) { in ksmbd_vfs_write()
512 err = check_lock_range(filp, *pos, *pos + count - 1, WRITE); in ksmbd_vfs_write()
515 err = -EAGAIN; in ksmbd_vfs_write()
521 fp->reserve_lease_break = true; in ksmbd_vfs_write()
532 filp->f_pos = *pos; in ksmbd_vfs_write()
539 fp->filp, err); in ksmbd_vfs_write()
547 * ksmbd_vfs_getattr() - vfs helper for smb getattr
565 * ksmbd_vfs_fsync() - vfs helper for smb fsync
579 return -ENOENT; in ksmbd_vfs_fsync()
581 err = vfs_fsync(fp->filp, 0); in ksmbd_vfs_fsync()
589 * ksmbd_vfs_remove_file() - vfs helper for smb rmdir or unlink
597 struct dentry *parent = path->dentry->d_parent; in ksmbd_vfs_remove_file()
601 return -ENOMEM; in ksmbd_vfs_remove_file()
603 if (!d_inode(path->dentry)->i_nlink) { in ksmbd_vfs_remove_file()
604 err = -ENOENT; in ksmbd_vfs_remove_file()
608 idmap = mnt_idmap(path->mnt); in ksmbd_vfs_remove_file()
609 if (S_ISDIR(d_inode(path->dentry)->i_mode)) { in ksmbd_vfs_remove_file()
610 err = vfs_rmdir(idmap, d_inode(parent), path->dentry); in ksmbd_vfs_remove_file()
611 if (err && err != -ENOTEMPTY) in ksmbd_vfs_remove_file()
614 err = vfs_unlink(idmap, d_inode(parent), path->dentry, NULL); in ksmbd_vfs_remove_file()
625 * ksmbd_vfs_link() - vfs helper for creating smb hardlink
639 return -ENOMEM; in ksmbd_vfs_link()
657 err = -EXDEV; in ksmbd_vfs_link()
682 struct dentry *old_child = old_path->dentry; in ksmbd_vfs_rename()
687 struct ksmbd_share_config *share_conf = work->tcon->share_conf; in ksmbd_vfs_rename()
693 return -ENOMEM; in ksmbd_vfs_rename()
704 &share_conf->vfs_path); in ksmbd_vfs_rename()
708 if (old_path->mnt != new_path.mnt) { in ksmbd_vfs_rename()
709 err = -EXDEV; in ksmbd_vfs_rename()
713 err = mnt_want_write(old_path->mnt); in ksmbd_vfs_rename()
719 old_parent = dget(old_child->d_parent); in ksmbd_vfs_rename()
721 err = -EINVAL; in ksmbd_vfs_rename()
725 parent_fp = ksmbd_lookup_fd_inode(old_child->d_parent); in ksmbd_vfs_rename()
727 if (parent_fp->daccess & FILE_DELETE_LE) { in ksmbd_vfs_rename()
729 err = -ESHARE; in ksmbd_vfs_rename()
744 err = -EACCES; in ksmbd_vfs_rename()
749 err = -EEXIST; in ksmbd_vfs_rename()
754 err = -EINVAL; in ksmbd_vfs_rename()
759 err = -ENOTEMPTY; in ksmbd_vfs_rename()
763 rd.old_mnt_idmap = mnt_idmap(old_path->mnt), in ksmbd_vfs_rename()
767 rd.new_dir = new_path.dentry->d_inode, in ksmbd_vfs_rename()
780 mnt_drop_write(old_path->mnt); in ksmbd_vfs_rename()
796 * ksmbd_vfs_truncate() - vfs helper for smb file truncate
809 filp = fp->filp; in ksmbd_vfs_truncate()
814 if (!work->tcon->posix_extensions) { in ksmbd_vfs_truncate()
817 if (size < inode->i_size) { in ksmbd_vfs_truncate()
819 inode->i_size - 1, WRITE); in ksmbd_vfs_truncate()
821 err = check_lock_range(filp, inode->i_size, in ksmbd_vfs_truncate()
822 size - 1, WRITE); in ksmbd_vfs_truncate()
827 return -EAGAIN; in ksmbd_vfs_truncate()
831 err = vfs_truncate(&filp->f_path, size); in ksmbd_vfs_truncate()
838 * ksmbd_vfs_listxattr() - vfs helper for smb list extended attributes
856 return -ENOMEM; in ksmbd_vfs_listxattr()
876 * ksmbd_vfs_getxattr() - vfs helper for smb get extended attributes value
898 return -ENOMEM; in ksmbd_vfs_getxattr()
910 * ksmbd_vfs_setxattr() - vfs helper for smb set extended attributes value
912 * @path: path of dentry to set XATTR at
914 * @attr_value: xattr value to set
929 err = mnt_want_write(path->mnt); in ksmbd_vfs_setxattr()
935 path->dentry, in ksmbd_vfs_setxattr()
943 mnt_drop_write(path->mnt); in ksmbd_vfs_setxattr()
948 * ksmbd_vfs_set_fadvise() - convert smb IO caching options to linux options
956 mapping = filp->f_mapping; in ksmbd_vfs_set_fadvise()
962 filp->f_flags |= O_SYNC; in ksmbd_vfs_set_fadvise()
964 filp->f_ra.ra_pages = inode_to_bdi(mapping->host)->ra_pages * 2; in ksmbd_vfs_set_fadvise()
965 spin_lock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
966 filp->f_mode &= ~FMODE_RANDOM; in ksmbd_vfs_set_fadvise()
967 spin_unlock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
969 spin_lock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
970 filp->f_mode |= FMODE_RANDOM; in ksmbd_vfs_set_fadvise()
971 spin_unlock(&filp->f_lock); in ksmbd_vfs_set_fadvise()
979 if (fp->f_ci->m_fattr & FILE_ATTRIBUTE_SPARSE_FILE_LE) in ksmbd_vfs_zero_data()
980 return vfs_fallocate(fp->filp, in ksmbd_vfs_zero_data()
984 return vfs_fallocate(fp->filp, in ksmbd_vfs_zero_data()
993 struct file *f = fp->filp; in ksmbd_vfs_fqar_lseek()
994 struct inode *inode = file_inode(fp->filp); in ksmbd_vfs_fqar_lseek()
995 loff_t maxbytes = (u64)inode->i_sb->s_maxbytes, end; in ksmbd_vfs_fqar_lseek()
1000 return -EFBIG; in ksmbd_vfs_fqar_lseek()
1008 if (length > maxbytes || (maxbytes - length) < start) in ksmbd_vfs_fqar_lseek()
1009 length = maxbytes - start; in ksmbd_vfs_fqar_lseek()
1011 if (start + length > inode->i_size) in ksmbd_vfs_fqar_lseek()
1012 length = inode->i_size - start; in ksmbd_vfs_fqar_lseek()
1019 if (extent_start != -ENXIO) in ksmbd_vfs_fqar_lseek()
1029 if (extent_end != -ENXIO) in ksmbd_vfs_fqar_lseek()
1038 cpu_to_le64(min(extent_end, end) - extent_start); in ksmbd_vfs_fqar_lseek()
1051 err = mnt_want_write(path->mnt); in ksmbd_vfs_remove_xattr()
1055 err = vfs_removexattr(idmap, path->dentry, attr_name); in ksmbd_vfs_remove_xattr()
1056 mnt_drop_write(path->mnt); in ksmbd_vfs_remove_xattr()
1064 struct dentry *dir, *dentry = filp->f_path.dentry; in ksmbd_vfs_unlink()
1067 err = mnt_want_write(filp->f_path.mnt); in ksmbd_vfs_unlink()
1077 if (S_ISDIR(d_inode(dentry)->i_mode)) in ksmbd_vfs_unlink()
1088 mnt_drop_write(filp->f_path.mnt); in ksmbd_vfs_unlink()
1099 buf->dirent_count++; in __dir_empty()
1101 return buf->dirent_count <= 2; in __dir_empty()
1105 * ksmbd_vfs_empty_dir() - check for empty directory
1120 err = iterate_dir(fp->filp, &readdir_data.ctx); in ksmbd_vfs_empty_dir()
1122 err = -ENOTEMPTY; in ksmbd_vfs_empty_dir()
1133 int cmp = -EINVAL; in __caseless_lookup()
1137 if (buf->used != namlen) in __caseless_lookup()
1139 if (IS_ENABLED(CONFIG_UNICODE) && buf->um) { in __caseless_lookup()
1140 const struct qstr q_buf = {.name = buf->private, in __caseless_lookup()
1141 .len = buf->used}; in __caseless_lookup()
1145 cmp = utf8_strncasecmp(buf->um, &q_buf, &q_name); in __caseless_lookup()
1148 cmp = strncasecmp((char *)buf->private, name, namlen); in __caseless_lookup()
1150 memcpy((char *)buf->private, name, namlen); in __caseless_lookup()
1151 buf->dirent_count = 1; in __caseless_lookup()
1158 * ksmbd_vfs_lookup_in_dir() - lookup a file in a directory
1191 * ksmbd_vfs_kern_path_locked() - lookup a file and get path info
1204 struct ksmbd_share_config *share_conf = work->tcon->share_conf; in ksmbd_vfs_kern_path_locked()
1218 return -ENOMEM; in ksmbd_vfs_kern_path_locked()
1223 *parent_path = share_conf->vfs_path; in ksmbd_vfs_kern_path_locked()
1226 while (d_can_lookup(parent_path->dentry)) { in ksmbd_vfs_kern_path_locked()
1227 char *filename = filepath + path_len - remain_len; in ksmbd_vfs_kern_path_locked()
1229 size_t filename_len = next - filename; in ksmbd_vfs_kern_path_locked()
1237 work->conn->um); in ksmbd_vfs_kern_path_locked()
1243 err = vfs_path_lookup(share_conf->vfs_path.dentry, in ksmbd_vfs_kern_path_locked()
1244 share_conf->vfs_path.mnt, in ksmbd_vfs_kern_path_locked()
1256 remain_len -= filename_len + 1; in ksmbd_vfs_kern_path_locked()
1259 err = -EINVAL; in ksmbd_vfs_kern_path_locked()
1267 err = mnt_want_write(parent_path->mnt); in ksmbd_vfs_kern_path_locked()
1274 err = ksmbd_vfs_lock_parent(parent_path->dentry, path->dentry); in ksmbd_vfs_kern_path_locked()
1285 inode_unlock(d_inode(parent_path->dentry)); in ksmbd_vfs_kern_path_unlock()
1286 mnt_drop_write(parent_path->mnt); in ksmbd_vfs_kern_path_unlock()
1299 abs_name = convert_to_unix_name(work->tcon->share_conf, name); in ksmbd_vfs_kern_path_create()
1301 return ERR_PTR(-ENOMEM); in ksmbd_vfs_kern_path_create()
1315 xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list); in ksmbd_vfs_remove_acl_xattrs()
1323 err = mnt_want_write(path->mnt); in ksmbd_vfs_remove_acl_xattrs()
1327 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_remove_acl_xattrs()
1332 sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1) || in ksmbd_vfs_remove_acl_xattrs()
1334 sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) - 1)) { in ksmbd_vfs_remove_acl_xattrs()
1335 err = vfs_remove_acl(idmap, path->dentry, name); in ksmbd_vfs_remove_acl_xattrs()
1341 mnt_drop_write(path->mnt); in ksmbd_vfs_remove_acl_xattrs()
1354 xattr_list_len = ksmbd_vfs_listxattr(path->dentry, &xattr_list); in ksmbd_vfs_remove_sd_xattrs()
1362 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_remove_sd_xattrs()
1395 sizeof(struct xattr_acl_entry) * posix_acls->a_count, in ksmbd_vfs_make_xattr_posix_acl()
1400 smb_acl->count = posix_acls->a_count; in ksmbd_vfs_make_xattr_posix_acl()
1401 pa_entry = posix_acls->a_entries; in ksmbd_vfs_make_xattr_posix_acl()
1402 xa_entry = smb_acl->entries; in ksmbd_vfs_make_xattr_posix_acl()
1403 for (i = 0; i < posix_acls->a_count; i++, pa_entry++, xa_entry++) { in ksmbd_vfs_make_xattr_posix_acl()
1404 switch (pa_entry->e_tag) { in ksmbd_vfs_make_xattr_posix_acl()
1406 xa_entry->type = SMB_ACL_USER; in ksmbd_vfs_make_xattr_posix_acl()
1407 xa_entry->uid = posix_acl_uid_translate(idmap, pa_entry); in ksmbd_vfs_make_xattr_posix_acl()
1410 xa_entry->type = SMB_ACL_USER_OBJ; in ksmbd_vfs_make_xattr_posix_acl()
1413 xa_entry->type = SMB_ACL_GROUP; in ksmbd_vfs_make_xattr_posix_acl()
1414 xa_entry->gid = posix_acl_gid_translate(idmap, pa_entry); in ksmbd_vfs_make_xattr_posix_acl()
1417 xa_entry->type = SMB_ACL_GROUP_OBJ; in ksmbd_vfs_make_xattr_posix_acl()
1420 xa_entry->type = SMB_ACL_OTHER; in ksmbd_vfs_make_xattr_posix_acl()
1423 xa_entry->type = SMB_ACL_MASK; in ksmbd_vfs_make_xattr_posix_acl()
1426 pr_err("unknown type : 0x%x\n", pa_entry->e_tag); in ksmbd_vfs_make_xattr_posix_acl()
1430 if (pa_entry->e_perm & ACL_READ) in ksmbd_vfs_make_xattr_posix_acl()
1431 xa_entry->perm |= SMB_ACL_READ; in ksmbd_vfs_make_xattr_posix_acl()
1432 if (pa_entry->e_perm & ACL_WRITE) in ksmbd_vfs_make_xattr_posix_acl()
1433 xa_entry->perm |= SMB_ACL_WRITE; in ksmbd_vfs_make_xattr_posix_acl()
1434 if (pa_entry->e_perm & ACL_EXECUTE) in ksmbd_vfs_make_xattr_posix_acl()
1435 xa_entry->perm |= SMB_ACL_EXECUTE; in ksmbd_vfs_make_xattr_posix_acl()
1452 struct dentry *dentry = path->dentry; in ksmbd_vfs_set_sd_xattr()
1462 pntsd->osidoffset = in ksmbd_vfs_set_sd_xattr()
1463 cpu_to_le32(le32_to_cpu(pntsd->osidoffset) + NDR_NTSD_OFFSETOF); in ksmbd_vfs_set_sd_xattr()
1464 pntsd->gsidoffset = in ksmbd_vfs_set_sd_xattr()
1465 cpu_to_le32(le32_to_cpu(pntsd->gsidoffset) + NDR_NTSD_OFFSETOF); in ksmbd_vfs_set_sd_xattr()
1466 pntsd->dacloffset = in ksmbd_vfs_set_sd_xattr()
1467 cpu_to_le32(le32_to_cpu(pntsd->dacloffset) + NDR_NTSD_OFFSETOF); in ksmbd_vfs_set_sd_xattr()
1480 if (S_ISDIR(inode->i_mode)) in ksmbd_vfs_set_sd_xattr()
1542 if (S_ISDIR(inode->i_mode)) in ksmbd_vfs_get_sd_xattr()
1561 rc = -EINVAL; in ksmbd_vfs_get_sd_xattr()
1571 (*pntsd)->osidoffset = cpu_to_le32(le32_to_cpu((*pntsd)->osidoffset) - in ksmbd_vfs_get_sd_xattr()
1573 (*pntsd)->gsidoffset = cpu_to_le32(le32_to_cpu((*pntsd)->gsidoffset) - in ksmbd_vfs_get_sd_xattr()
1575 (*pntsd)->dacloffset = cpu_to_le32(le32_to_cpu((*pntsd)->dacloffset) - in ksmbd_vfs_get_sd_xattr()
1626 err = -EINVAL; in ksmbd_vfs_get_dos_attrib_xattr()
1636 * ksmbd_vfs_init_kstat() - convert unix stat information to smb stat format
1643 struct kstat *kstat = ksmbd_kstat->kstat; in ksmbd_vfs_init_kstat()
1646 info->FileIndex = 0; in ksmbd_vfs_init_kstat()
1647 info->CreationTime = cpu_to_le64(ksmbd_kstat->create_time); in ksmbd_vfs_init_kstat()
1648 time = ksmbd_UnixTimeToNT(kstat->atime); in ksmbd_vfs_init_kstat()
1649 info->LastAccessTime = cpu_to_le64(time); in ksmbd_vfs_init_kstat()
1650 time = ksmbd_UnixTimeToNT(kstat->mtime); in ksmbd_vfs_init_kstat()
1651 info->LastWriteTime = cpu_to_le64(time); in ksmbd_vfs_init_kstat()
1652 time = ksmbd_UnixTimeToNT(kstat->ctime); in ksmbd_vfs_init_kstat()
1653 info->ChangeTime = cpu_to_le64(time); in ksmbd_vfs_init_kstat()
1655 if (ksmbd_kstat->file_attributes & FILE_ATTRIBUTE_DIRECTORY_LE) { in ksmbd_vfs_init_kstat()
1656 info->EndOfFile = 0; in ksmbd_vfs_init_kstat()
1657 info->AllocationSize = 0; in ksmbd_vfs_init_kstat()
1659 info->EndOfFile = cpu_to_le64(kstat->size); in ksmbd_vfs_init_kstat()
1660 info->AllocationSize = cpu_to_le64(kstat->blocks << 9); in ksmbd_vfs_init_kstat()
1662 info->ExtFileAttributes = ksmbd_kstat->file_attributes; in ksmbd_vfs_init_kstat()
1676 ksmbd_kstat->kstat); in ksmbd_vfs_fill_dentry_attrs()
1678 time = ksmbd_UnixTimeToNT(ksmbd_kstat->kstat->ctime); in ksmbd_vfs_fill_dentry_attrs()
1679 ksmbd_kstat->create_time = time; in ksmbd_vfs_fill_dentry_attrs()
1682 * set default value for the case that store dos attributes is not yes in ksmbd_vfs_fill_dentry_attrs()
1685 if (S_ISDIR(ksmbd_kstat->kstat->mode)) in ksmbd_vfs_fill_dentry_attrs()
1686 ksmbd_kstat->file_attributes = FILE_ATTRIBUTE_DIRECTORY_LE; in ksmbd_vfs_fill_dentry_attrs()
1688 ksmbd_kstat->file_attributes = FILE_ATTRIBUTE_ARCHIVE_LE; in ksmbd_vfs_fill_dentry_attrs()
1690 if (test_share_config_flag(work->tcon->share_conf, in ksmbd_vfs_fill_dentry_attrs()
1696 ksmbd_kstat->file_attributes = cpu_to_le32(da.attr); in ksmbd_vfs_fill_dentry_attrs()
1697 ksmbd_kstat->create_time = da.create_time; in ksmbd_vfs_fill_dentry_attrs()
1711 ssize_t value_len = -ENOENT, xattr_list_len; in ksmbd_vfs_casexattr_len()
1717 for (name = xattr_list; name - xattr_list < xattr_list_len; in ksmbd_vfs_casexattr_len()
1745 return -ENOMEM; in ksmbd_vfs_xattr_stream_name()
1771 if (!(src_fp->daccess & (FILE_READ_DATA_LE | FILE_EXECUTE_LE))) { in ksmbd_vfs_copy_file_ranges()
1772 pr_err("no right to read(%pD)\n", src_fp->filp); in ksmbd_vfs_copy_file_ranges()
1773 return -EACCES; in ksmbd_vfs_copy_file_ranges()
1775 if (!(dst_fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE))) { in ksmbd_vfs_copy_file_ranges()
1776 pr_err("no right to write(%pD)\n", dst_fp->filp); in ksmbd_vfs_copy_file_ranges()
1777 return -EACCES; in ksmbd_vfs_copy_file_ranges()
1781 return -EBADF; in ksmbd_vfs_copy_file_ranges()
1785 if (!work->tcon->posix_extensions) { in ksmbd_vfs_copy_file_ranges()
1791 if (check_lock_range(src_fp->filp, src_off, in ksmbd_vfs_copy_file_ranges()
1792 src_off + len - 1, READ)) in ksmbd_vfs_copy_file_ranges()
1793 return -EAGAIN; in ksmbd_vfs_copy_file_ranges()
1794 if (check_lock_range(dst_fp->filp, dst_off, in ksmbd_vfs_copy_file_ranges()
1795 dst_off + len - 1, WRITE)) in ksmbd_vfs_copy_file_ranges()
1796 return -EAGAIN; in ksmbd_vfs_copy_file_ranges()
1800 src_file_size = i_size_read(file_inode(src_fp->filp)); in ksmbd_vfs_copy_file_ranges()
1808 return -E2BIG; in ksmbd_vfs_copy_file_ranges()
1810 ret = vfs_copy_file_range(src_fp->filp, src_off, in ksmbd_vfs_copy_file_ranges()
1811 dst_fp->filp, dst_off, len, 0); in ksmbd_vfs_copy_file_ranges()
1812 if (ret == -EOPNOTSUPP || ret == -EXDEV) in ksmbd_vfs_copy_file_ranges()
1813 ret = vfs_copy_file_range(src_fp->filp, src_off, in ksmbd_vfs_copy_file_ranges()
1814 dst_fp->filp, dst_off, len, in ksmbd_vfs_copy_file_ranges()
1827 wait_event(flock->fl_wait, !flock->fl_blocker); in ksmbd_vfs_posix_lock_wait()
1832 return wait_event_interruptible_timeout(flock->fl_wait, in ksmbd_vfs_posix_lock_wait_timeout()
1833 !flock->fl_blocker, in ksmbd_vfs_posix_lock_wait_timeout()
1847 struct dentry *dentry = path->dentry; in ksmbd_vfs_set_init_posix_acl()
1852 return -EOPNOTSUPP; in ksmbd_vfs_set_init_posix_acl()
1854 ksmbd_debug(SMB, "Set posix acls\n"); in ksmbd_vfs_set_init_posix_acl()
1859 /* Set default owner group */ in ksmbd_vfs_set_init_posix_acl()
1860 acl_state.owner.allow = (inode->i_mode & 0700) >> 6; in ksmbd_vfs_set_init_posix_acl()
1861 acl_state.group.allow = (inode->i_mode & 0070) >> 3; in ksmbd_vfs_set_init_posix_acl()
1862 acl_state.other.allow = inode->i_mode & 0007; in ksmbd_vfs_set_init_posix_acl()
1863 acl_state.users->aces[acl_state.users->n].uid = inode->i_uid; in ksmbd_vfs_set_init_posix_acl()
1864 acl_state.users->aces[acl_state.users->n++].perms.allow = in ksmbd_vfs_set_init_posix_acl()
1866 acl_state.groups->aces[acl_state.groups->n].gid = inode->i_gid; in ksmbd_vfs_set_init_posix_acl()
1867 acl_state.groups->aces[acl_state.groups->n++].perms.allow = in ksmbd_vfs_set_init_posix_acl()
1874 return -ENOMEM; in ksmbd_vfs_set_init_posix_acl()
1876 posix_state_to_acl(&acl_state, acls->a_entries); in ksmbd_vfs_set_init_posix_acl()
1880 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n", in ksmbd_vfs_set_init_posix_acl()
1882 else if (S_ISDIR(inode->i_mode)) { in ksmbd_vfs_set_init_posix_acl()
1883 posix_state_to_acl(&acl_state, acls->a_entries); in ksmbd_vfs_set_init_posix_acl()
1886 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n", in ksmbd_vfs_set_init_posix_acl()
1900 struct dentry *dentry = path->dentry; in ksmbd_vfs_inherit_posix_acl()
1905 return -EOPNOTSUPP; in ksmbd_vfs_inherit_posix_acl()
1909 return -ENOENT; in ksmbd_vfs_inherit_posix_acl()
1910 pace = acls->a_entries; in ksmbd_vfs_inherit_posix_acl()
1912 for (i = 0; i < acls->a_count; i++, pace++) { in ksmbd_vfs_inherit_posix_acl()
1913 if (pace->e_tag == ACL_MASK) { in ksmbd_vfs_inherit_posix_acl()
1914 pace->e_perm = 0x07; in ksmbd_vfs_inherit_posix_acl()
1921 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n", in ksmbd_vfs_inherit_posix_acl()
1923 if (S_ISDIR(inode->i_mode)) { in ksmbd_vfs_inherit_posix_acl()
1927 ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n", in ksmbd_vfs_inherit_posix_acl()