if (!error) { unsigned long dn_mask = setattr_mask(ia_valid); if (dn_mask) dnotify_parent(dentry, dn_mask); } 
if (!error) fsnotify_change(dentry, ia_valid);  
int notify_change(struct dentry * dentry, struct iattr * attr){	struct inode *inode = dentry->d_inode;	mode_t mode;	int error;	struct timespec now;	unsigned int ia_valid = attr->ia_valid;	if (!inode)		BUG();	mode = inode->i_mode;	now = current_fs_time(inode->i_sb);	attr->ia_ctime = now;	if (!(ia_valid & ATTR_ATIME_SET))		attr->ia_atime = now;	if (!(ia_valid & ATTR_MTIME_SET))		attr->ia_mtime = now;	if (ia_valid & ATTR_KILL_SUID) {		attr->ia_valid &= ~ATTR_KILL_SUID;		if (mode & S_ISUID) {			if (!(ia_valid & ATTR_MODE)) {				ia_valid = attr->ia_valid |= ATTR_MODE;				attr->ia_mode = inode->i_mode;			}			attr->ia_mode &= ~S_ISUID;		}	}	if (ia_valid & ATTR_KILL_SGID) {		attr->ia_valid &= ~ ATTR_KILL_SGID;		if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {			if (!(ia_valid & ATTR_MODE)) {				ia_valid = attr->ia_valid |= ATTR_MODE;				attr->ia_mode = inode->i_mode;			}			attr->ia_mode &= ~S_ISGID;		}	}	if (!attr->ia_valid)		return 0;	if (ia_valid & ATTR_SIZE)		down_write(&dentry->d_inode->i_alloc_sem);	if (inode->i_op && inode->i_op->setattr) {		error = security_inode_setattr(dentry, attr);		if (!error)			error = inode->i_op->setattr(dentry, attr);	} else {		error = inode_change_ok(inode, attr);		if (!error)			error = security_inode_setattr(dentry, attr);		if (!error) {			if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||			    (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid))				error = DQUOT_TRANSFER(inode, attr) ? -EDQUOT : 0;			if (!error)				error = inode_setattr(inode, attr);		}	}	if (ia_valid & ATTR_SIZE)		up_write(&dentry->d_inode->i_alloc_sem);	if (!error) {		unsigned long dn_mask = setattr_mask(ia_valid);		if (dn_mask)			dnotify_parent(dentry, dn_mask);	}	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/0eeca28300df110bd6ed54b31193c83b87921443/attr.c/buggy/fs/attr.c