From: David Howells <dhowells@redhat.com>
To: Rohith Surabattula <rohiths.msft@gmail.com>
Cc: dhowells@redhat.com, Steve French <smfrench@gmail.com>,
Shyam Prasad N <nspmangalore@gmail.com>,
ronnie sahlberg <ronniesahlberg@gmail.com>,
Paulo Alcantara <pc@cjr.nz>,
linux-cifs <linux-cifs@vger.kernel.org>
Subject: Re: [PATCH] [CIFS]: Add clamp_length support
Date: Mon, 28 Feb 2022 14:39:10 +0000 [thread overview]
Message-ID: <2500957.1646059150@warthog.procyon.org.uk> (raw)
In-Reply-To: <CACdtm0ZteTve1EbSgDX_jochhHT7Ufm3gJg7j28BOjmRSg8dTQ@mail.gmail.com>
Rohith Surabattula <rohiths.msft@gmail.com> wrote:
> > Rohith Surabattula <rohiths.msft@gmail.com> wrote:
> >
> > > + credits = kmalloc(sizeof(struct cifs_credits), GFP_KERNEL);
> > > ...
> > > + subreq->subreq_priv = credits;
> >
> > Would it be better if I made it so that the netfs could specify the size of
> > the netfs_read_subrequest struct to be allocated, thereby allowing it to tag
> > extra data on the end?
>
> Do you mean the clamp handler in netfs should return the size of data
> to be allocated instead of allocating itself ?
No, I was thinking of putting a size_t in struct netfs_request_ops that
indicates how big the subrequest struct should be:
struct netfs_request_ops {
...
size_t subrequest_size;
};
and then:
struct netfs_read_subrequest *netfs_alloc_subrequest(
struct netfs_read_request *rreq)
{
struct netfs_read_subrequest *subreq;
subreq = kzalloc(rreq->ops->subrequest_size, GFP_KERNEL);
if (subreq) {
INIT_LIST_HEAD(&subreq->rreq_link);
refcount_set(&subreq->usage, 2);
subreq->rreq = rreq;
netfs_get_read_request(rreq);
netfs_stat(&netfs_n_rh_sreq);
}
return subreq;
}
This would allow you to do, for instance:
struct cifs_subrequest {
struct netfs_read_subrequest subreq;
struct cifs_credits credits;
};
then:
const struct netfs_request_ops cifs_req_ops = {
.subrequest_size = sizeof(struct cifs_subrequest),
.init_rreq = cifs_init_rreq,
.expand_readahead = cifs_expand_readahead,
.clamp_length = cifs_clamp_length,
.issue_op = cifs_req_issue_op,
.done = cifs_rreq_done,
.cleanup = cifs_req_cleanup,
};
and then:
static bool cifs_clamp_length(struct netfs_read_subrequest *subreq)
{
struct cifs_subrequest *cifs_subreq =
container_of(subreq, struct cifs_subrequest, subreq);
struct cifs_sb_info *cifs_sb = CIFS_SB(subreq->rreq->inode->i_sb);
struct TCP_Server_Info *server;
struct cifsFileInfo *open_file = subreq->rreq->netfs_priv;
struct cifs_credits *credits = &cifs_subreq->credits;
unsigned int rsize;
int rc;
server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
&rsize, credits);
if (rc)
return false;
subreq->len = rsize;
return true;
}
David
next prev parent reply other threads:[~2022-02-28 14:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-08 5:53 [PATCH] [CIFS]: Add clamp_length support Rohith Surabattula
2022-02-16 21:25 ` David Howells
2022-02-28 14:23 ` Rohith Surabattula
2022-02-28 14:39 ` David Howells [this message]
2022-03-02 11:05 ` Rohith Surabattula
2022-03-02 15:16 ` David Howells
2022-03-02 15:26 ` Rohith Surabattula
2022-03-02 15:47 ` David Howells
2022-03-09 12:58 ` David Howells
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2500957.1646059150@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=linux-cifs@vger.kernel.org \
--cc=nspmangalore@gmail.com \
--cc=pc@cjr.nz \
--cc=rohiths.msft@gmail.com \
--cc=ronniesahlberg@gmail.com \
--cc=smfrench@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.