Lines Matching +full:buffered +full:- +full:positive
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
70 f = fdget(hreq->fd); in xfs_find_handle()
72 return -EBADF; in xfs_find_handle()
75 error = user_path_at(AT_FDCWD, hreq->path, 0, &path); in xfs_find_handle()
86 error = -EINVAL; in xfs_find_handle()
87 if (inode->i_sb->s_magic != XFS_SB_MAGIC) in xfs_find_handle()
90 error = -EBADF; in xfs_find_handle()
91 if (!S_ISREG(inode->i_mode) && in xfs_find_handle()
92 !S_ISDIR(inode->i_mode) && in xfs_find_handle()
93 !S_ISLNK(inode->i_mode)) in xfs_find_handle()
97 memcpy(&handle.ha_fsid, ip->i_mount->m_fixedfsid, sizeof(xfs_fsid_t)); in xfs_find_handle()
106 handle.ha_fid.fid_len = sizeof(xfs_fid_t) - in xfs_find_handle()
109 handle.ha_fid.fid_gen = inode->i_generation; in xfs_find_handle()
110 handle.ha_fid.fid_ino = ip->i_ino; in xfs_find_handle()
114 error = -EFAULT; in xfs_find_handle()
115 if (copy_to_user(hreq->ohandle, &handle, hsize) || in xfs_find_handle()
116 copy_to_user(hreq->ohandlen, &hsize, sizeof(__s32))) in xfs_find_handle()
156 if (!S_ISDIR(file_inode(parfilp)->i_mode)) in xfs_handle_to_dentry()
157 return ERR_PTR(-ENOTDIR); in xfs_handle_to_dentry()
160 return ERR_PTR(-EINVAL); in xfs_handle_to_dentry()
162 return ERR_PTR(-EFAULT); in xfs_handle_to_dentry()
164 sizeof(handle.ha_fid) - sizeof(handle.ha_fid.fid_len)) in xfs_handle_to_dentry()
165 return ERR_PTR(-EINVAL); in xfs_handle_to_dentry()
171 return exportfs_decode_fh(parfilp->f_path.mnt, (struct fid *)&fid, 3, in xfs_handle_to_dentry()
181 return xfs_handle_to_dentry(parfilp, hreq->ihandle, hreq->ihandlen); in xfs_handlereq_to_dentry()
200 return -EPERM; in xfs_open_by_handle()
208 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))) { in xfs_open_by_handle()
209 error = -EPERM; in xfs_open_by_handle()
214 hreq->oflags |= O_LARGEFILE; in xfs_open_by_handle()
217 permflag = hreq->oflags; in xfs_open_by_handle()
221 error = -EPERM; in xfs_open_by_handle()
226 error = -EPERM; in xfs_open_by_handle()
231 if (S_ISDIR(inode->i_mode) && (fmode & FMODE_WRITE)) { in xfs_open_by_handle()
232 error = -EISDIR; in xfs_open_by_handle()
242 path.mnt = parfilp->f_path.mnt; in xfs_open_by_handle()
244 filp = dentry_open(&path, hreq->oflags, cred); in xfs_open_by_handle()
251 if (S_ISREG(inode->i_mode)) { in xfs_open_by_handle()
252 filp->f_flags |= O_NOATIME; in xfs_open_by_handle()
253 filp->f_mode |= FMODE_NOCMTIME; in xfs_open_by_handle()
274 return -EPERM; in xfs_readlink_by_handle()
282 error = -EINVAL; in xfs_readlink_by_handle()
286 if (copy_from_user(&olen, hreq->ohandlen, sizeof(__u32))) { in xfs_readlink_by_handle()
287 error = -EFAULT; in xfs_readlink_by_handle()
291 error = vfs_readlink(dentry, hreq->ohandle, olen); in xfs_readlink_by_handle()
311 struct xfs_attrlist *alist = context->buffer; in xfs_ioc_attr_put_listent()
315 ASSERT(!context->seen_enough); in xfs_ioc_attr_put_listent()
316 ASSERT(context->count >= 0); in xfs_ioc_attr_put_listent()
317 ASSERT(context->count < (ATTR_MAX_VALUELEN/8)); in xfs_ioc_attr_put_listent()
318 ASSERT(context->firstu >= sizeof(*alist)); in xfs_ioc_attr_put_listent()
319 ASSERT(context->firstu <= context->bufsize); in xfs_ioc_attr_put_listent()
324 if (context->attr_filter != (flags & XFS_ATTR_NSP_ONDISK_MASK)) in xfs_ioc_attr_put_listent()
328 context->count * sizeof(alist->al_offset[0]); in xfs_ioc_attr_put_listent()
331 context->firstu -= round_up(offsetof(struct xfs_attrlist_ent, a_name) + in xfs_ioc_attr_put_listent()
333 if (context->firstu < arraytop) { in xfs_ioc_attr_put_listent()
335 alist->al_more = 1; in xfs_ioc_attr_put_listent()
336 context->seen_enough = 1; in xfs_ioc_attr_put_listent()
340 aep = context->buffer + context->firstu; in xfs_ioc_attr_put_listent()
341 aep->a_valuelen = valuelen; in xfs_ioc_attr_put_listent()
342 memcpy(aep->a_name, name, namelen); in xfs_ioc_attr_put_listent()
343 aep->a_name[namelen] = 0; in xfs_ioc_attr_put_listent()
344 alist->al_offset[context->count++] = context->firstu; in xfs_ioc_attr_put_listent()
345 alist->al_count = context->count; in xfs_ioc_attr_put_listent()
386 return -EINVAL; in xfs_ioc_attr_list()
392 return -EINVAL; in xfs_ioc_attr_list()
394 return -EINVAL; in xfs_ioc_attr_list()
400 return -EFAULT; in xfs_ioc_attr_list()
402 return -EINVAL; in xfs_ioc_attr_list()
406 return -EINVAL; in xfs_ioc_attr_list()
410 return -ENOMEM; in xfs_ioc_attr_list()
424 alist->al_count = 0; in xfs_ioc_attr_list()
425 alist->al_more = 0; in xfs_ioc_attr_list()
426 alist->al_offset[0] = context.bufsize; in xfs_ioc_attr_list()
434 error = -EFAULT; in xfs_ioc_attr_list()
447 int error = -ENOMEM; in xfs_attrlist_by_handle()
450 return -EPERM; in xfs_attrlist_by_handle()
452 return -EFAULT; in xfs_attrlist_by_handle()
459 al_hreq.buflen, al_hreq.flags, &p->pos); in xfs_attrlist_by_handle()
483 return -EINVAL; in xfs_attrmulti_attr_get()
491 error = -EFAULT; in xfs_attrmulti_attr_get()
516 return -EPERM; in xfs_attrmulti_attr_set()
520 return -EINVAL; in xfs_attrmulti_attr_set()
548 return -EINVAL; in xfs_ioc_attrmulti_one()
570 error = -EINVAL; in xfs_ioc_attrmulti_one()
590 return -EPERM; in xfs_attrmulti_by_handle()
592 return -EFAULT; in xfs_attrmulti_by_handle()
596 return -E2BIG; in xfs_attrmulti_by_handle()
602 error = -E2BIG; in xfs_attrmulti_by_handle()
622 error = -EFAULT; in xfs_attrmulti_by_handle()
642 if (inode->i_flags & (S_IMMUTABLE|S_APPEND)) in xfs_ioc_space()
643 return -EPERM; in xfs_ioc_space()
645 if (!(filp->f_mode & FMODE_WRITE)) in xfs_ioc_space()
646 return -EBADF; in xfs_ioc_space()
648 if (!S_ISREG(inode->i_mode)) in xfs_ioc_space()
649 return -EINVAL; in xfs_ioc_space()
652 return -EOPNOTSUPP; in xfs_ioc_space()
654 if (filp->f_flags & O_DSYNC) in xfs_ioc_space()
656 if (filp->f_mode & FMODE_NOCMTIME) in xfs_ioc_space()
669 switch (bf->l_whence) { in xfs_ioc_space()
673 bf->l_start += filp->f_pos; in xfs_ioc_space()
676 bf->l_start += XFS_ISIZE(ip); in xfs_ioc_space()
679 error = -EINVAL; in xfs_ioc_space()
683 if (bf->l_start < 0 || bf->l_start > inode->i_sb->s_maxbytes) { in xfs_ioc_space()
684 error = -EINVAL; in xfs_ioc_space()
688 if (bf->l_start > XFS_ISIZE(ip)) { in xfs_ioc_space()
690 bf->l_start - XFS_ISIZE(ip), 0); in xfs_ioc_space()
696 iattr.ia_size = bf->l_start; in xfs_ioc_space()
710 /* Return 0 on success or positive error */
718 xfs_bulkstat_to_bstat(breq->mp, &bs1, bstat); in xfs_fsbulkstat_one_fmt()
719 if (copy_to_user(breq->ubuffer, &bs1, sizeof(bs1))) in xfs_fsbulkstat_one_fmt()
720 return -EFAULT; in xfs_fsbulkstat_one_fmt()
732 if (copy_to_user(breq->ubuffer, &ig1, sizeof(struct xfs_inogrp))) in xfs_fsinumbers_fmt()
733 return -EFAULT; in xfs_fsinumbers_fmt()
743 struct xfs_mount *mp = XFS_I(file_inode(file))->i_mount; in xfs_ioc_fsbulkstat()
757 return -EPERM; in xfs_ioc_fsbulkstat()
760 return -EIO; in xfs_ioc_fsbulkstat()
763 return -EFAULT; in xfs_ioc_fsbulkstat()
766 return -EFAULT; in xfs_ioc_fsbulkstat()
769 return -EINVAL; in xfs_ioc_fsbulkstat()
772 return -EINVAL; in xfs_ioc_fsbulkstat()
791 lastino = breq.startino - 1; in xfs_ioc_fsbulkstat()
799 lastino = breq.startino - 1; in xfs_ioc_fsbulkstat()
807 return -EFAULT; in xfs_ioc_fsbulkstat()
811 return -EFAULT; in xfs_ioc_fsbulkstat()
816 /* Return 0 on success or positive error */
822 if (copy_to_user(breq->ubuffer, bstat, sizeof(struct xfs_bulkstat))) in xfs_bulkstat_fmt()
823 return -EFAULT; in xfs_bulkstat_fmt()
830 * should proceed; -ECANCELED if there's nothing to do; or the usual
840 if (hdr->icount == 0 || in xfs_bulk_ireq_setup()
841 (hdr->flags & ~XFS_BULK_IREQ_FLAGS_ALL) || in xfs_bulk_ireq_setup()
842 memchr_inv(hdr->reserved, 0, sizeof(hdr->reserved))) in xfs_bulk_ireq_setup()
843 return -EINVAL; in xfs_bulk_ireq_setup()
845 breq->startino = hdr->ino; in xfs_bulk_ireq_setup()
846 breq->ubuffer = ubuffer; in xfs_bulk_ireq_setup()
847 breq->icount = hdr->icount; in xfs_bulk_ireq_setup()
848 breq->ocount = 0; in xfs_bulk_ireq_setup()
849 breq->flags = 0; in xfs_bulk_ireq_setup()
856 if (hdr->flags & XFS_BULK_IREQ_SPECIAL) { in xfs_bulk_ireq_setup()
857 if (hdr->flags & XFS_BULK_IREQ_AGNO) in xfs_bulk_ireq_setup()
858 return -EINVAL; in xfs_bulk_ireq_setup()
860 switch (hdr->ino) { in xfs_bulk_ireq_setup()
862 hdr->ino = mp->m_sb.sb_rootino; in xfs_bulk_ireq_setup()
865 return -EINVAL; in xfs_bulk_ireq_setup()
867 breq->icount = 1; in xfs_bulk_ireq_setup()
872 * If @hdr->ino is zero, we start iterating in that AG. If @hdr->ino is in xfs_bulk_ireq_setup()
875 if (hdr->flags & XFS_BULK_IREQ_AGNO) { in xfs_bulk_ireq_setup()
876 if (hdr->agno >= mp->m_sb.sb_agcount) in xfs_bulk_ireq_setup()
877 return -EINVAL; in xfs_bulk_ireq_setup()
879 if (breq->startino == 0) in xfs_bulk_ireq_setup()
880 breq->startino = XFS_AGINO_TO_INO(mp, hdr->agno, 0); in xfs_bulk_ireq_setup()
881 else if (XFS_INO_TO_AGNO(mp, breq->startino) < hdr->agno) in xfs_bulk_ireq_setup()
882 return -EINVAL; in xfs_bulk_ireq_setup()
884 breq->flags |= XFS_IBULK_SAME_AG; in xfs_bulk_ireq_setup()
887 if (XFS_INO_TO_AGNO(mp, breq->startino) > hdr->agno) in xfs_bulk_ireq_setup()
888 return -ECANCELED; in xfs_bulk_ireq_setup()
889 } else if (hdr->agno) in xfs_bulk_ireq_setup()
890 return -EINVAL; in xfs_bulk_ireq_setup()
893 if (XFS_INO_TO_AGNO(mp, breq->startino) >= mp->m_sb.sb_agcount) in xfs_bulk_ireq_setup()
894 return -ECANCELED; in xfs_bulk_ireq_setup()
908 hdr->ino = breq->startino; in xfs_bulk_ireq_teardown()
909 hdr->ocount = breq->ocount; in xfs_bulk_ireq_teardown()
919 struct xfs_mount *mp = XFS_I(file_inode(file))->i_mount; in xfs_ioc_bulkstat()
928 return -EPERM; in xfs_ioc_bulkstat()
931 return -EIO; in xfs_ioc_bulkstat()
933 if (copy_from_user(&hdr, &arg->hdr, sizeof(hdr))) in xfs_ioc_bulkstat()
934 return -EFAULT; in xfs_ioc_bulkstat()
936 error = xfs_bulk_ireq_setup(mp, &hdr, &breq, arg->bulkstat); in xfs_ioc_bulkstat()
937 if (error == -ECANCELED) in xfs_ioc_bulkstat()
948 if (copy_to_user(&arg->hdr, &hdr, sizeof(hdr))) in xfs_ioc_bulkstat()
949 return -EFAULT; in xfs_ioc_bulkstat()
959 if (copy_to_user(breq->ubuffer, igrp, sizeof(struct xfs_inumbers))) in xfs_inumbers_fmt()
960 return -EFAULT; in xfs_inumbers_fmt()
978 return -EPERM; in xfs_ioc_inumbers()
981 return -EIO; in xfs_ioc_inumbers()
983 if (copy_from_user(&hdr, &arg->hdr, sizeof(hdr))) in xfs_ioc_inumbers()
984 return -EFAULT; in xfs_ioc_inumbers()
986 error = xfs_bulk_ireq_setup(mp, &hdr, &breq, arg->inumbers); in xfs_ioc_inumbers()
987 if (error == -ECANCELED) in xfs_ioc_inumbers()
998 if (copy_to_user(&arg->hdr, &hdr, sizeof(hdr))) in xfs_ioc_inumbers()
999 return -EFAULT; in xfs_ioc_inumbers()
1025 return -EFAULT; in xfs_ioc_fsgeometry()
1038 return -EFAULT; in xfs_ioc_ag_geometry()
1040 return -EINVAL; in xfs_ioc_ag_geometry()
1042 return -EINVAL; in xfs_ioc_ag_geometry()
1049 return -EFAULT; in xfs_ioc_ag_geometry()
1063 struct xfs_mount *mp = ip->i_mount; in xfs_fill_fsxattr()
1068 if (ip->i_diflags & XFS_DIFLAG_EXTSIZE) { in xfs_fill_fsxattr()
1069 fa->fsx_extsize = XFS_FSB_TO_B(mp, ip->i_extsize); in xfs_fill_fsxattr()
1070 } else if (ip->i_diflags & XFS_DIFLAG_EXTSZINHERIT) { in xfs_fill_fsxattr()
1076 if ((ip->i_diflags & XFS_DIFLAG_RTINHERIT) && in xfs_fill_fsxattr()
1077 ip->i_extsize % mp->m_sb.sb_rextsize > 0) { in xfs_fill_fsxattr()
1078 fa->fsx_xflags &= ~(FS_XFLAG_EXTSIZE | in xfs_fill_fsxattr()
1080 fa->fsx_extsize = 0; in xfs_fill_fsxattr()
1082 fa->fsx_extsize = XFS_FSB_TO_B(mp, ip->i_extsize); in xfs_fill_fsxattr()
1086 if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) in xfs_fill_fsxattr()
1087 fa->fsx_cowextsize = XFS_FSB_TO_B(mp, ip->i_cowextsize); in xfs_fill_fsxattr()
1088 fa->fsx_projid = ip->i_projid; in xfs_fill_fsxattr()
1090 fa->fsx_nextents = xfs_iext_count(ifp); in xfs_fill_fsxattr()
1092 fa->fsx_nextents = xfs_ifork_nextents(ifp); in xfs_fill_fsxattr()
1117 return -ENOTTY; in xfs_fileattr_get()
1133 (ip->i_diflags & XFS_DIFLAG_PREALLOC); in xfs_flags2diflags()
1149 if (S_ISDIR(VFS_I(ip)->i_mode)) { in xfs_flags2diflags()
1158 } else if (S_ISREG(VFS_I(ip)->i_mode)) { in xfs_flags2diflags()
1174 (ip->i_diflags2 & (XFS_DIFLAG2_REFLINK | in xfs_flags2diflags2()
1191 struct xfs_mount *mp = ip->i_mount; in xfs_ioctl_setattr_xflags()
1195 if ((ip->i_df.if_nextents || ip->i_delayed_blks) && in xfs_ioctl_setattr_xflags()
1196 XFS_IS_REALTIME_INODE(ip) != (fa->fsx_xflags & FS_XFLAG_REALTIME)) in xfs_ioctl_setattr_xflags()
1197 return -EINVAL; in xfs_ioctl_setattr_xflags()
1200 if (fa->fsx_xflags & FS_XFLAG_REALTIME) { in xfs_ioctl_setattr_xflags()
1201 if (mp->m_sb.sb_rblocks == 0 || mp->m_sb.sb_rextsize == 0 || in xfs_ioctl_setattr_xflags()
1202 (ip->i_extsize % mp->m_sb.sb_rextsize)) in xfs_ioctl_setattr_xflags()
1203 return -EINVAL; in xfs_ioctl_setattr_xflags()
1207 if ((fa->fsx_xflags & FS_XFLAG_REALTIME) && xfs_is_reflink_inode(ip)) in xfs_ioctl_setattr_xflags()
1208 ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK; in xfs_ioctl_setattr_xflags()
1211 if ((fa->fsx_xflags & FS_XFLAG_DAX) && xfs_is_reflink_inode(ip)) in xfs_ioctl_setattr_xflags()
1212 return -EINVAL; in xfs_ioctl_setattr_xflags()
1215 i_flags2 = xfs_flags2diflags2(ip, fa->fsx_xflags); in xfs_ioctl_setattr_xflags()
1217 return -EINVAL; in xfs_ioctl_setattr_xflags()
1219 ip->i_diflags = xfs_flags2diflags(ip, fa->fsx_xflags); in xfs_ioctl_setattr_xflags()
1220 ip->i_diflags2 = i_flags2; in xfs_ioctl_setattr_xflags()
1234 struct xfs_mount *mp = ip->i_mount; in xfs_ioctl_setattr_prepare_dax()
1237 if (S_ISDIR(inode->i_mode)) in xfs_ioctl_setattr_prepare_dax()
1243 if (((fa->fsx_xflags & FS_XFLAG_DAX) && in xfs_ioctl_setattr_prepare_dax()
1244 !(ip->i_diflags2 & XFS_DIFLAG2_DAX)) || in xfs_ioctl_setattr_prepare_dax()
1245 (!(fa->fsx_xflags & FS_XFLAG_DAX) && in xfs_ioctl_setattr_prepare_dax()
1246 (ip->i_diflags2 & XFS_DIFLAG2_DAX))) in xfs_ioctl_setattr_prepare_dax()
1261 struct xfs_mount *mp = ip->i_mount; in xfs_ioctl_setattr_get_trans()
1263 int error = -EROFS; in xfs_ioctl_setattr_get_trans()
1267 error = -EIO; in xfs_ioctl_setattr_get_trans()
1294 struct xfs_mount *mp = ip->i_mount; in xfs_ioctl_setattr_check_extsize()
1298 if (!fa->fsx_valid) in xfs_ioctl_setattr_check_extsize()
1301 if (S_ISREG(VFS_I(ip)->i_mode) && ip->i_df.if_nextents && in xfs_ioctl_setattr_check_extsize()
1302 XFS_FSB_TO_B(mp, ip->i_extsize) != fa->fsx_extsize) in xfs_ioctl_setattr_check_extsize()
1303 return -EINVAL; in xfs_ioctl_setattr_check_extsize()
1305 if (fa->fsx_extsize & mp->m_blockmask) in xfs_ioctl_setattr_check_extsize()
1306 return -EINVAL; in xfs_ioctl_setattr_check_extsize()
1308 new_diflags = xfs_flags2diflags(ip, fa->fsx_xflags); in xfs_ioctl_setattr_check_extsize()
1320 rtextsize_bytes = XFS_FSB_TO_B(mp, mp->m_sb.sb_rextsize); in xfs_ioctl_setattr_check_extsize()
1321 if (fa->fsx_extsize % rtextsize_bytes) in xfs_ioctl_setattr_check_extsize()
1322 return -EINVAL; in xfs_ioctl_setattr_check_extsize()
1325 failaddr = xfs_inode_validate_extsize(ip->i_mount, in xfs_ioctl_setattr_check_extsize()
1326 XFS_B_TO_FSB(mp, fa->fsx_extsize), in xfs_ioctl_setattr_check_extsize()
1327 VFS_I(ip)->i_mode, new_diflags); in xfs_ioctl_setattr_check_extsize()
1328 return failaddr != NULL ? -EINVAL : 0; in xfs_ioctl_setattr_check_extsize()
1336 struct xfs_mount *mp = ip->i_mount; in xfs_ioctl_setattr_check_cowextsize()
1341 if (!fa->fsx_valid) in xfs_ioctl_setattr_check_cowextsize()
1344 if (fa->fsx_cowextsize & mp->m_blockmask) in xfs_ioctl_setattr_check_cowextsize()
1345 return -EINVAL; in xfs_ioctl_setattr_check_cowextsize()
1347 new_diflags = xfs_flags2diflags(ip, fa->fsx_xflags); in xfs_ioctl_setattr_check_cowextsize()
1348 new_diflags2 = xfs_flags2diflags2(ip, fa->fsx_xflags); in xfs_ioctl_setattr_check_cowextsize()
1350 failaddr = xfs_inode_validate_cowextsize(ip->i_mount, in xfs_ioctl_setattr_check_cowextsize()
1351 XFS_B_TO_FSB(mp, fa->fsx_cowextsize), in xfs_ioctl_setattr_check_cowextsize()
1352 VFS_I(ip)->i_mode, new_diflags, new_diflags2); in xfs_ioctl_setattr_check_cowextsize()
1353 return failaddr != NULL ? -EINVAL : 0; in xfs_ioctl_setattr_check_cowextsize()
1361 if (!fa->fsx_valid) in xfs_ioctl_setattr_check_projid()
1365 if (fa->fsx_projid > (uint16_t)-1 && in xfs_ioctl_setattr_check_projid()
1366 !xfs_has_projid32(ip->i_mount)) in xfs_ioctl_setattr_check_projid()
1367 return -EINVAL; in xfs_ioctl_setattr_check_projid()
1378 struct xfs_mount *mp = ip->i_mount; in xfs_fileattr_set()
1387 return -ENOTTY; in xfs_fileattr_set()
1389 if (!fa->fsx_valid) { in xfs_fileattr_set()
1390 if (fa->flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | in xfs_fileattr_set()
1393 return -EOPNOTSUPP; in xfs_fileattr_set()
1408 if (fa->fsx_valid && XFS_IS_QUOTA_ON(mp)) { in xfs_fileattr_set()
1409 error = xfs_qm_vop_dqalloc(ip, VFS_I(ip)->i_uid, in xfs_fileattr_set()
1410 VFS_I(ip)->i_gid, fa->fsx_projid, in xfs_fileattr_set()
1436 if (!fa->fsx_valid) in xfs_fileattr_set()
1442 * The set-user-ID and set-group-ID bits of a file will be cleared upon in xfs_fileattr_set()
1446 if ((VFS_I(ip)->i_mode & (S_ISUID|S_ISGID)) && in xfs_fileattr_set()
1448 VFS_I(ip)->i_mode &= ~(S_ISUID|S_ISGID); in xfs_fileattr_set()
1451 if (ip->i_projid != fa->fsx_projid) { in xfs_fileattr_set()
1454 &ip->i_pdquot, pdqp); in xfs_fileattr_set()
1456 ip->i_projid = fa->fsx_projid; in xfs_fileattr_set()
1464 if (ip->i_diflags & (XFS_DIFLAG_EXTSIZE | XFS_DIFLAG_EXTSZINHERIT)) in xfs_fileattr_set()
1465 ip->i_extsize = XFS_B_TO_FSB(mp, fa->fsx_extsize); in xfs_fileattr_set()
1467 ip->i_extsize = 0; in xfs_fileattr_set()
1470 if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) in xfs_fileattr_set()
1471 ip->i_cowextsize = XFS_B_TO_FSB(mp, fa->fsx_cowextsize); in xfs_fileattr_set()
1473 ip->i_cowextsize = 0; in xfs_fileattr_set()
1500 if (put_user(p->bmv_offset, &u->bmv_offset) || in xfs_getbmap_format()
1501 put_user(p->bmv_block, &u->bmv_block) || in xfs_getbmap_format()
1502 put_user(p->bmv_length, &u->bmv_length) || in xfs_getbmap_format()
1503 put_user(0, &u->bmv_count) || in xfs_getbmap_format()
1504 put_user(0, &u->bmv_entries)) in xfs_getbmap_format()
1508 if (put_user(0, &u->bmv_iflags) || in xfs_getbmap_format()
1509 put_user(p->bmv_oflags, &u->bmv_oflags) || in xfs_getbmap_format()
1510 put_user(0, &u->bmv_unused1) || in xfs_getbmap_format()
1511 put_user(0, &u->bmv_unused2)) in xfs_getbmap_format()
1539 return -EINVAL; in xfs_ioc_getbmap()
1543 return -EFAULT; in xfs_ioc_getbmap()
1546 return -EINVAL; in xfs_ioc_getbmap()
1548 return -ENOMEM; in xfs_ioc_getbmap()
1552 return -ENOMEM; in xfs_ioc_getbmap()
1558 error = -EFAULT; in xfs_ioc_getbmap()
1589 return -EFAULT; in xfs_ioc_getfsmap()
1595 return -EINVAL; in xfs_ioc_getfsmap()
1610 return -ENOMEM; in xfs_ioc_getfsmap()
1617 trace_xfs_getfsmap_low_key(ip->i_mount, &xhead.fmh_keys[0]); in xfs_ioc_getfsmap()
1618 trace_xfs_getfsmap_high_key(ip->i_mount, &xhead.fmh_keys[1]); in xfs_ioc_getfsmap()
1625 user_recs = &arg->fmh_recs[head.fmh_entries]; in xfs_ioc_getfsmap()
1628 head.fmh_count - head.fmh_entries); in xfs_ioc_getfsmap()
1631 error = xfs_getfsmap(ip->i_mount, &xhead, recs); in xfs_ioc_getfsmap()
1640 case -ECANCELED: in xfs_ioc_getfsmap()
1664 error = -EFAULT; in xfs_ioc_getfsmap()
1669 last_rec = &recs[xhead.fmh_entries - 1]; in xfs_ioc_getfsmap()
1670 last_flags = last_rec->fmr_flags; in xfs_ioc_getfsmap()
1674 trace_xfs_getfsmap_low_key(ip->i_mount, &xhead.fmh_keys[0]); in xfs_ioc_getfsmap()
1685 user_rec = &arg->fmh_recs[head.fmh_entries - 1]; in xfs_ioc_getfsmap()
1687 if (copy_to_user(&user_rec->fmr_flags, &last_flags, in xfs_ioc_getfsmap()
1689 error = -EFAULT; in xfs_ioc_getfsmap()
1696 error = -EFAULT; in xfs_ioc_getfsmap()
1714 return -EPERM; in xfs_ioc_scrub_metadata()
1717 return -EFAULT; in xfs_ioc_scrub_metadata()
1724 return -EFAULT; in xfs_ioc_scrub_metadata()
1738 f = fdget((int)sxp->sx_fdtarget); in xfs_ioc_swapext()
1740 error = -EINVAL; in xfs_ioc_swapext()
1744 if (!(f.file->f_mode & FMODE_WRITE) || in xfs_ioc_swapext()
1745 !(f.file->f_mode & FMODE_READ) || in xfs_ioc_swapext()
1746 (f.file->f_flags & O_APPEND)) { in xfs_ioc_swapext()
1747 error = -EBADF; in xfs_ioc_swapext()
1751 tmp = fdget((int)sxp->sx_fdtmp); in xfs_ioc_swapext()
1753 error = -EINVAL; in xfs_ioc_swapext()
1757 if (!(tmp.file->f_mode & FMODE_WRITE) || in xfs_ioc_swapext()
1758 !(tmp.file->f_mode & FMODE_READ) || in xfs_ioc_swapext()
1759 (tmp.file->f_flags & O_APPEND)) { in xfs_ioc_swapext()
1760 error = -EBADF; in xfs_ioc_swapext()
1766 error = -EINVAL; in xfs_ioc_swapext()
1775 if (f.file->f_op != &xfs_file_operations || in xfs_ioc_swapext()
1776 tmp.file->f_op != &xfs_file_operations) { in xfs_ioc_swapext()
1777 error = -EINVAL; in xfs_ioc_swapext()
1784 if (ip->i_mount != tip->i_mount) { in xfs_ioc_swapext()
1785 error = -EINVAL; in xfs_ioc_swapext()
1789 if (ip->i_ino == tip->i_ino) { in xfs_ioc_swapext()
1790 error = -EINVAL; in xfs_ioc_swapext()
1794 if (xfs_is_shutdown(ip->i_mount)) { in xfs_ioc_swapext()
1795 error = -EIO; in xfs_ioc_swapext()
1814 struct xfs_sb *sbp = &mp->m_sb; in xfs_ioc_getlabel()
1818 BUILD_BUG_ON(sizeof(sbp->sb_fname) > FSLABEL_MAX); in xfs_ioc_getlabel()
1822 spin_lock(&mp->m_sb_lock); in xfs_ioc_getlabel()
1823 strncpy(label, sbp->sb_fname, XFSLABEL_MAX); in xfs_ioc_getlabel()
1824 spin_unlock(&mp->m_sb_lock); in xfs_ioc_getlabel()
1827 return -EFAULT; in xfs_ioc_getlabel()
1837 struct xfs_sb *sbp = &mp->m_sb; in xfs_ioc_setlabel()
1843 return -EPERM; in xfs_ioc_setlabel()
1851 return -EFAULT; in xfs_ioc_setlabel()
1853 if (len > sizeof(sbp->sb_fname)) in xfs_ioc_setlabel()
1854 return -EINVAL; in xfs_ioc_setlabel()
1860 spin_lock(&mp->m_sb_lock); in xfs_ioc_setlabel()
1861 memset(sbp->sb_fname, 0, sizeof(sbp->sb_fname)); in xfs_ioc_setlabel()
1862 memcpy(sbp->sb_fname, label, len); in xfs_ioc_setlabel()
1863 spin_unlock(&mp->m_sb_lock); in xfs_ioc_setlabel()
1871 * buffered reads from userspace (i.e. from blkid) are invalidated, in xfs_ioc_setlabel()
1872 * and userspace will see the newly-written label. in xfs_ioc_setlabel()
1880 mutex_lock(&mp->m_growlock); in xfs_ioc_setlabel()
1882 mutex_unlock(&mp->m_growlock); in xfs_ioc_setlabel()
1884 invalidate_bdev(mp->m_ddev_targp->bt_bdev); in xfs_ioc_setlabel()
1896 if (src->eof_version != XFS_EOFBLOCKS_VERSION) in xfs_fs_eofblocks_from_user()
1897 return -EINVAL; in xfs_fs_eofblocks_from_user()
1899 if (src->eof_flags & ~XFS_EOF_FLAGS_VALID) in xfs_fs_eofblocks_from_user()
1900 return -EINVAL; in xfs_fs_eofblocks_from_user()
1902 if (memchr_inv(&src->pad32, 0, sizeof(src->pad32)) || in xfs_fs_eofblocks_from_user()
1903 memchr_inv(src->pad64, 0, sizeof(src->pad64))) in xfs_fs_eofblocks_from_user()
1904 return -EINVAL; in xfs_fs_eofblocks_from_user()
1906 dst->icw_flags = 0; in xfs_fs_eofblocks_from_user()
1907 if (src->eof_flags & XFS_EOF_FLAGS_SYNC) in xfs_fs_eofblocks_from_user()
1908 dst->icw_flags |= XFS_ICWALK_FLAG_SYNC; in xfs_fs_eofblocks_from_user()
1909 if (src->eof_flags & XFS_EOF_FLAGS_UID) in xfs_fs_eofblocks_from_user()
1910 dst->icw_flags |= XFS_ICWALK_FLAG_UID; in xfs_fs_eofblocks_from_user()
1911 if (src->eof_flags & XFS_EOF_FLAGS_GID) in xfs_fs_eofblocks_from_user()
1912 dst->icw_flags |= XFS_ICWALK_FLAG_GID; in xfs_fs_eofblocks_from_user()
1913 if (src->eof_flags & XFS_EOF_FLAGS_PRID) in xfs_fs_eofblocks_from_user()
1914 dst->icw_flags |= XFS_ICWALK_FLAG_PRID; in xfs_fs_eofblocks_from_user()
1915 if (src->eof_flags & XFS_EOF_FLAGS_MINFILESIZE) in xfs_fs_eofblocks_from_user()
1916 dst->icw_flags |= XFS_ICWALK_FLAG_MINFILESIZE; in xfs_fs_eofblocks_from_user()
1918 dst->icw_prid = src->eof_prid; in xfs_fs_eofblocks_from_user()
1919 dst->icw_min_file_size = src->eof_min_file_size; in xfs_fs_eofblocks_from_user()
1921 dst->icw_uid = INVALID_UID; in xfs_fs_eofblocks_from_user()
1922 if (src->eof_flags & XFS_EOF_FLAGS_UID) { in xfs_fs_eofblocks_from_user()
1923 dst->icw_uid = make_kuid(current_user_ns(), src->eof_uid); in xfs_fs_eofblocks_from_user()
1924 if (!uid_valid(dst->icw_uid)) in xfs_fs_eofblocks_from_user()
1925 return -EINVAL; in xfs_fs_eofblocks_from_user()
1928 dst->icw_gid = INVALID_GID; in xfs_fs_eofblocks_from_user()
1929 if (src->eof_flags & XFS_EOF_FLAGS_GID) { in xfs_fs_eofblocks_from_user()
1930 dst->icw_gid = make_kgid(current_user_ns(), src->eof_gid); in xfs_fs_eofblocks_from_user()
1931 if (!gid_valid(dst->icw_gid)) in xfs_fs_eofblocks_from_user()
1932 return -EINVAL; in xfs_fs_eofblocks_from_user()
1938 * Note: some of the ioctl's return positive numbers as a
1951 struct xfs_mount *mp = ip->i_mount; in xfs_file_ioctl()
1971 return -EFAULT; in xfs_file_ioctl()
1978 da.d_mem = da.d_miniosz = target->bt_logical_sectorsize; in xfs_file_ioctl()
1979 da.d_maxiosz = INT_MAX & ~(da.d_miniosz - 1); in xfs_file_ioctl()
1982 return -EFAULT; in xfs_file_ioctl()
2007 return put_user(inode->i_generation, (int __user *)arg); in xfs_file_ioctl()
2029 return -EFAULT; in xfs_file_ioctl()
2036 return -EFAULT; in xfs_file_ioctl()
2044 return -EFAULT; in xfs_file_ioctl()
2057 return -EFAULT; in xfs_file_ioctl()
2072 return -EFAULT; in xfs_file_ioctl()
2081 return -EPERM; in xfs_file_ioctl()
2084 return -EROFS; in xfs_file_ioctl()
2087 return -EFAULT; in xfs_file_ioctl()
2101 return -EFAULT; in xfs_file_ioctl()
2109 return -EPERM; in xfs_file_ioctl()
2116 return -EFAULT; in xfs_file_ioctl()
2125 return -EFAULT; in xfs_file_ioctl()
2139 return -EFAULT; in xfs_file_ioctl()
2153 return -EFAULT; in xfs_file_ioctl()
2167 return -EPERM; in xfs_file_ioctl()
2170 return -EFAULT; in xfs_file_ioctl()
2179 return -EPERM; in xfs_file_ioctl()
2182 return -EFAULT; in xfs_file_ioctl()
2189 return -EPERM; in xfs_file_ioctl()
2198 return -EPERM; in xfs_file_ioctl()
2201 return -EROFS; in xfs_file_ioctl()
2204 return -EFAULT; in xfs_file_ioctl()
2212 sb_start_write(mp->m_super); in xfs_file_ioctl()
2214 sb_end_write(mp->m_super); in xfs_file_ioctl()
2219 return -ENOTTY; in xfs_file_ioctl()