On Thu, 17 May 2012 19:43:44 +0400 Pavel Shilovsky <piastry@xxxxxxxxxxx> wrote: > Signed-off-by: Pavel Shilovsky <piastry@xxxxxxxxxxx> > --- > fs/cifs/cifsglob.h | 25 +++++++++++++++---------- > fs/cifs/cifsproto.h | 3 --- > fs/cifs/misc.c | 19 ------------------- > fs/cifs/smb1ops.c | 28 ++++++++++++++++++++++++++++ > fs/cifs/transport.c | 3 ++- > 5 files changed, 45 insertions(+), 33 deletions(-) > > diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h > index 7b3e8fe..d17db87 100644 > --- a/fs/cifs/cifsglob.h > +++ b/fs/cifs/cifsglob.h > @@ -167,6 +167,9 @@ struct smb_version_operations { > struct mid_q_entry **); > int (*check_receive)(struct mid_q_entry *, struct TCP_Server_Info *, > bool); > + void (*add_credits)(struct TCP_Server_Info *, const unsigned int); > + void (*set_credits)(struct TCP_Server_Info *, const int); > + int * (*get_credits_field)(struct TCP_Server_Info *); > unsigned int (*read_data_offset)(char *); > unsigned int (*read_data_length)(char *); > int (*map_error)(char *, bool); > @@ -367,16 +370,6 @@ in_flight(struct TCP_Server_Info *server) > return num; > } > > -static inline int* > -get_credits_field(struct TCP_Server_Info *server) > -{ > - /* > - * This will change to switch statement when we reserve slots for echos > - * and oplock breaks. > - */ > - return &server->credits; > -} > - > static inline bool > has_credits(struct TCP_Server_Info *server, int *credits) > { > @@ -387,6 +380,18 @@ has_credits(struct TCP_Server_Info *server, int *credits) > return num > 0; > } > > +static inline void > +cifs_add_credits(struct TCP_Server_Info *server, const unsigned int add) > +{ > + server->ops->add_credits(server, add); > +} > + > +static inline void > +cifs_set_credits(struct TCP_Server_Info *server, const int val) > +{ > + server->ops->set_credits(server, val); > +} > + nit: maybe call these "add_credits and set_credits" and get rid of the leading '_' on the SMB1 functions below? > /* > * Macros to allow the TCP_Server_Info->net field and related code to drop out > * when CONFIG_NET_NS isn't set. > diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h > index 57af642..5ec21ec 100644 > --- a/fs/cifs/cifsproto.h > +++ b/fs/cifs/cifsproto.h > @@ -90,9 +90,6 @@ extern int SendReceiveBlockingLock(const unsigned int xid, > struct smb_hdr *in_buf , > struct smb_hdr *out_buf, > int *bytes_returned); > -extern void cifs_add_credits(struct TCP_Server_Info *server, > - const unsigned int add); > -extern void cifs_set_credits(struct TCP_Server_Info *server, const int val); > extern int checkSMB(char *buf, unsigned int length); > extern bool is_valid_oplock_break(char *, struct TCP_Server_Info *); > extern bool backup_cred(struct cifs_sb_info *); > diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c > index d2bb1e7..e2552d2 100644 > --- a/fs/cifs/misc.c > +++ b/fs/cifs/misc.c > @@ -653,22 +653,3 @@ backup_cred(struct cifs_sb_info *cifs_sb) > > return false; > } > - > -void > -cifs_add_credits(struct TCP_Server_Info *server, const unsigned int add) > -{ > - spin_lock(&server->req_lock); > - server->credits += add; > - server->in_flight--; > - spin_unlock(&server->req_lock); > - wake_up(&server->request_q); > -} > - > -void > -cifs_set_credits(struct TCP_Server_Info *server, const int val) > -{ > - spin_lock(&server->req_lock); > - server->credits = val; > - server->oplocks = val > 1 ? enable_oplocks : false; > - spin_unlock(&server->req_lock); > -} > diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c > index 8a0b35b..17a69ed 100644 > --- a/fs/cifs/smb1ops.c > +++ b/fs/cifs/smb1ops.c > @@ -102,11 +102,39 @@ cifs_find_mid(struct TCP_Server_Info *server, char *buffer) > return NULL; > } > > +static void > +_cifs_add_credits(struct TCP_Server_Info *server, const unsigned int add) > +{ > + spin_lock(&server->req_lock); > + server->credits += add; > + server->in_flight--; > + spin_unlock(&server->req_lock); > + wake_up(&server->request_q); > +} > + > +static void > +_cifs_set_credits(struct TCP_Server_Info *server, const int val) > +{ > + spin_lock(&server->req_lock); > + server->credits = val; > + server->oplocks = val > 1 ? enable_oplocks : false; > + spin_unlock(&server->req_lock); > +} > + > +static int * > +cifs_get_credits_field(struct TCP_Server_Info *server) > +{ > + return &server->credits; > +} > + > struct smb_version_operations smb1_operations = { > .send_cancel = send_nt_cancel, > .compare_fids = cifs_compare_fids, > .setup_request = cifs_setup_request, > .check_receive = cifs_check_receive, > + .add_credits = _cifs_add_credits, > + .set_credits = _cifs_set_credits, > + .get_credits_field = cifs_get_credits_field, > .read_data_offset = cifs_read_data_offset, > .read_data_length = cifs_read_data_length, > .map_error = map_smb_to_linux_error, > diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c > index 87bd998..64c35fd 100644 > --- a/fs/cifs/transport.c > +++ b/fs/cifs/transport.c > @@ -304,7 +304,8 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int optype, > static int > wait_for_free_request(struct TCP_Server_Info *server, const int optype) > { > - return wait_for_free_credits(server, optype, get_credits_field(server)); > + return wait_for_free_credits(server, optype, > + server->ops->get_credits_field(server)); > } > > static int allocate_mid(struct cifs_ses *ses, struct smb_hdr *in_buf, Other than the minor nit above, this looks fine: Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html