atomic_dec(&open_file->wrtPending); 
static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to){	struct address_space *mapping = page->mapping;	loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;	char *write_data;	int rc = -EFAULT;	int bytes_written = 0;	struct cifs_sb_info *cifs_sb;	struct cifsTconInfo *pTcon;	struct inode *inode;	struct cifsFileInfo *open_file;	if (!mapping || !mapping->host)		return -EFAULT;	inode = page->mapping->host;	cifs_sb = CIFS_SB(inode->i_sb);	pTcon = cifs_sb->tcon;	offset += (loff_t)from;	write_data = kmap(page);	write_data += from;	if ((to > PAGE_CACHE_SIZE) || (from > to)) {		kunmap(page);		return -EIO;	}	/* racing with truncate? */	if (offset > mapping->host->i_size) {		kunmap(page);		return 0; /* don't care */	}	/* check to make sure that we are not extending the file */	if (mapping->host->i_size - offset < (loff_t)to)		to = (unsigned)(mapping->host->i_size - offset); 	open_file = find_writable_file(CIFS_I(mapping->host));	if (open_file) {		bytes_written = cifs_write(open_file->pfile, write_data,					   to-from, &offset);		/* Does mm or vfs already set times? */		inode->i_atime = inode->i_mtime = current_fs_time(inode->i_sb);		if ((bytes_written > 0) && (offset)) {			rc = 0;		} else if (bytes_written < 0) {			if (rc != -EBADF)				rc = bytes_written;		}	} else {		cFYI(1, ("No writeable filehandles for inode"));		rc = -EIO;	}	kunmap(page);	return rc;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/23e7dd7d95f6fdc167a6d6ddea79ced0af33bbff/file.c/buggy/fs/cifs/file.c