 if (fc->flags & FUSE_DEFAULT_PERMISSIONS) { err = inode_change_ok(inode, attr); if (err) return err; } 
static int fuse_setattr(struct dentry *entry, struct iattr *attr){	struct inode *inode = entry->d_inode;	struct fuse_conn *fc = get_fuse_conn(inode);	struct fuse_inode *fi = get_fuse_inode(inode);	struct fuse_req *req;	struct fuse_setattr_in inarg;	struct fuse_attr_out outarg;	int err;	int is_truncate = 0;	if (attr->ia_valid & ATTR_SIZE) {		unsigned long limit;		is_truncate = 1;		limit = current->signal->rlim[RLIMIT_FSIZE].rlim_cur;		if (limit != RLIM_INFINITY && attr->ia_size > (loff_t) limit) {			send_sig(SIGXFSZ, current, 0);			return -EFBIG;		}	}	req = fuse_get_request(fc);	if (!req)		return -ERESTARTNOINTR;	memset(&inarg, 0, sizeof(inarg));	inarg.valid = iattr_to_fattr(attr, &inarg.attr);	req->in.h.opcode = FUSE_SETATTR;	req->in.h.nodeid = get_node_id(inode);	req->inode = inode;	req->in.numargs = 1;	req->in.args[0].size = sizeof(inarg);	req->in.args[0].value = &inarg;	req->out.numargs = 1;	req->out.args[0].size = sizeof(outarg);	req->out.args[0].value = &outarg;	request_send(fc, req);	err = req->out.h.error;	fuse_put_request(fc, req);	if (!err) {		if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {			make_bad_inode(inode);			err = -EIO;		} else {			if (is_truncate) {				loff_t origsize = i_size_read(inode);				i_size_write(inode, outarg.attr.size);				if (origsize > outarg.attr.size)					vmtruncate(inode, outarg.attr.size);			}			fuse_change_attributes(inode, &outarg.attr);			fi->i_time = time_to_jiffies(outarg.attr_valid,						     outarg.attr_valid_nsec);		}	} else if (err == -EINTR)		fuse_invalidate_attr(inode);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/1e9a4ed9396e9c31139721b639550ffb1df17065/dir.c/clean/fs/fuse/dir.c