Lines Matching defs:fattr

70 nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
72 return nfs_fileid_to_ino_t(fattr->fileid);
305 struct nfs_fattr *fattr;
319 struct nfs_fattr *fattr = desc->fattr;
321 if (NFS_FILEID(inode) != fattr->fileid)
323 if (inode_wrong_type(inode, fattr->mode))
336 struct nfs_fattr *fattr = desc->fattr;
338 set_nfs_fileid(inode, fattr->fileid);
339 inode->i_mode = fattr->mode;
352 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr)
356 if (fattr->label == NULL)
359 if ((fattr->valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL) && inode->i_security) {
360 error = security_inode_notifysecctx(inode, fattr->label->label,
361 fattr->label->len);
366 (char *)fattr->label->label,
367 fattr->label->len, error);
394 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr)
402 nfs_ilookup(struct super_block *sb, struct nfs_fattr *fattr, struct nfs_fh *fh)
406 .fattr = fattr,
411 if (!(fattr->valid & NFS_ATTR_FATTR_FILEID) ||
412 !(fattr->valid & NFS_ATTR_FATTR_TYPE))
415 hash = nfs_fattr_to_ino_t(fattr);
444 nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
448 .fattr = fattr
454 nfs_attr_check_mountpoint(sb, fattr);
456 if (nfs_attr_use_mounted_on_fileid(fattr))
457 fattr->fileid = fattr->mounted_on_fileid;
458 else if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
460 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
463 hash = nfs_fattr_to_ino_t(fattr);
481 inode->i_mode = fattr->mode;
483 if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0
500 if (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT ||
501 fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {
502 if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
513 init_special_inode(inode, inode->i_mode, fattr->rdev);
527 nfsi->read_cache_jiffies = fattr->time_start;
528 nfsi->attr_gencount = fattr->gencount;
529 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
530 inode_set_atime_to_ts(inode, fattr->atime);
533 if (fattr->valid & NFS_ATTR_FATTR_MTIME)
534 inode_set_mtime_to_ts(inode, fattr->mtime);
537 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
538 inode_set_ctime_to_ts(inode, fattr->ctime);
541 if (fattr->valid & NFS_ATTR_FATTR_CHANGE)
542 inode_set_iversion_raw(inode, fattr->change_attr);
545 if (fattr->valid & NFS_ATTR_FATTR_SIZE)
546 inode->i_size = nfs_size_to_loff_t(fattr->size);
549 if (fattr->valid & NFS_ATTR_FATTR_NLINK)
550 set_nlink(inode, fattr->nlink);
553 if (fattr->valid & NFS_ATTR_FATTR_OWNER)
554 inode->i_uid = fattr->uid;
557 if (fattr->valid & NFS_ATTR_FATTR_GROUP)
558 inode->i_gid = fattr->gid;
561 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
562 inode->i_blocks = fattr->du.nfs2.blocks;
564 fattr->size != 0)
566 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
570 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
572 fattr->size != 0)
575 nfs_setsecurity(inode, fattr);
585 int err = nfs_refresh_inode(inode, fattr);
614 struct nfs_fattr *fattr;
644 fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
645 if (fattr == NULL) {
650 error = NFS_PROTO(inode)->setattr(dentry, fattr, attr);
652 error = nfs_refresh_inode(inode, fattr);
653 nfs_free_fattr(fattr);
698 * @fattr: pointer to struct nfs_fattr
704 struct nfs_fattr *fattr)
707 nfs_fattr_set_barrier(fattr);
710 NFS_I(inode)->attr_gencount = fattr->gencount;
733 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
734 inode_set_ctime_to_ts(inode, fattr->ctime);
744 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
745 inode_set_atime_to_ts(inode, fattr->atime);
751 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
752 inode_set_ctime_to_ts(inode, fattr->ctime);
760 if (fattr->valid & NFS_ATTR_FATTR_MTIME)
761 inode_set_mtime_to_ts(inode, fattr->mtime);
767 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
768 inode_set_ctime_to_ts(inode, fattr->ctime);
773 if (fattr->valid)
774 nfs_update_inode(inode, fattr);
1197 struct nfs_fattr *fattr = NULL;
1218 fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
1219 if (fattr == NULL)
1224 status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, inode);
1244 status = nfs_refresh_inode(inode, fattr);
1255 nfs_setsecurity(inode, fattr);
1262 nfs_free_fattr(fattr);
1433 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1437 if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
1438 && (fattr->valid & NFS_ATTR_FATTR_CHANGE)
1439 && inode_eq_iversion_raw(inode, fattr->pre_change_attr)) {
1440 inode_set_iversion_raw(inode, fattr->change_attr);
1448 if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
1449 && (fattr->valid & NFS_ATTR_FATTR_CTIME)
1450 && timespec64_equal(&ts, &fattr->pre_ctime)) {
1451 inode_set_ctime_to_ts(inode, fattr->ctime);
1455 if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
1456 && (fattr->valid & NFS_ATTR_FATTR_MTIME)
1457 && timespec64_equal(&ts, &fattr->pre_mtime)) {
1458 inode_set_mtime_to_ts(inode, fattr->mtime);
1460 if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
1461 && (fattr->valid & NFS_ATTR_FATTR_SIZE)
1462 && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
1464 trace_nfs_size_wcc(inode, fattr->size);
1465 i_size_write(inode, nfs_size_to_loff_t(fattr->size));
1472 * @fattr: updated attributes
1475 * so that fattr carries weak cache consistency data, then it may
1478 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
1488 if (!(fattr->valid & NFS_ATTR_FATTR_FILEID)) {
1490 if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
1493 } else if (nfsi->fileid != fattr->fileid) {
1495 if ((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) &&
1496 nfsi->fileid == fattr->mounted_on_fileid)
1500 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode))
1506 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && !inode_eq_iversion_raw(inode, fattr->change_attr))
1510 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec64_equal(&ts, &fattr->mtime))
1514 if ((fattr->valid & NFS_ATTR_FATTR_CTIME) && !timespec64_equal(&ts, &fattr->ctime))
1517 if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1519 new_isize = nfs_size_to_loff_t(fattr->size);
1526 if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
1528 if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, fattr->uid))
1530 if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, fattr->gid))
1534 if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
1538 if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec64_equal(&ts, &fattr->atime))
1544 nfsi->read_cache_jiffies = fattr->time_start;
1561 void nfs_fattr_init(struct nfs_fattr *fattr)
1563 fattr->valid = 0;
1564 fattr->time_start = jiffies;
1565 fattr->gencount = nfs_inc_attr_generation_counter();
1566 fattr->owner_name = NULL;
1567 fattr->group_name = NULL;
1573 * @fattr: attributes
1582 void nfs_fattr_set_barrier(struct nfs_fattr *fattr)
1584 fattr->gencount = nfs_inc_attr_generation_counter();
1589 struct nfs_fattr *fattr;
1591 fattr = kmalloc(sizeof(*fattr), GFP_KERNEL);
1592 if (fattr != NULL) {
1593 nfs_fattr_init(fattr);
1594 fattr->label = NULL;
1596 return fattr;
1602 struct nfs_fattr *fattr = nfs_alloc_fattr();
1604 if (!fattr)
1607 fattr->label = nfs4_label_alloc(server, GFP_KERNEL);
1608 if (IS_ERR(fattr->label)) {
1609 kfree(fattr);
1613 return fattr;
1693 * @fattr: attributes
1700 * The function returns '1' if it thinks the attributes in @fattr are
1704 static int nfs_inode_attrs_cmp_generic(const struct nfs_fattr *fattr,
1709 return (long)(fattr->gencount - attr_gencount) > 0 ||
1715 * @fattr: attributes
1723 * @fattr are more recent, in which case the function returns the
1729 static int nfs_inode_attrs_cmp_monotonic(const struct nfs_fattr *fattr,
1732 s64 diff = fattr->change_attr - inode_peek_iversion_raw(inode);
1740 * @fattr: attributes
1748 * @fattr are more recent, in which case the function returns the
1753 static int nfs_inode_attrs_cmp_strict_monotonic(const struct nfs_fattr *fattr,
1756 return nfs_inode_attrs_cmp_monotonic(fattr, inode) > 0 ? 1 : -1;
1761 * @fattr: attributes
1764 * This function returns '1' if it thinks the attributes in @fattr are
1766 * the attributes in @inode are more recent than the ones in @fattr,
1769 static int nfs_inode_attrs_cmp(const struct nfs_fattr *fattr,
1772 if (nfs_inode_attrs_cmp_generic(fattr, inode) > 0)
1778 if (!(fattr->valid & NFS_ATTR_FATTR_CHANGE))
1780 return nfs_inode_attrs_cmp_monotonic(fattr, inode);
1782 if (!(fattr->valid & NFS_ATTR_FATTR_CHANGE))
1784 return nfs_inode_attrs_cmp_strict_monotonic(fattr, inode);
1791 * @fattr: attributes
1795 * attributes in a partially unrevalidated state, and @fattr
1799 static int nfs_inode_finish_partial_attr_update(const struct nfs_fattr *fattr,
1813 (fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1814 nfs_inode_attrs_cmp_monotonic(fattr, inode) == 0)
1866 struct nfs_fattr *fattr)
1872 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) &&
1873 (fattr->valid & NFS_ATTR_FATTR_PRECHANGE))
1875 fattr->change_attr,
1876 fattr->pre_change_attr);
1880 struct nfs_fattr *fattr)
1882 int attr_cmp = nfs_inode_attrs_cmp(fattr, inode);
1887 if (attr_cmp > 0 || nfs_inode_finish_partial_attr_update(fattr, inode))
1888 ret = nfs_update_inode(inode, fattr);
1890 nfs_ooo_record(NFS_I(inode), fattr);
1893 ret = nfs_check_inode_attributes(inode, fattr);
1903 * @fattr: updated attributes
1910 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1914 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1917 status = nfs_refresh_inode_locked(inode, fattr);
1925 struct nfs_fattr *fattr, unsigned int invalid)
1930 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1932 return nfs_refresh_inode_locked(inode, fattr);
1938 * @fattr: updated attributes
1949 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1954 nfs_fattr_set_barrier(fattr);
1955 status = nfs_post_op_update_inode_locked(inode, fattr,
1968 * @fattr: updated attributes
1976 int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr)
1978 int attr_cmp = nfs_inode_attrs_cmp(fattr, inode);
1984 if ((fattr->valid & NFS_ATTR_FATTR) == 0 || !attr_cmp) {
1986 nfs_ooo_record(NFS_I(inode), fattr);
1987 fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1993 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1994 (fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1995 fattr->pre_change_attr = inode_peek_iversion_raw(inode);
1996 fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1998 if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1999 (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
2000 fattr->pre_ctime = inode_get_ctime(inode);
2001 fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
2003 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
2004 (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
2005 fattr->pre_mtime = inode_get_mtime(inode);
2006 fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
2008 if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
2009 (fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
2010 fattr->pre_size = i_size_read(inode);
2011 fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
2014 status = nfs_post_op_update_inode_locked(inode, fattr,
2025 * @fattr: updated attributes
2033 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
2038 nfs_fattr_set_barrier(fattr);
2039 status = nfs_post_op_update_inode_force_wcc_locked(inode, fattr);
2058 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
2075 atomic_read(&inode->i_count), fattr->valid);
2077 if (!(fattr->valid & NFS_ATTR_FATTR_FILEID)) {
2079 if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
2082 } else if (nfsi->fileid != fattr->fileid) {
2084 if ((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) &&
2085 nfsi->fileid == fattr->mounted_on_fileid)
2091 (long long)fattr->fileid);
2098 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode)) {
2103 __func__, inode->i_ino, inode->i_mode, fattr->mode);
2108 if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
2109 !nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
2111 server->fsid = fattr->fsid;
2119 nfsi->read_cache_jiffies = fattr->time_start;
2128 nfs_wcc_update_inode(inode, fattr);
2140 if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
2150 if (!inode_eq_iversion_raw(inode, fattr->change_attr)) {
2172 nfs_ooo_record(nfsi, fattr);
2174 fattr->change_attr);
2176 inode_set_iversion_raw(inode, fattr->change_attr);
2186 if (fattr->valid & NFS_ATTR_FATTR_MTIME)
2187 inode_set_mtime_to_ts(inode, fattr->mtime);
2192 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
2193 inode_set_ctime_to_ts(inode, fattr->ctime);
2199 if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
2200 new_isize = nfs_size_to_loff_t(fattr->size);
2213 !(fattr->valid & (NFS_ATTR_FATTR_SPACE_USED |
2215 fattr->du.nfs3.used = 0;
2216 fattr->valid |= NFS_ATTR_FATTR_SPACE_USED;
2222 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
2223 inode_set_atime_to_ts(inode, fattr->atime);
2228 if (fattr->valid & NFS_ATTR_FATTR_MODE) {
2229 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
2231 newmode |= fattr->mode & S_IALLUGO;
2240 if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
2241 if (!uid_eq(inode->i_uid, fattr->uid)) {
2244 inode->i_uid = fattr->uid;
2250 if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
2251 if (!gid_eq(inode->i_gid, fattr->gid)) {
2254 inode->i_gid = fattr->gid;
2260 if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
2261 if (inode->i_nlink != fattr->nlink)
2262 set_nlink(inode, fattr->nlink);
2267 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
2271 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
2276 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
2277 inode->i_blocks = fattr->du.nfs2.blocks;
2299 /* Set the barrier to be more recent than this fattr */
2300 if ((long)(fattr->gencount - nfsi->attr_gencount) > 0)
2301 nfsi->attr_gencount = fattr->gencount;