Lines Matching refs:fattr

70 nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
72 return nfs_fileid_to_ino_t(fattr->fileid);
321 struct nfs_fattr *fattr;
335 struct nfs_fattr *fattr = desc->fattr;
337 if (NFS_FILEID(inode) != fattr->fileid)
339 if (inode_wrong_type(inode, fattr->mode))
352 struct nfs_fattr *fattr = desc->fattr;
354 set_nfs_fileid(inode, fattr->fileid);
355 inode->i_mode = fattr->mode;
368 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr,
376 if ((fattr->valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL) && inode->i_security) {
415 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr,
424 nfs_ilookup(struct super_block *sb, struct nfs_fattr *fattr, struct nfs_fh *fh)
428 .fattr = fattr,
433 if (!(fattr->valid & NFS_ATTR_FATTR_FILEID) ||
434 !(fattr->valid & NFS_ATTR_FATTR_TYPE))
437 hash = nfs_fattr_to_ino_t(fattr);
449 nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, struct nfs4_label *label)
453 .fattr = fattr
458 nfs_attr_check_mountpoint(sb, fattr);
460 if (nfs_attr_use_mounted_on_fileid(fattr))
461 fattr->fileid = fattr->mounted_on_fileid;
462 else if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
464 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
467 hash = nfs_fattr_to_ino_t(fattr);
485 inode->i_mode = fattr->mode;
487 if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0
502 if (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT ||
503 fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {
504 if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
515 init_special_inode(inode, inode->i_mode, fattr->rdev);
530 nfsi->read_cache_jiffies = fattr->time_start;
531 nfsi->attr_gencount = fattr->gencount;
532 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
533 inode->i_atime = fattr->atime;
536 if (fattr->valid & NFS_ATTR_FATTR_MTIME)
537 inode->i_mtime = fattr->mtime;
540 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
541 inode->i_ctime = fattr->ctime;
544 if (fattr->valid & NFS_ATTR_FATTR_CHANGE)
545 inode_set_iversion_raw(inode, fattr->change_attr);
548 if (fattr->valid & NFS_ATTR_FATTR_SIZE)
549 inode->i_size = nfs_size_to_loff_t(fattr->size);
552 if (fattr->valid & NFS_ATTR_FATTR_NLINK)
553 set_nlink(inode, fattr->nlink);
556 if (fattr->valid & NFS_ATTR_FATTR_OWNER)
557 inode->i_uid = fattr->uid;
560 if (fattr->valid & NFS_ATTR_FATTR_GROUP)
561 inode->i_gid = fattr->gid;
566 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
567 inode->i_blocks = fattr->du.nfs2.blocks;
568 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
572 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
578 nfs_setsecurity(inode, fattr, label);
588 int err = nfs_refresh_inode(inode, fattr);
616 struct nfs_fattr *fattr;
647 fattr = nfs_alloc_fattr();
648 if (fattr == NULL) {
653 error = NFS_PROTO(inode)->setattr(dentry, fattr, attr);
655 error = nfs_refresh_inode(inode, fattr);
656 nfs_free_fattr(fattr);
699 * @fattr: pointer to struct nfs_fattr
705 struct nfs_fattr *fattr)
708 nfs_fattr_set_barrier(fattr);
711 NFS_I(inode)->attr_gencount = fattr->gencount;
728 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
729 inode->i_ctime = fattr->ctime;
739 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
740 inode->i_atime = fattr->atime;
746 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
747 inode->i_ctime = fattr->ctime;
755 if (fattr->valid & NFS_ATTR_FATTR_MTIME)
756 inode->i_mtime = fattr->mtime;
762 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
763 inode->i_ctime = fattr->ctime;
768 if (fattr->valid)
769 nfs_update_inode(inode, fattr);
1152 struct nfs_fattr *fattr = NULL;
1173 fattr = nfs_alloc_fattr();
1174 if (fattr == NULL)
1185 status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr,
1206 status = nfs_refresh_inode(inode, fattr);
1217 nfs_setsecurity(inode, fattr, label);
1226 nfs_free_fattr(fattr);
1391 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1395 if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
1396 && (fattr->valid & NFS_ATTR_FATTR_CHANGE)
1397 && inode_eq_iversion_raw(inode, fattr->pre_change_attr)) {
1398 inode_set_iversion_raw(inode, fattr->change_attr);
1406 if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
1407 && (fattr->valid & NFS_ATTR_FATTR_CTIME)
1408 && timespec64_equal(&ts, &fattr->pre_ctime)) {
1409 inode->i_ctime = fattr->ctime;
1413 if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
1414 && (fattr->valid & NFS_ATTR_FATTR_MTIME)
1415 && timespec64_equal(&ts, &fattr->pre_mtime)) {
1416 inode->i_mtime = fattr->mtime;
1420 if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
1421 && (fattr->valid & NFS_ATTR_FATTR_SIZE)
1422 && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
1424 i_size_write(inode, nfs_size_to_loff_t(fattr->size));
1431 * @fattr: updated attributes
1434 * so that fattr carries weak cache consistency data, then it may
1437 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
1447 if (!(fattr->valid & NFS_ATTR_FATTR_FILEID)) {
1449 if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
1452 } else if (nfsi->fileid != fattr->fileid) {
1454 if ((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) &&
1455 nfsi->fileid == fattr->mounted_on_fileid)
1459 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode))
1465 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && !inode_eq_iversion_raw(inode, fattr->change_attr))
1470 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec64_equal(&ts, &fattr->mtime))
1474 if ((fattr->valid & NFS_ATTR_FATTR_CTIME) && !timespec64_equal(&ts, &fattr->ctime))
1477 if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1479 new_isize = nfs_size_to_loff_t(fattr->size);
1487 if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
1491 if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, fattr->uid))
1495 if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, fattr->gid))
1501 if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
1505 if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec64_equal(&ts, &fattr->atime))
1511 nfsi->read_cache_jiffies = fattr->time_start;
1528 void nfs_fattr_init(struct nfs_fattr *fattr)
1530 fattr->valid = 0;
1531 fattr->time_start = jiffies;
1532 fattr->gencount = nfs_inc_attr_generation_counter();
1533 fattr->owner_name = NULL;
1534 fattr->group_name = NULL;
1540 * @fattr: attributes
1549 void nfs_fattr_set_barrier(struct nfs_fattr *fattr)
1551 fattr->gencount = nfs_inc_attr_generation_counter();
1556 struct nfs_fattr *fattr;
1558 fattr = kmalloc(sizeof(*fattr), GFP_NOFS);
1559 if (fattr != NULL)
1560 nfs_fattr_init(fattr);
1561 return fattr;
1642 * @fattr: attributes
1648 * that the attributes in fattr are newer, however it also attempt to
1654 * The function returns 'true' if it thinks the attributes in 'fattr' are
1658 static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
1662 return (long)(fattr->gencount - attr_gencount) > 0 ||
1666 static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1672 if (nfs_inode_attrs_need_update(inode, fattr))
1673 ret = nfs_update_inode(inode, fattr);
1675 ret = nfs_check_inode_attributes(inode, fattr);
1684 * @fattr: updated attributes
1691 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1695 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1698 status = nfs_refresh_inode_locked(inode, fattr);
1706 struct nfs_fattr *fattr, unsigned int invalid)
1711 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1713 return nfs_refresh_inode_locked(inode, fattr);
1719 * @fattr: updated attributes
1730 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1735 nfs_fattr_set_barrier(fattr);
1736 status = nfs_post_op_update_inode_locked(inode, fattr,
1749 * @fattr: updated attributes
1757 int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr)
1762 if ((fattr->valid & NFS_ATTR_FATTR) == 0 ||
1763 !nfs_inode_attrs_need_update(inode, fattr)) {
1764 fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1770 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1771 (fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1772 fattr->pre_change_attr = inode_peek_iversion_raw(inode);
1773 fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1775 if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1776 (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
1777 fattr->pre_ctime = inode->i_ctime;
1778 fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
1780 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
1781 (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
1782 fattr->pre_mtime = inode->i_mtime;
1783 fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
1785 if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
1786 (fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
1787 fattr->pre_size = i_size_read(inode);
1788 fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
1791 status = nfs_post_op_update_inode_locked(inode, fattr,
1802 * @fattr: updated attributes
1810 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
1815 nfs_fattr_set_barrier(fattr);
1816 status = nfs_post_op_update_inode_force_wcc_locked(inode, fattr);
1835 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1851 atomic_read(&inode->i_count), fattr->valid);
1853 if (!(fattr->valid & NFS_ATTR_FATTR_FILEID)) {
1855 if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
1858 } else if (nfsi->fileid != fattr->fileid) {
1860 if ((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) &&
1861 nfsi->fileid == fattr->mounted_on_fileid)
1867 (long long)fattr->fileid);
1874 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode)) {
1879 __func__, inode->i_ino, inode->i_mode, fattr->mode);
1885 if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
1886 !nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
1888 server->fsid = fattr->fsid;
1896 nfsi->read_cache_jiffies = fattr->time_start;
1906 nfs_wcc_update_inode(inode, fattr);
1918 if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
1919 if (!inode_eq_iversion_raw(inode, fattr->change_attr)) {
1938 inode_set_iversion_raw(inode, fattr->change_attr);
1949 if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
1950 inode->i_mtime = fattr->mtime;
1958 if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
1959 inode->i_ctime = fattr->ctime;
1968 if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1969 new_isize = nfs_size_to_loff_t(fattr->size);
1996 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
1997 inode->i_atime = fattr->atime;
2005 if (fattr->valid & NFS_ATTR_FATTR_MODE) {
2006 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
2008 newmode |= fattr->mode & S_IALLUGO;
2021 if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
2022 if (!uid_eq(inode->i_uid, fattr->uid)) {
2025 inode->i_uid = fattr->uid;
2035 if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
2036 if (!gid_eq(inode->i_gid, fattr->gid)) {
2039 inode->i_gid = fattr->gid;
2049 if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
2050 if (inode->i_nlink != fattr->nlink) {
2053 set_nlink(inode, fattr->nlink);
2063 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
2067 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
2068 } else if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
2069 inode->i_blocks = fattr->du.nfs2.blocks;
2095 /* Set the barrier to be more recent than this fattr */
2096 if ((long)(fattr->gencount - nfsi->attr_gencount) > 0)
2097 nfsi->attr_gencount = fattr->gencount;