Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 346586
b: refs/heads/master
c: da0507b
h: refs/heads/master
v: v3
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Dec 5, 2012
1 parent cb63295 commit 1184d10
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 464ee9f966404786ba4c6be35dc8362ee8e6ba4e
refs/heads/master: da0507b7c95ccd4d9c86394eef42fe076032af30
18 changes: 18 additions & 0 deletions trunk/fs/nfs/nfs4proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -498,13 +498,30 @@ static void nfs41_set_target_slotid_locked(struct nfs4_slot_table *tbl,
tbl->generation++;
}

static void nfs41_set_server_slotid_locked(struct nfs4_slot_table *tbl,
u32 highest_slotid)
{
unsigned int max_slotid, i;

if (tbl->server_highest_slotid == highest_slotid)
return;
if (tbl->highest_used_slotid > highest_slotid)
return;
max_slotid = min(tbl->max_slots - 1, highest_slotid);
/* Reset the seq_nr for deallocated slots */
for (i = tbl->server_highest_slotid + 1; i <= max_slotid; i++)
tbl->slots[i].seq_nr = 1;
tbl->server_highest_slotid = highest_slotid;
}

static void nfs41_update_target_slotid(struct nfs4_slot_table *tbl,
struct nfs4_slot *slot,
struct nfs4_sequence_res *res)
{
spin_lock(&tbl->slot_tbl_lock);
if (tbl->generation != slot->generation)
goto out;
nfs41_set_server_slotid_locked(tbl, res->sr_highest_slotid);
nfs41_set_target_slotid_locked(tbl, res->sr_target_highest_slotid);
out:
spin_unlock(&tbl->slot_tbl_lock);
Expand Down Expand Up @@ -5718,6 +5735,7 @@ static void nfs4_add_and_init_slots(struct nfs4_slot_table *tbl,
}
tbl->highest_used_slotid = NFS4_NO_SLOT;
tbl->target_highest_slotid = max_slots - 1;
tbl->server_highest_slotid = max_slots - 1;
for (i = 0; i < tbl->max_slots; i++)
tbl->slots[i].seq_nr = ivalue;
spin_unlock(&tbl->slot_tbl_lock);
Expand Down
4 changes: 2 additions & 2 deletions trunk/fs/nfs/nfs4xdr.c
Original file line number Diff line number Diff line change
Expand Up @@ -5550,8 +5550,8 @@ static int decode_sequence(struct xdr_stream *xdr,
dprintk("%s Invalid slot id\n", __func__);
goto out_err;
}
/* highest slot id - currently not processed */
dummy = be32_to_cpup(p++);
/* highest slot id */
res->sr_highest_slotid = be32_to_cpup(p++);
/* target highest slot id */
res->sr_target_highest_slotid = be32_to_cpup(p++);
/* result flags */
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/nfs_fs_sb.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@ struct nfs4_slot_table {
u32 highest_used_slotid; /* sent to server on each SEQ.
* op for dynamic resizing */
u32 target_highest_slotid; /* Server max_slot target */
u32 server_highest_slotid; /* Server highest slotid */
unsigned long generation; /* Generation counter for
target_highest_slotid */
struct completion complete;
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/nfs_xdr.h
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ struct nfs4_sequence_res {
struct nfs4_slot *sr_slot; /* slot used to send request */
int sr_status; /* sequence operation status */
u32 sr_status_flags;
u32 sr_highest_slotid;
u32 sr_target_highest_slotid;
};

Expand Down

0 comments on commit 1184d10

Please sign in to comment.