Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 8202
b: refs/heads/master
c: 322b329
h: refs/heads/master
v: v3
  • Loading branch information
Eric Van Hensbergen authored and Linus Torvalds committed Sep 9, 2005
1 parent 9aa267d commit b78a5c6
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 4 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: 426cc91aa651b50713d06d45e5c3c3e90cfd40d9
refs/heads/master: 322b329ab787de5f45abca9c9eabfd33bc5927e8
20 changes: 20 additions & 0 deletions trunk/fs/9p/mux.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,26 @@ v9fs_mux_rpc(struct v9fs_session_info *v9ses, struct v9fs_fcall *tcall,
return ret;
}

/**
* v9fs_mux_cancel_requests - cancels all pending requests
*
* @v9ses: session info structure
* @err: error code to return to the requests
*/
void v9fs_mux_cancel_requests(struct v9fs_session_info *v9ses, int err)
{
struct v9fs_rpcreq *rptr;
struct v9fs_rpcreq *rreq;

dprintk(DEBUG_MUX, " %d\n", err);
spin_lock(&v9ses->muxlock);
list_for_each_entry_safe(rreq, rptr, &v9ses->mux_fcalls, next) {
rreq->err = err;
}
spin_unlock(&v9ses->muxlock);
wake_up_all(&v9ses->read_wait);
}

/**
* v9fs_recvproc - kproc to handle demultiplexing responses
* @data: session info structure
Expand Down
1 change: 1 addition & 0 deletions trunk/fs/9p/mux.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@ struct v9fs_rpcreq {
int v9fs_mux_init(struct v9fs_session_info *v9ses, const char *dev_name);
long v9fs_mux_rpc(struct v9fs_session_info *v9ses,
struct v9fs_fcall *tcall, struct v9fs_fcall **rcall);
void v9fs_mux_cancel_requests(struct v9fs_session_info *v9ses, int err);
9 changes: 9 additions & 0 deletions trunk/fs/9p/v9fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,15 @@ void v9fs_session_close(struct v9fs_session_info *v9ses)
putname(v9ses->remotename);
}

/**
* v9fs_session_cancel - mark transport as disconnected
* and cancel all pending requests.
*/
void v9fs_session_cancel(struct v9fs_session_info *v9ses) {
v9ses->transport->status = Disconnected;
v9fs_mux_cancel_requests(v9ses, -EIO);
}

extern int v9fs_error_init(void);

/**
Expand Down
4 changes: 1 addition & 3 deletions trunk/fs/9p/v9fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,7 @@ struct v9fs_session_info *v9fs_inode2v9ses(struct inode *);
void v9fs_session_close(struct v9fs_session_info *v9ses);
int v9fs_get_idpool(struct v9fs_idpool *p);
void v9fs_put_idpool(int id, struct v9fs_idpool *p);
int v9fs_get_option(char *opts, char *name, char *buf, int buflen);
long long v9fs_get_int_option(char *opts, char *name, long long dflt);
int v9fs_parse_tcp_devname(const char *devname, char **addr, char **remotename);
void v9fs_session_cancel(struct v9fs_session_info *v9ses);

#define V9FS_MAGIC 0x01021997

Expand Down
9 changes: 9 additions & 0 deletions trunk/fs/9p/vfs_super.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,10 +257,19 @@ static int v9fs_show_options(struct seq_file *m, struct vfsmount *mnt)
return 0;
}

static void
v9fs_umount_begin(struct super_block *sb)
{
struct v9fs_session_info *v9ses = sb->s_fs_info;

v9fs_session_cancel(v9ses);
}

static struct super_operations v9fs_super_ops = {
.statfs = simple_statfs,
.clear_inode = v9fs_clear_inode,
.show_options = v9fs_show_options,
.umount_begin = v9fs_umount_begin,
};

struct file_system_type v9fs_fs_type = {
Expand Down

0 comments on commit b78a5c6

Please sign in to comment.