return err; 
return (err < 0) ? err : i; 
static int sgi_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,		    int num){	struct i2c_algo_sgi_data *adap = i2c_adap->algo_data;	struct i2c_msg *p;	int i, err = 0;	for (i = 0; !err && i < num; i++) {		p = &msgs[i];		err = do_address(adap, p->addr, p->flags & I2C_M_RD);		if (err || !p->len)			continue;		if (p->flags & I2C_M_RD)			err = i2c_read(adap, p->buf, p->len);		else			err = i2c_write(adap, p->buf, p->len);	}	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/a89923fff79f8eeed0ccdf51e13453754e48a71e/i2c-algo-sgi.c/buggy/drivers/i2c/algos/i2c-algo-sgi.c