- fix i_sem/journal inversion in fsfilt_ext3_write_record (2306)
- protect MDS inode fsdata with stronger locking (2313)
- better error messages when a client is rejected during recovery (1505)
+ - avoid cancelling locks which were never granted, after failure (2330)
* miscellania
- allow configurable automake binary, for testing new versions
- small update to the lfs documentation
matched = obd_match(exp, lsm, LDLM_EXTENT, &size_lock,
sizeof(size_lock), LCK_PR, &flags, inode,
&match_lockh);
+ if (matched < 0)
+ RETURN(matched);
/* hey, alright, we hold a size lock that covers the size we
* just found, its not going to change for a while.. */
ll_i2info(inode)->lli_smd, LDLM_EXTENT,
&page_extent, sizeof(page_extent), LCK_PR,
&flags, inode, &match_lockh);
- if (!matched) {
+ if (matched < 0) {
+ LL_CDEBUG_PAGE(page, "lock match failed\n");
+ break;
+ }
+ if (matched == 0) {
LL_CDEBUG_PAGE(page, "didn't match a lock\n");
unlock_page(page);
page_cache_release(page);
matched = obd_match(sbi->ll_osc_exp, ll_i2info(inode)->lli_smd,
LDLM_EXTENT, &page_extent, sizeof(page_extent),
LCK_PR, &flags, inode, &match_lockh);
+ if (matched < 0)
+ GOTO(out, rc = matched);
- if (!matched) {
+ if (matched == 0) {
static unsigned long next_print;
CDEBUG(D_INODE, "didn't match a lock");
if (time_after(jiffies, next_print)) {
if (rc == 0 && (sbi->ll_flags & LL_SBI_READAHEAD))
ll_start_readahead(exp, inode, page->index);
- if (matched)
+ if (matched == 1)
obd_cancel(ll_i2sbi(inode)->ll_osc_exp,
ll_i2info(inode)->lli_smd, LCK_PR, &match_lockh);
out: