• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/nfs/

Lines Matching defs:fattr

65 nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
67 return nfs_fileid_to_ino_t(fattr->fileid);
201 struct nfs_fattr *fattr;
215 struct nfs_fattr *fattr = desc->fattr;
217 if (NFS_FILEID(inode) != fattr->fileid)
230 struct nfs_fattr *fattr = desc->fattr;
232 set_nfs_fileid(inode, fattr->fileid);
245 nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
249 .fattr = fattr
254 if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
256 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
259 hash = nfs_fattr_to_ino_t(fattr);
277 inode->i_mode = fattr->mode;
278 if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0
295 && fattr->size <= NFS_LIMIT_READDIRPLUS)
298 if ((fattr->valid & NFS_ATTR_FATTR_FSID)
299 && !nfs_fsid_equal(&NFS_SB(sb)->fsid, &fattr->fsid)) {
300 if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
310 init_special_inode(inode, inode->i_mode, fattr->rdev);
323 nfsi->read_cache_jiffies = fattr->time_start;
324 nfsi->attr_gencount = fattr->gencount;
325 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
326 inode->i_atime = fattr->atime;
329 if (fattr->valid & NFS_ATTR_FATTR_MTIME)
330 inode->i_mtime = fattr->mtime;
334 if (fattr->valid & NFS_ATTR_FATTR_CTIME)
335 inode->i_ctime = fattr->ctime;
340 if (fattr->valid & NFS_ATTR_FATTR_CHANGE)
341 nfsi->change_attr = fattr->change_attr;
345 if (fattr->valid & NFS_ATTR_FATTR_SIZE)
346 inode->i_size = nfs_size_to_loff_t(fattr->size);
351 if (fattr->valid & NFS_ATTR_FATTR_NLINK)
352 inode->i_nlink = fattr->nlink;
355 if (fattr->valid & NFS_ATTR_FATTR_OWNER)
356 inode->i_uid = fattr->uid;
361 if (fattr->valid & NFS_ATTR_FATTR_GROUP)
362 inode->i_gid = fattr->gid;
367 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
368 inode->i_blocks = fattr->du.nfs2.blocks;
369 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
373 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
383 nfs_refresh_inode(inode, fattr);
403 struct nfs_fattr *fattr;
426 fattr = nfs_alloc_fattr();
427 if (fattr == NULL)
434 error = NFS_PROTO(inode)->setattr(dentry, fattr, attr);
436 nfs_refresh_inode(inode, fattr);
437 nfs_free_fattr(fattr);
758 struct nfs_fattr *fattr = NULL;
770 fattr = nfs_alloc_fattr();
771 if (fattr == NULL)
775 status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr);
788 status = nfs_refresh_inode(inode, fattr);
804 nfs_free_fattr(fattr);
881 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
885 if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
886 && (fattr->valid & NFS_ATTR_FATTR_CHANGE)
887 && nfsi->change_attr == fattr->pre_change_attr) {
888 nfsi->change_attr = fattr->change_attr;
893 if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
894 && (fattr->valid & NFS_ATTR_FATTR_CTIME)
895 && timespec_equal(&inode->i_ctime, &fattr->pre_ctime))
896 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
898 if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
899 && (fattr->valid & NFS_ATTR_FATTR_MTIME)
900 && timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) {
901 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
905 if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
906 && (fattr->valid & NFS_ATTR_FATTR_SIZE)
907 && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
909 i_size_write(inode, nfs_size_to_loff_t(fattr->size));
915 * @fattr - updated attributes
918 * so that fattr carries weak cache consistency data, then it may
921 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
929 if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
931 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
934 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
935 nfsi->change_attr != fattr->change_attr)
939 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&inode->i_mtime, &fattr->mtime))
942 if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
944 new_isize = nfs_size_to_loff_t(fattr->size);
950 if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
952 if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && inode->i_uid != fattr->uid)
954 if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && inode->i_gid != fattr->gid)
958 if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
961 if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec_equal(&inode->i_atime, &fattr->atime))
967 nfsi->read_cache_jiffies = fattr->time_start;
971 static int nfs_ctime_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
973 if (!(fattr->valid & NFS_ATTR_FATTR_CTIME))
975 return timespec_compare(&fattr->ctime, &inode->i_ctime) > 0;
978 static int nfs_size_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
980 if (!(fattr->valid & NFS_ATTR_FATTR_SIZE))
982 return nfs_size_to_loff_t(fattr->size) > i_size_read(inode);
997 void nfs_fattr_init(struct nfs_fattr *fattr)
999 fattr->valid = 0;
1000 fattr->time_start = jiffies;
1001 fattr->gencount = nfs_inc_attr_generation_counter();
1006 struct nfs_fattr *fattr;
1008 fattr = kmalloc(sizeof(*fattr), GFP_NOFS);
1009 if (fattr != NULL)
1010 nfs_fattr_init(fattr);
1011 return fattr;
1027 * @fattr - attributes
1033 * that the attributes in fattr are newer, however it also attempt to
1039 * The function returns 'true' if it thinks the attributes in 'fattr' are
1043 static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
1047 return ((long)fattr->gencount - (long)nfsi->attr_gencount) > 0 ||
1048 nfs_ctime_need_update(inode, fattr) ||
1049 nfs_size_need_update(inode, fattr) ||
1053 static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1055 if (nfs_inode_attrs_need_update(inode, fattr))
1056 return nfs_update_inode(inode, fattr);
1057 return nfs_check_inode_attributes(inode, fattr);
1063 * @fattr - updated attributes
1070 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1074 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1077 status = nfs_refresh_inode_locked(inode, fattr);
1083 static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1090 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1092 return nfs_refresh_inode_locked(inode, fattr);
1098 * @fattr - updated attributes
1109 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1114 status = nfs_post_op_update_inode_locked(inode, fattr);
1122 * @fattr - updated attributes
1130 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
1136 if ((fattr->valid & NFS_ATTR_FATTR) == 0 ||
1137 !nfs_inode_attrs_need_update(inode, fattr)) {
1138 fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1144 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1145 (fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1146 fattr->pre_change_attr = NFS_I(inode)->change_attr;
1147 fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1149 if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1150 (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
1151 memcpy(&fattr->pre_ctime, &inode->i_ctime, sizeof(fattr->pre_ctime));
1152 fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
1154 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
1155 (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
1156 memcpy(&fattr->pre_mtime, &inode->i_mtime, sizeof(fattr->pre_mtime));
1157 fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
1159 if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
1160 (fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
1161 fattr->pre_size = i_size_read(inode);
1162 fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
1165 status = nfs_post_op_update_inode_locked(inode, fattr);
1182 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1193 atomic_read(&inode->i_count), fattr->valid);
1195 if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
1201 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
1206 if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
1207 !nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
1209 server->fsid = fattr->fsid;
1214 nfsi->read_cache_jiffies = fattr->time_start;
1223 nfs_wcc_update_inode(inode, fattr);
1226 if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
1227 if (nfsi->change_attr != fattr->change_attr) {
1233 nfsi->change_attr = fattr->change_attr;
1238 if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
1240 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) {
1246 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
1254 if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
1256 if (!timespec_equal(&inode->i_ctime, &fattr->ctime)) {
1265 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
1274 if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1275 new_isize = nfs_size_to_loff_t(fattr->size);
1293 if (fattr->valid & NFS_ATTR_FATTR_ATIME)
1294 memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
1299 if (fattr->valid & NFS_ATTR_FATTR_MODE) {
1300 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
1302 newmode |= fattr->mode & S_IALLUGO;
1312 if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
1313 if (inode->i_uid != fattr->uid) {
1315 inode->i_uid = fattr->uid;
1323 if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
1324 if (inode->i_gid != fattr->gid) {
1326 inode->i_gid = fattr->gid;
1334 if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
1335 if (inode->i_nlink != fattr->nlink) {
1339 inode->i_nlink = fattr->nlink;
1345 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
1349 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
1351 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
1352 inode->i_blocks = fattr->du.nfs2.blocks;
1382 __func__, inode->i_ino, inode->i_mode, fattr->mode);
1396 (long long)nfsi->fileid, (long long)fattr->fileid);