From paf at cray.com Wed May 6 16:38:42 2015 From: paf at cray.com (Patrick Farrell) Date: Wed, 6 May 2015 16:38:42 +0000 Subject: [lustre-devel] Lock ahead: ldlm_completion_ast questions Message-ID: Greetings, Trying the new list here, in the interest of having a bit more conversation and design in the open. I've been continuing work on lock ahead, and I've run in to a pair of related problems I wanted to ask about. I'll do them in two separate mails. Basically, these center around ldlm_completion_ast/ldlm_completion_ast_async and the LVB ready flag. Here's the first one. Because the reply to an async request is handled by the PTLRPCD thread, async lock requests cannot use ldlm_completion_ast, because (as Oleg so memorably told us in Denver) we can't sleep in ptlrpcd threads. So I use ldlm_completion_ast_async for the lock ahead locks. The problem is, now, all of the users who attempt to use the lock will use that AST. That's a problem, because ldlm_completion_ast is where a thread that wants to use a lock on the waiting queue sleeps until that lock is granted. So if a lock ahead lock is on the waiting queue and another thread finds it in ldlm_lock_match, that thread calls ldlm_completion_ast_async, and does not sleep(!) waiting for the lock to be granted. My first thought for how to solve this is having a separate l_completion_ast_async pointer. The only caller that needs (and should get) the async behavior is ptlrpcd via osc_enqueue_interpret, so it can call that instead of l_completion_ast. ptlrpcd uses osc_enqueue_interpret, which calls ldlm_cli_enqueue_fini, which then calls l_completion_ast. I think it would be enough to add an "async" argument to ldlm_cli_enqueue_fini, and have osc_enqueue_interpret use that to make ldlm_cli_enqueue_fini call l_completion_ast_async instead. This would allow other users to wait correctly for lock ahead locks to be granted. Code implementing that will be going up shortly. (I've tested it briefly and it seems to work.) Does that seem reasonable? Is there another way it would be better to approach that one? Other question (which is a bit nastier) coming shortly. Thanks in advance, - Patrick Farrell -------------- next part -------------- An HTML attachment was scrubbed... URL: From jinshan.xiong at intel.com Wed May 6 18:42:22 2015 From: jinshan.xiong at intel.com (Xiong, Jinshan) Date: Wed, 6 May 2015 18:42:22 +0000 Subject: [lustre-devel] Lock ahead: ldlm_completion_ast questions In-Reply-To: References: Message-ID: On May 6, 2015, at 9:38 AM, Patrick Farrell > wrote: Greetings, Trying the new list here, in the interest of having a bit more conversation and design in the open. I've been continuing work on lock ahead, and I've run in to a pair of related problems I wanted to ask about. I'll do them in two separate mails. Basically, these center around ldlm_completion_ast/ldlm_completion_ast_async and the LVB ready flag. Here's the first one. Because the reply to an async request is handled by the PTLRPCD thread, async lock requests cannot use ldlm_completion_ast, because (as Oleg so memorably told us in Denver) we can't sleep in ptlrpcd threads. So I use ldlm_completion_ast_async for the lock ahead locks. The problem is, now, all of the users who attempt to use the lock will use that AST. That's a problem, because ldlm_completion_ast is where a thread that wants to use a lock on the waiting queue sleeps until that lock is granted. So if a lock ahead lock is on the waiting queue and another thread finds it in ldlm_lock_match, that thread calls ldlm_completion_ast_async, and does not sleep(!) waiting for the lock to be granted. My first thought for how to solve this is having a separate l_completion_ast_async pointer. The only caller that needs (and should get) the async behavior is ptlrpcd via osc_enqueue_interpret, so it can call that instead of l_completion_ast. ptlrpcd uses osc_enqueue_interpret, which calls ldlm_cli_enqueue_fini, which then calls l_completion_ast. I think it would be enough to add an "async" argument to ldlm_cli_enqueue_fini, and have osc_enqueue_interpret use that to make ldlm_cli_enqueue_fini call l_completion_ast_async instead. This would allow other users to wait correctly for lock ahead locks to be granted. Code implementing that will be going up shortly. (I've tested it briefly and it seems to work.) Does that seem reasonable? Is there another way it would be better to approach that one? I think this problem can be solved easily by not allowing lock-ahead locks to revoke conflicting locks at enqueue time. Therefore, the result of enqueueing a lock-ahead lock is either granted or aborted due to conflicting when osc_enqueue_interpret() is called, the locks’ state is determined so the regular ldlm_completion_ast() in ptlrpcd thread context won’t be blocked. Jinshan Other question (which is a bit nastier) coming shortly. Thanks in advance, - Patrick Farrell From paf at cray.com Wed May 6 18:55:54 2015 From: paf at cray.com (Patrick Farrell) Date: Wed, 6 May 2015 18:55:54 +0000 Subject: [lustre-devel] Lock ahead: ldlm_completion_ast questions In-Reply-To: References: , Message-ID: Jinshan, I discussed that aspect with our MPIIO library developers, and they felt it was important to have the option to make the lock requests blocking (IE, have them revoke existing locks on conflict). They pointed out that the library has no way to guarantee there aren't existing locks on the file, and in fact, a whole file read lock or something similar will be very common since the file may be created (and accessed) in any way number of ways before the library gets to it. So if lock ahead locks don't have the option of being blocking lock requests, they could only be used on newly created files. (I'm currently controlling blocking/non-blocking with a flag passed in from userspace.) - Patrick ________________________________________ From: Xiong, Jinshan [jinshan.xiong at intel.com] Sent: Wednesday, May 06, 2015 1:42 PM To: Patrick Farrell Cc: lustre-devel at lists.lustre.org; Dilger, Andreas Subject: Re: Lock ahead: ldlm_completion_ast questions On May 6, 2015, at 9:38 AM, Patrick Farrell > wrote: Greetings, Trying the new list here, in the interest of having a bit more conversation and design in the open. I've been continuing work on lock ahead, and I've run in to a pair of related problems I wanted to ask about. I'll do them in two separate mails. Basically, these center around ldlm_completion_ast/ldlm_completion_ast_async and the LVB ready flag. Here's the first one. Because the reply to an async request is handled by the PTLRPCD thread, async lock requests cannot use ldlm_completion_ast, because (as Oleg so memorably told us in Denver) we can't sleep in ptlrpcd threads. So I use ldlm_completion_ast_async for the lock ahead locks. The problem is, now, all of the users who attempt to use the lock will use that AST. That's a problem, because ldlm_completion_ast is where a thread that wants to use a lock on the waiting queue sleeps until that lock is granted. So if a lock ahead lock is on the waiting queue and another thread finds it in ldlm_lock_match, that thread calls ldlm_completion_ast_async, and does not sleep(!) waiting for the lock to be granted. My first thought for how to solve this is having a separate l_completion_ast_async pointer. The only caller that needs (and should get) the async behavior is ptlrpcd via osc_enqueue_interpret, so it can call that instead of l_completion_ast. ptlrpcd uses osc_enqueue_interpret, which calls ldlm_cli_enqueue_fini, which then calls l_completion_ast. I think it would be enough to add an "async" argument to ldlm_cli_enqueue_fini, and have osc_enqueue_interpret use that to make ldlm_cli_enqueue_fini call l_completion_ast_async instead. This would allow other users to wait correctly for lock ahead locks to be granted. Code implementing that will be going up shortly. (I've tested it briefly and it seems to work.) Does that seem reasonable? Is there another way it would be better to approach that one? I think this problem can be solved easily by not allowing lock-ahead locks to revoke conflicting locks at enqueue time. Therefore, the result of enqueueing a lock-ahead lock is either granted or aborted due to conflicting when osc_enqueue_interpret() is called, the locks’ state is determined so the regular ldlm_completion_ast() in ptlrpcd thread context won’t be blocked. Jinshan Other question (which is a bit nastier) coming shortly. Thanks in advance, - Patrick Farrell From paf at cray.com Wed May 6 19:04:39 2015 From: paf at cray.com (Patrick Farrell) Date: Wed, 6 May 2015 19:04:39 +0000 Subject: [lustre-devel] Lock ahead: LDLM_FL_LVB_READY & osc_lock_lvb_update questions Message-ID: Following on from my previous message. In ldlm_lock_match, interestingly, the other threads do not (initially) wait for the matched lock to be granted; instead, they first wait for the LVB_READY flag to be set. This flag is set only after a lock is granted, so it's used as a proxy for the granted/waiting state of a lock. However, getting this set correctly for async lock requests is a problem. LDLM_FL_LVB_READY is only set (for extent locks) by osc_lock_lvb_update, which is called from osc_lock_upcall/osc_lock_upcall_speculative (either directly or via osc_lock_granted, but still from the upcall). The problem that's happening is this: The reply is received, putting the lock on the waiting list. The lvb is filled in ldlm_cli_enqueue_fini, but when the upcall is called, the lock is not granted, so osc_lock_lvb_update is not called, and LDLM_FL_LVB_READY is not set. This is a normal sequence of events for both synchronous and async lock requests. However, for synchronous lock requests, the original enqueueing thread sleeps (ldlm_cli_enqueue_fini-->l_completion_ast) waiting for the lock to be granted. Then, once the lock is granted by a CP_CALLBACK (which fills the LVB again with updated data), the original enqueueing thread wakes up and returns up to osc_enqueue_base, which calls osc_enqueue_fini, which calls the upcall. Now the lock is granted, so osc_lock_lvb_update is called & LDLM_FL_LVB_READY is set. For asynchronous lock requests, no one is waiting. So ldlm_handle_cp_callback fills the LVB, then grants the lock, then is done. And so, for async locks, osc_lock_lvb_update is not called, and LDLM_FL_LVB_READY is not set. To recap the sequence of events required: 1. Async lock request sent 2. Reply is received, lock is not granted (upcall is called, but osc_lock_lvb_update cannot happen because the lock is not granted) [Normally, at this point, a synchronous lock request would sleep waiting for the lock to be granted] 3. CP_CALLBACK is received, granting the lock. LVB is is filled. --> osc_lock_lvb_update is never called & LDLM_FL_LVB_READY is never set. I thought it might be possible to call osc_lock_lvb_update in the upcall even when the lock is not granted, but the LVB is updated on a CP_CALLBACK, so we'd fail to update with that newer information. Presumably that's not OK. (also, ldlm_lock_match checks LVB_READY before checking if the lock is granted, so that would have to change too.. But that's fairly simple.) I've been struggling to come up with a solution to this one. Any thoughts? The one thought I have is calling osc_lock_lvb_update in the CP callback handler, but that feels like a layering violation. We'd also need some method to ensure we didn't call osc_lock_lvb_update more than once, but that could probably be done by checking the LDLM_FL_LVB_READY flag...? - Patrick -------------- next part -------------- An HTML attachment was scrubbed... URL: From jinshan.xiong at intel.com Wed May 6 20:04:11 2015 From: jinshan.xiong at intel.com (Xiong, Jinshan) Date: Wed, 6 May 2015 20:04:11 +0000 Subject: [lustre-devel] Lock ahead: ldlm_completion_ast questions In-Reply-To: References: Message-ID: > On May 6, 2015, at 11:55 AM, Patrick Farrell wrote: > > Jinshan, > > I discussed that aspect with our MPIIO library developers, and they felt it was important to have the option to make the lock requests blocking (IE, have them revoke existing locks on conflict). They pointed out that the library has no way to guarantee there aren't existing locks on the file, and in fact, a whole file read lock or something similar will be very common since the file may be created (and accessed) in any way number of ways before the library gets to it. Patrick, Actually the whole file read lock should have been revoked by the first few write locks(not lock-ahead locks) so that it should be fine. Lock-ahead locks should be best-effort basis and shouldn’t interfere with normal process. Anyway, if you really like to go for that way, you’re going to write a customized completion_ast() for lock-ahead locks. Three cases will be handled in this customized completion_ast(): 1. lock matching - sleep for lock to be available; 2. called by os_enqueue_interpret() - invoke ldlm_reprocess_all() and returns; and if lock has already granted, then continue to do case 3; 3. lock granted - grant lock and wake up processes. Case 2 and 3 may happen simultaneously. Jinshan > > So if lock ahead locks don't have the option of being blocking lock requests, they could only be used on newly created files. (I'm currently controlling blocking/non-blocking with a flag passed in from userspace.) > > - Patrick > ________________________________________ > From: Xiong, Jinshan [jinshan.xiong at intel.com] > Sent: Wednesday, May 06, 2015 1:42 PM > To: Patrick Farrell > Cc: lustre-devel at lists.lustre.org; Dilger, Andreas > Subject: Re: Lock ahead: ldlm_completion_ast questions > > On May 6, 2015, at 9:38 AM, Patrick Farrell > wrote: > > Greetings, > > Trying the new list here, in the interest of having a bit more conversation and > design in the open. > > I've been continuing work on lock ahead, and I've run in to a pair of related > problems I wanted to ask about. I'll do them in two separate mails. > > Basically, these center around ldlm_completion_ast/ldlm_completion_ast_async > and the LVB ready flag. > > Here's the first one. > > Because the reply to an async request is handled by the PTLRPCD thread, > async lock requests cannot use ldlm_completion_ast, because > (as Oleg so memorably told us in Denver) we can't sleep in ptlrpcd threads. > > So I use ldlm_completion_ast_async for the lock ahead locks. > The problem is, now, all of the users who attempt to use the lock will use that AST. > > That's a problem, because ldlm_completion_ast is where a thread that wants to > use a lock on the waiting queue sleeps until that lock is granted. > So if a lock ahead lock is on the waiting queue and another thread finds it in > ldlm_lock_match, that thread calls ldlm_completion_ast_async, and does not sleep(!) > waiting for the lock to be granted. > > My first thought for how to solve this is having a separate l_completion_ast_async > pointer. The only caller that needs (and should get) the async behavior is ptlrpcd > via osc_enqueue_interpret, so it can call that instead of l_completion_ast. > > ptlrpcd uses osc_enqueue_interpret, which calls ldlm_cli_enqueue_fini, which then calls > l_completion_ast. I think it would be enough to add an "async" argument to > ldlm_cli_enqueue_fini, and have osc_enqueue_interpret use that to make ldlm_cli_enqueue_fini > call l_completion_ast_async instead. > > This would allow other users to wait correctly for lock ahead locks to be granted. > > Code implementing that will be going up shortly. (I've tested it briefly and it seems to > work.) > > Does that seem reasonable? Is there another way it would be better to approach that one? > > I think this problem can be solved easily by not allowing lock-ahead locks to revoke conflicting locks at enqueue time. Therefore, the result of enqueueing a lock-ahead lock is either granted or aborted due to conflicting when osc_enqueue_interpret() is called, the locks’ state is determined so the regular ldlm_completion_ast() in ptlrpcd thread context won’t be blocked. > > Jinshan > > > Other question (which is a bit nastier) coming shortly. > > Thanks in advance, > - Patrick Farrell > > _______________________________________________ > lustre-devel mailing list > lustre-devel at lists.lustre.org > http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org From paf at cray.com Wed May 6 20:09:13 2015 From: paf at cray.com (Patrick Farrell) Date: Wed, 6 May 2015 20:09:13 +0000 Subject: [lustre-devel] Lock ahead: ldlm_completion_ast questions In-Reply-To: References: , Message-ID: OK - I believe I will need such an AST, then. The problem is the first few write locks will be expanded (and passed back and forth between clients), so while the read lock will be cancelled, the lock ahead locks will most likely never get a chance to actually be granted on the file. I'll work on writing that AST. Thanks for your reply. (I will probably re-use the name of ldm_completion_ast_async, since that name is perfect and it's no longer used after the CLIO simplification changes.) - Patrick ________________________________________ From: Xiong, Jinshan [jinshan.xiong at intel.com] Sent: Wednesday, May 06, 2015 3:04 PM To: Patrick Farrell Cc: lustre-devel at lists.lustre.org Subject: Re: [lustre-devel] Lock ahead: ldlm_completion_ast questions > On May 6, 2015, at 11:55 AM, Patrick Farrell wrote: > > Jinshan, > > I discussed that aspect with our MPIIO library developers, and they felt it was important to have the option to make the lock requests blocking (IE, have them revoke existing locks on conflict). They pointed out that the library has no way to guarantee there aren't existing locks on the file, and in fact, a whole file read lock or something similar will be very common since the file may be created (and accessed) in any way number of ways before the library gets to it. Patrick, Actually the whole file read lock should have been revoked by the first few write locks(not lock-ahead locks) so that it should be fine. Lock-ahead locks should be best-effort basis and shouldn’t interfere with normal process. Anyway, if you really like to go for that way, you’re going to write a customized completion_ast() for lock-ahead locks. Three cases will be handled in this customized completion_ast(): 1. lock matching - sleep for lock to be available; 2. called by os_enqueue_interpret() - invoke ldlm_reprocess_all() and returns; and if lock has already granted, then continue to do case 3; 3. lock granted - grant lock and wake up processes. Case 2 and 3 may happen simultaneously. Jinshan > > So if lock ahead locks don't have the option of being blocking lock requests, they could only be used on newly created files. (I'm currently controlling blocking/non-blocking with a flag passed in from userspace.) > > - Patrick > ________________________________________ > From: Xiong, Jinshan [jinshan.xiong at intel.com] > Sent: Wednesday, May 06, 2015 1:42 PM > To: Patrick Farrell > Cc: lustre-devel at lists.lustre.org; Dilger, Andreas > Subject: Re: Lock ahead: ldlm_completion_ast questions > > On May 6, 2015, at 9:38 AM, Patrick Farrell > wrote: > > Greetings, > > Trying the new list here, in the interest of having a bit more conversation and > design in the open. > > I've been continuing work on lock ahead, and I've run in to a pair of related > problems I wanted to ask about. I'll do them in two separate mails. > > Basically, these center around ldlm_completion_ast/ldlm_completion_ast_async > and the LVB ready flag. > > Here's the first one. > > Because the reply to an async request is handled by the PTLRPCD thread, > async lock requests cannot use ldlm_completion_ast, because > (as Oleg so memorably told us in Denver) we can't sleep in ptlrpcd threads. > > So I use ldlm_completion_ast_async for the lock ahead locks. > The problem is, now, all of the users who attempt to use the lock will use that AST. > > That's a problem, because ldlm_completion_ast is where a thread that wants to > use a lock on the waiting queue sleeps until that lock is granted. > So if a lock ahead lock is on the waiting queue and another thread finds it in > ldlm_lock_match, that thread calls ldlm_completion_ast_async, and does not sleep(!) > waiting for the lock to be granted. > > My first thought for how to solve this is having a separate l_completion_ast_async > pointer. The only caller that needs (and should get) the async behavior is ptlrpcd > via osc_enqueue_interpret, so it can call that instead of l_completion_ast. > > ptlrpcd uses osc_enqueue_interpret, which calls ldlm_cli_enqueue_fini, which then calls > l_completion_ast. I think it would be enough to add an "async" argument to > ldlm_cli_enqueue_fini, and have osc_enqueue_interpret use that to make ldlm_cli_enqueue_fini > call l_completion_ast_async instead. > > This would allow other users to wait correctly for lock ahead locks to be granted. > > Code implementing that will be going up shortly. (I've tested it briefly and it seems to > work.) > > Does that seem reasonable? Is there another way it would be better to approach that one? > > I think this problem can be solved easily by not allowing lock-ahead locks to revoke conflicting locks at enqueue time. Therefore, the result of enqueueing a lock-ahead lock is either granted or aborted due to conflicting when osc_enqueue_interpret() is called, the locks’ state is determined so the regular ldlm_completion_ast() in ptlrpcd thread context won’t be blocked. > > Jinshan > > > Other question (which is a bit nastier) coming shortly. > > Thanks in advance, > - Patrick Farrell > > _______________________________________________ > lustre-devel mailing list > lustre-devel at lists.lustre.org > http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org From nathan.rutman at seagate.com Tue May 12 18:27:42 2015 From: nathan.rutman at seagate.com (Nathan Rutman) Date: Tue, 12 May 2015 11:27:42 -0700 Subject: [lustre-devel] Changelogs and RH Message-ID: Someone sent me a link to this: http://arxiv.org/pdf/1505.02656v1.pdf Very cool. We'll need to start using that. This reminded me to send my changelog/robinhood/HSM concerns that I brought up at LUG to you guys for your thoughts. 1. What should happen when the changelog on an MDS fills up? Maybe LCAP helps with the processing rate, but fundamentally the issue might still happen if nobody consumes due to various software or comms errors. We should either stop recording records and risk losing change tracking, or stop MDS processing. (I believe at the moment this will just crash the MDS.) We probably need a high water mark. 2. There should be some kind of rate limiting for HSM requests (RH to MDS), so that the number of HSM requests queued up in the coordinator doesn't grow without bound. Probably we need a -EAGAIN return code to RH at some point. 3. It feels like there needs to be some feedback from the backend HSM storage to RH, in particular to pass back a "backend full" message. We can presumably pass a backend ENOSPC from the copytool back to the Coordinator, but how can that message get back to Robinhood? I guess coordinator could start returning ENOSPC for subsequent archive requests from RH, but then we have to clear that response if the backend condition clears. *--* *Nathan Rutman · Principal Systems ArchitectSeagate Technology** · *+1 503 877-9507* · *GMT-8 -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulka.vaze at clogeny.com Wed May 13 04:33:46 2015 From: ulka.vaze at clogeny.com (Ulka Vaze) Date: Wed, 13 May 2015 10:03:46 +0530 Subject: [lustre-devel] Changelogs and RH Message-ID: Hello Nathan , I was just going through the questions and i was wondering Is it possible to have SNMP trap like mechanism in MDS ? Every policy engine has to register for the traps or events from MDS. Traps can be change log full , or disk full etc. So when MDS reaches high water mark it will send trap to RH then RH should buffer requests till it gets next trap. But i am not aware of architectural complexity or amount of change needed etc. I am new to lustre. So sorry if i have suggested something which might have already discussed or stupid in this context. So this is just a thought and thought of sharing to have your view. On Wed, May 13, 2015 at 1:34 AM, wrote: > Send lustre-devel mailing list submissions to > lustre-devel at lists.lustre.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org > or, via email, send a message with subject or body 'help' to > lustre-devel-request at lists.lustre.org > > You can reach the person managing the list at > lustre-devel-owner at lists.lustre.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of lustre-devel digest..." > > > Today's Topics: > > 1. Changelogs and RH (Nathan Rutman) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Tue, 12 May 2015 11:27:42 -0700 > From: Nathan Rutman > To: henri.doreau at cea.fr, Thomas Leibovici > Cc: "lustre-devel at lists.lustre.org" , > St?phane Thiell > Subject: [lustre-devel] Changelogs and RH > Message-ID: > MdgcH6_3Y0RopcL_YaX86iNrVjOo7Pp3dJD1kJvhVAcJQ at mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > Someone sent me a link to this: > http://arxiv.org/pdf/1505.02656v1.pdf > Very cool. We'll need to start using that. > > This reminded me to send my changelog/robinhood/HSM concerns that I brought > up at LUG to you guys for your thoughts. > > 1. What should happen when the changelog on an MDS fills up? Maybe LCAP > helps with the processing rate, but fundamentally the issue might still > happen if nobody consumes due to various software or comms errors. We > should either stop recording records and risk losing change tracking, or > stop MDS processing. (I believe at the moment this will just crash the > MDS.) We probably need a high water mark. > > 2. There should be some kind of rate limiting for HSM requests (RH to MDS), > so that the number of HSM requests queued up in the coordinator doesn't > grow without bound. Probably we need a -EAGAIN return code to RH at some > point. > > 3. It feels like there needs to be some feedback from the backend HSM > storage to RH, in particular to pass back a "backend full" message. We can > presumably pass a backend ENOSPC from the copytool back to the Coordinator, > but how can that message get back to Robinhood? I guess coordinator could > start returning ENOSPC for subsequent archive requests from RH, but then we > have to clear that response if the backend condition clears. > > *--* > > *Nathan Rutman ? Principal Systems ArchitectSeagate Technology** ? *+1 503 > 877-9507* ? *GMT-8 > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20150512/66138479/attachment.html > > > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > lustre-devel mailing list > lustre-devel at lists.lustre.org > http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org > > > ------------------------------ > > End of lustre-devel Digest, Vol 100, Issue 5 > ******************************************** > -- Thanks & Regards, *Ulka Vaze* Principle System Software Engineer, ClogenyTechnologies Ulka.vaze at clogeny.com +91-989-032-3754 -------------- next part -------------- An HTML attachment was scrubbed... URL: From henri.doreau at cea.fr Wed May 13 07:54:50 2015 From: henri.doreau at cea.fr (DOREAU Henri) Date: Wed, 13 May 2015 09:54:50 +0200 Subject: [lustre-devel] Changelogs and RH In-Reply-To: References: Message-ID: <5553034A.1060703@cea.fr> Le 12/05/2015 20:27, Nathan Rutman a écrit : > Someone sent me a link to this: > http://arxiv.org/pdf/1505.02656v1.pdf > Very cool. We'll need to start using that. > > This reminded me to send my changelog/robinhood/HSM concerns that I > brought up at LUG to you guys for your thoughts. > > 1. What should happen when the changelog on an MDS fills up? Maybe > LCAP helps with the processing rate, but fundamentally the issue might > still happen if nobody consumes due to various software or comms > errors. We should either stop recording records and risk losing change > tracking, or stop MDS processing. (I believe at the moment this will > just crash the MDS.) We probably need a high water mark. > > 2. There should be some kind of rate limiting for HSM requests (RH to > MDS), so that the number of HSM requests queued up in the coordinator > doesn't grow without bound. Probably we need a -EAGAIN return code to > RH at some point. > > 3. It feels like there needs to be some feedback from the backend HSM > storage to RH, in particular to pass back a "backend full" message. We > can presumably pass a backend ENOSPC from the copytool back to the > Coordinator, but how can that message get back to Robinhood? I guess > coordinator could start returning ENOSPC for subsequent archive > requests from RH, but then we have to clear that response if the > backend condition clears. > > *--* > *Nathan Rutman · Principal Systems Architect > Seagate Technology** · *+1 503 877-9507* · *GMT-8 Hello Nathan, 1: when the changelog catalog is full (4B entries IIRC) lustre should either automatically clear the catalog or turn the FS read-only (tunable, indeed). I want to propose a patch for this but don't have it yet. 2: Right, there is no limitation at the moment. I think what is needed there is rather a high watermark on the number of pending requests than rate limiting. Note that on robinhood side your can set limitations on the number of active requests. 3: As you say, the copytools can propagate error messages back to the coordinator, indicating whether they are retryable or not. Non-retryable errors would cause the requests to fail. Lustre can then either emit a changelog for failed requests (which is on the edge of what changelogs are for, though...) or we can add some mechanism into rbh to let it react when it detects that too many requests have failed. That said, many failed requests is something that probably has to be detected and handled by monitoring systems. Avoiding too tight coupling between HSM components is desirable. Regards -- Henri -------------- next part -------------- An HTML attachment was scrubbed... URL: From shuey at purdue.edu Thu May 21 18:55:38 2015 From: shuey at purdue.edu (Michael Shuey) Date: Thu, 21 May 2015 14:55:38 -0400 Subject: [lustre-devel] Upstream code format clean-up In-Reply-To: <27AD9F40-E3E4-425D-9DE7-B86872B0BCCE@intel.com> References: <7B4D27A9-2E8C-4EB2-8B84-7E3738AEF993@iu.edu> <9B8BAC92-EA50-4621-8A91-C49A482DBB1B@intel.com> <7B49943B-4D51-4A11-8771-BF219D23658D@intel.com> <555CD0F7.40804@iu.edu> <555E1691.5090709@iu.edu> <27AD9F40-E3E4-425D-9DE7-B86872B0BCCE@intel.com> Message-ID: (added lustre-devel, since there's good backstory for others here) Don't worry if you aren't an expert in C - much of the initial cleanup is easy. Just mop up a file, and make sure the kernel still builds again. There's a good guide on working with the linux-next kernel here: https://www.kernel.org/doc/man-pages/linux-next.html I've been following these directions to send an emailed patch series: https://burzalodowa.wordpress.com/2013/10/05/how-to-send-patches-with-git-send-email/ We should probably keep these cleanups in one big patch series, to ease upstream adoption. I suggest branching linux-next (I'm working off the 20150518 tag currently), and committing things as you finish mopping them up with git commit -s . That way, git automatically inserts the "Signed-off-by" line for you. If you send a patch series over to me, I'll sign it off as well, and fold it into the series I'm regularly posting. You can do that with the following: git format-patch --subject-prefix="PATCH" -o -<# commits in series> git send-email -<# commits> --subject-prefix="PATCH" --to= BTW, adding --compose to the git send-email line will pop up an editor, to write an introduction to the series (the [PATCH 0/8] email, introducing the set). Be sure your commits include a single-line comment summarizing the change, a blank line, a more verbose (if needed) comment, another blank line, and then the Signed-off-by header. Otherwise the kernel gatekeepers have trouble merging, and you'll be dinged on syntax. If I can help in any way, please let me know. -- Mike Shuey On Thu, May 21, 2015 at 1:53 PM, Drokin, Oleg wrote: > The procedure is to use git send-email (with --annotation if more than one > patch) and that would generate the diffstats and other stuff. > > On May 21, 2015, at 1:32 PM, Chris Hanna wrote: > > > Hi Mike, > > > > Great, I'll work on the osc for starters. I should also warn that I'm > > not an expert in C, I'm just an admin of an XSEDE resource that isn't in > > production yet, so I have some free cycles. I will run checkpatch on > > anything I build and double-check. I'll keep my old K&R C book handy > > for good luck. > > > > Is the procedure, like you've done already, to mail Oleg and CC > > devel at driverdev.osuosl.org, gregkh at linuxfoundation.org, > > kernel-janitors at vger.kernel.org, linux-kernel at vger.kernel.org and HPDD > > list with the git stats and full git patch? > > > > I can post future mailings to lustre-devel, I'm already subscribed. > > > > Thanks, > > > > Chris > > > > On 5/21/15 11:55 AM, Michael Shuey wrote: > >> Chris, good to virtually meet you! > >> > >> I don't know of anyone (other than myself) submitting cleanup patches > for > >> linux-next, though there are a number of patches under LU-6215 and > LU-6142 > >> in the HPDD tree that do some cleanups. > >> > >> I've mostly been focusing on cleaning the lnet part of the tree; if you > >> wanted to start in on some of the lustre parts, that would be great. > I've > >> been breaking the task up into multiple phases: > >> > >> 1) clean whitespace - tabs, not spaces, to indent; fix variable > alignment > >> in headers, and change variable declaration blocks to use a single space > >> (between type & variable) > >> > >> 2) eliminate obvious dead code > >> > >> 3) fix remaining checkpatch.pl issues (underway now) > >> > >> 4) (TBD) sync code with HPDD's tree > >> > >> If you wanted to start down on lustre/osc and lustre/ptlrpc, that'd be > >> good. I'm collecting patches against both the kernel.org tree and the > HPDD > >> tree, to propagate dead code removal to HPDD (and largely ignoring > >> formatting and checkpatch.pl fixes for HPDD right now). Any patching > you > >> can provide would be most appreciated! > >> > >> BTW, we should probably spin up a mail thread about this somewhere more > >> public. Are you on lustre-devel, and would you mind posting future > >> coordination emails to the whole list? > >> > >> -- > >> Mike Shuey > >> > >> On Wed, May 20, 2015 at 2:22 PM, Chris Hanna wrote: > >> > >>> Greetings! > >>> > >>> I should have some time this week to work on this, any suggestions for > >>> where I could start in Greg's linux-next tree? Is anyone doing format > >>> cleanup on '/drivers/staging/lustre/lustre/osc/', for example? I don't > >>> want to duplicate something already in process. > >>> > >>> Thanks, > >>> Chris > >>> > >>> On 5/15/15 4:02 PM, Drokin, Oleg wrote: > >>>> Hello! > >>>> > >>>> On May 15, 2015, at 10:19 AM, Michael Shuey wrote: > >>>> > >>>>> I'm relatively new to kernel.org development, and completely new to > >>> lustre development - so be warned, I'll have many newbie questions. > That > >>> said, I'd very much like to help ensure lustre stays in the upstream > >>> kernel, and do whatever I can to shift as much development upstream as > >>> possible. At the moment, I've been looking at trivial cleanups > >>> (indentation, dead code removal, etc.) as a means to learn how to send > >>> patches upstream. I'm happy to continue this, and begin eliminating > >>> checkpatch warnings as well. It's a good learning exercise, and once I > >>> have a rhythm for submitting patches and testing I can bring in some > of my > >>> team and move on to other tasks on the list. > >>>>> That said, I've got some logistics questions... > >>>>> > >>>>> 1) What development mailing lists should I track? > >>>>> > >>>>> I follow lustre-discuss and lustre-devel, and hpdd-discuss. Is there > >>> an hpdd-devel, where major code shifts are discussed? Or is discussion > >>> primarily through developer days, issue trackers, and out-of-band mail > >>> threads like this? > >>>> hpdd-disuss is currently the designated place to send patches to. > >>> lustre-devel is where we'd eventually shift. > >>>> That said, sadly there are not too much public discussions of things > >>> frequently because stuff is usually developed by a single company. > >>>> So most of discussion is happening at developer days and forums like > >>> opensfs CWG. Also email threads and tickets. > >>>>> 2) Is there a current "getting started with Lustre dev" guide? > >>>>> > >>>>> There's little documentation on lustre.org about managing > development > >>> - and what I've found tends to be either very old (e.g., Oracle days) > or > >>> incomplete (e.g., developer day slides, where specifics were only > covered > >>> in person). Is there a more current guide? Or should I bug Morrone > for an > >>> account on lustre.org, and build such a guide in his wiki? I'm happy > to > >>> add documentation as well… > >>>> For community tree lustre )meaning not the in-kernel thing) it's > >>> https://wiki.hpdd.intel.com/display/PUB/Lustre+Development > >>>> in particular > https://wiki.hpdd.intel.com/display/PUB/Submitting+Changes > >>>> > >>>>> 2) What's the end goal here, between kernel.org and HPDD trees? > >>>>> > >>>>> HPDD and kernel.org maintain two separate trees. Presumably patches > >>> should be developed for both, correct? If so, will parts of the HPDD > tree > >>> be going away at any point - to be supplanted by kernel.org? I know > Greg > >>> KH has indicated that development should occur in kernel.org - but > that > >>> may not be possible, given the need to support older vendor kernels. > >>> HPDD's tree isn't really upstream for kernel.org, either - there's a > >>> number of pieces that can't go in right now. > >>>>> Where is this going? > >>>> This is a complicated question, really. > >>>> > >>>> Initially EMC rammed this thing in, since supposedly it gives you > "free" > >>> update of codebase to support newer kernels. > >>>> Well, it did not pan out exactly as planned and they bailed out. Now > we > >>> get to keep the pieces. > >>>> Having the client in the tree is indeed good for it being updated for > >>> in-kernel API changes and stuff. > >>>> Currently it's a liability, though since we need to maintain > >>> compatibility with this somewhat old code snapshot and no new features > >>> could be added. > >>>> Ideally in the end it would be a fully featured up to date client that > >>> would be shipped by major distros. > >>>> Also having this code fully accepted means certain things we'd like > >>> added to kernel APIs is easier to justify since the main argument of > "no > >>> code in kernel uses this" goes away. > >>>> I feel like we wound not be able to fully drop client support from our > >>> hpdd tree in any foreseeable future because we need compatibility with > all > >>> old distros that don't ship new enough kernel. > >>>> And then once they all start carrying it, they'd probably won't have > any > >>> moedrn features too so there would still be place for a backported > client > >>> or something. > >>>>> 3) How do patches go into HPDD's tree? > >>>>> > >>>>> I've found some slides from Andreas; I'm starting to understand what > >>> role Jenkins, Gerrit, and the HPDD tree play. How does one get patches > >>> into this? git send-email to a list, bug someone for an account on > Gerrit, > >>> or what? Or should I not be looking at the HPDD tree, and only > staring at > >>> kernel.org's tree? > >>>> https://wiki.hpdd.intel.com/display/PUB/Submitting+Changes > >>>> > >>>> You'll need to create your own account in gerrit and use that to > submit > >>> patches. > >>>> For upstream kernel work, you should not really be looking into hpdd > >>> tree much other than submitting same patches to hpdd tree for stuff > like > >>> unneeded proc files removal and tools updates. > >>>> Bye, > >>>> Oleg > >>> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From shuey at purdue.edu Thu May 21 22:04:17 2015 From: shuey at purdue.edu (Michael Shuey) Date: Thu, 21 May 2015 18:04:17 -0400 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> Message-ID: That's a task (of many) I've been putting on the back burner until the code is cleaner. It's also a HUGE change, since there are debug macros everywhere, and they all check a #define'd mask to see if they should fire, and the behavior is likely governed by parts of the lustre user land tools as well. Suggestions are welcome. Do other parts of the linux kernel define complex debugging macros like these, or is this a lustre-ism? Any suggestions on how to handle this more in line with existing drivers? -- Mike Shuey On Thu, May 21, 2015 at 5:29 PM, Julia Lawall wrote: > > > > On Thu, 21 May 2015, Joe Perches wrote: > > > On Thu, 2015-05-21 at 15:50 -0400, Mike Shuey wrote: > > > Fix many checkpatch.pl warnings. > > [] > > > diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c > > [] > > > @@ -99,38 +99,42 @@ lnet_connect_console_error(int rc, lnet_nid_t peer_nid, > > > switch (rc) { > > > /* "normal" errors */ > > > case -ECONNREFUSED: > > > - CNETERR("Connection to %s at host %pI4h on port %d was refused: check that Lustre is running on that node.\n", > > > - libcfs_nid2str(peer_nid), > > > - &peer_ip, peer_port); > > > + CNETERR( > > > + "Connection to %s at host %pI4h on port %d was refused: check that Lustre is running on that node.\n", > > > + libcfs_nid2str(peer_nid), &peer_ip, peer_port); > > > > These are not improvements and checkpatch messages aren't dicta. > > > > Please don't convert code unless the conversion makes it better > > for a human reader. > > > > These don't. > > I haven't looked into it, but perhaps there is a standard kernel printing > function that these could be converted to directly? > > julia -------------- next part -------------- An HTML attachment was scrubbed... URL: From jsimmons at infradead.org Thu May 21 22:46:15 2015 From: jsimmons at infradead.org (James Simmons) Date: Thu, 21 May 2015 18:46:15 -0400 Subject: [lustre-devel] [PATCH 0/3] First set of Intel branch merger for libcfs/lnet In-Reply-To: References: Message-ID: <1432248378-28912-1-git-send-email-jsimmons@infradead.org> This is the first set of patches that are current in the Intel branch which are apart of the effort to cleanup LNet/libcfs. James Simmons (3): staging:lustre: remove tcpip abstraction from libcfs staging:lustre: remove kernel defines in userland headers staging:lustre: cleanup libcfs lock handling .../staging/lustre/include/linux/libcfs/libcfs.h | 21 - .../lustre/include/linux/libcfs/libcfs_private.h | 51 -- .../lustre/include/linux/lnet/api-support.h | 44 -- drivers/staging/lustre/include/linux/lnet/api.h | 51 +- .../staging/lustre/include/linux/lnet/lib-lnet.h | 264 ++------- .../staging/lustre/include/linux/lnet/lib-types.h | 649 +++++++++----------- .../lustre/include/linux/lnet/linux/api-support.h | 42 -- .../lustre/include/linux/lnet/linux/lib-lnet.h | 71 --- .../lustre/include/linux/lnet/linux/lib-types.h | 45 -- .../staging/lustre/include/linux/lnet/linux/lnet.h | 56 -- .../lustre/include/linux/lnet/lnet-sysctl.h | 49 -- drivers/staging/lustre/include/linux/lnet/lnet.h | 11 +- .../staging/lustre/include/linux/lnet/lnetctl.h | 36 +- drivers/staging/lustre/include/linux/lnet/lnetst.h | 665 ++++++++++++-------- drivers/staging/lustre/include/linux/lnet/nidstr.h | 73 +++ drivers/staging/lustre/include/linux/lnet/ptllnd.h | 93 --- .../lustre/include/linux/lnet/ptllnd_wire.h | 119 ---- .../staging/lustre/include/linux/lnet/socklnd.h | 91 ++-- drivers/staging/lustre/include/linux/lnet/types.h | 266 +++++++-- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 4 +- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h | 9 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 16 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.h | 3 +- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 7 +- .../lustre/lnet/klnds/socklnd/socklnd_lib-linux.c | 21 +- .../lustre/lnet/klnds/socklnd/socklnd_proto.c | 30 +- drivers/staging/lustre/lnet/lnet/Makefile | 7 +- drivers/staging/lustre/lnet/lnet/acceptor.c | 47 +- drivers/staging/lustre/lnet/lnet/api-ni.c | 100 +--- drivers/staging/lustre/lnet/lnet/config.c | 21 +- drivers/staging/lustre/lnet/lnet/lib-eq.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-md.c | 6 +- drivers/staging/lustre/lnet/lnet/lib-me.c | 24 +- drivers/staging/lustre/lnet/lnet/lib-msg.c | 22 +- drivers/staging/lustre/lnet/lnet/lib-socket.c | 616 ++++++++++++++++++ drivers/staging/lustre/lnet/lnet/module.c | 4 +- drivers/staging/lustre/lnet/lnet/router.c | 145 ----- drivers/staging/lustre/lustre/include/lustre_net.h | 4 +- drivers/staging/lustre/lustre/libcfs/Makefile | 1 - drivers/staging/lustre/lustre/libcfs/fail.c | 2 +- .../lustre/lustre/libcfs/linux/linux-tcpip.c | 623 ------------------ .../lustre/lustre/libcfs/linux/linux-tracefile.c | 4 +- drivers/staging/lustre/lustre/libcfs/module.c | 11 +- drivers/staging/lustre/lustre/libcfs/tracefile.c | 2 +- 44 files changed, 1856 insertions(+), 2572 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/lnet/api-support.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/api-support.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/lib-types.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/lnet.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h create mode 100644 drivers/staging/lustre/include/linux/lnet/nidstr.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/ptllnd.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h create mode 100644 drivers/staging/lustre/lnet/lnet/lib-socket.c delete mode 100644 drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c From jsimmons at infradead.org Thu May 21 22:46:16 2015 From: jsimmons at infradead.org (James Simmons) Date: Thu, 21 May 2015 18:46:16 -0400 Subject: [lustre-devel] [PATCH 1/3] staging:lustre: remove tcpip abstraction from libcfs In-Reply-To: References: Message-ID: <1432248378-28912-2-git-send-email-jsimmons@infradead.org> From: James Simmons Since libcfs no longer builds for user land we can move the TCPIP abstraction that exist to the LNET layer which is the only place that uses it. Also the migrated code will use native linux kernel APIs directly instead of with wrappers. Signed-off-by: James Simmons Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6245 Reviewed-on: http://review.whamcloud.com/13760 Reviewed-by: John L. Hammond Reviewed-by: Isaac Huang Reviewed-by: Oleg Drokin --- .../staging/lustre/include/linux/libcfs/libcfs.h | 17 - .../staging/lustre/include/linux/lnet/lib-lnet.h | 15 + .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 16 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.h | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 7 +- .../lustre/lnet/klnds/socklnd/socklnd_lib-linux.c | 17 +- .../lustre/lnet/klnds/socklnd/socklnd_proto.c | 30 +- drivers/staging/lustre/lnet/lnet/Makefile | 7 +- drivers/staging/lustre/lnet/lnet/acceptor.c | 43 +- drivers/staging/lustre/lnet/lnet/config.c | 21 +- drivers/staging/lustre/lnet/lnet/lib-socket.c | 616 +++++++++++++++++++ drivers/staging/lustre/lustre/libcfs/Makefile | 1 - .../lustre/lustre/libcfs/linux/linux-tcpip.c | 623 -------------------- 14 files changed, 701 insertions(+), 716 deletions(-) create mode 100644 drivers/staging/lustre/lnet/lnet/lib-socket.c delete mode 100644 drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index 947df7e..f54bab6 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -88,23 +88,6 @@ static inline int __is_po2(unsigned long long val) int libcfs_arch_init(void); void libcfs_arch_cleanup(void); -/* libcfs tcpip */ -int libcfs_ipif_query(char *name, int *up, __u32 *ip, __u32 *mask); -int libcfs_ipif_enumerate(char ***names); -void libcfs_ipif_free_enumeration(char **names, int n); -int libcfs_sock_listen(struct socket **sockp, __u32 ip, int port, int backlog); -int libcfs_sock_accept(struct socket **newsockp, struct socket *sock); -void libcfs_sock_abort_accept(struct socket *sock); -int libcfs_sock_connect(struct socket **sockp, int *fatal, - __u32 local_ip, int local_port, - __u32 peer_ip, int peer_port); -int libcfs_sock_setbuf(struct socket *socket, int txbufsize, int rxbufsize); -int libcfs_sock_getbuf(struct socket *socket, int *txbufsize, int *rxbufsize); -int libcfs_sock_getaddr(struct socket *socket, int remote, __u32 *ip, int *port); -int libcfs_sock_write(struct socket *sock, void *buffer, int nob, int timeout); -int libcfs_sock_read(struct socket *sock, void *buffer, int nob, int timeout); -void libcfs_sock_release(struct socket *sock); - /* need both kernel and user-land acceptor */ #define LNET_ACCEPTOR_MIN_RESERVED_PORT 512 #define LNET_ACCEPTOR_MAX_RESERVED_PORT 1023 diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index 0038d29..c00a2ca 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -846,6 +846,21 @@ int lnet_acceptor_port(void); int lnet_acceptor_start(void); void lnet_acceptor_stop(void); +int lnet_ipif_query(char *name, int *up, __u32 *ip, __u32 *mask); +int lnet_ipif_enumerate(char ***names); +void lnet_ipif_free_enumeration(char **names, int n); +int lnet_sock_setbuf(struct socket *socket, int txbufsize, int rxbufsize); +int lnet_sock_getbuf(struct socket *socket, int *txbufsize, int *rxbufsize); +int lnet_sock_getaddr(struct socket *socket, bool remote, __u32 *ip, int *port); +int lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout); +int lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout); + +int lnet_sock_listen(struct socket **sockp, __u32 ip, int port, int backlog); +int lnet_sock_accept(struct socket **newsockp, struct socket *sock); +int lnet_sock_connect(struct socket **sockp, int *fatal, + __u32 local_ip, int local_port, + __u32 peer_ip, int peer_port); + void lnet_get_tunables(void); int lnet_peers_start_down(void); int lnet_peer_buffer_credits(lnet_ni_t *ni); diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index 3bad441..be4de56 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -2620,7 +2620,7 @@ static kib_dev_t *kiblnd_create_dev(char *ifname) int up; int rc; - rc = libcfs_ipif_query(ifname, &up, &ip, &netmask); + rc = lnet_ipif_query(ifname, &up, &ip, &netmask); if (rc != 0) { CERROR("Can't query IPoIB interface %s: %d\n", ifname, rc); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 7586b7e..cb49744 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -968,7 +968,7 @@ ksocknal_accept(lnet_ni_t *ni, struct socket *sock) __u32 peer_ip; int peer_port; - rc = libcfs_sock_getaddr(sock, 1, &peer_ip, &peer_port); + rc = lnet_sock_getaddr(sock, 1, &peer_ip, &peer_port); LASSERT(rc == 0); /* we succeeded before */ LIBCFS_ALLOC(cr, sizeof(*cr)); @@ -1378,15 +1378,15 @@ ksocknal_create_conn(lnet_ni_t *ni, ksock_route_t *route, ksocknal_txlist_done(ni, &zombies, 1); ksocknal_peer_decref(peer); - failed_1: +failed_1: if (hello != NULL) LIBCFS_FREE(hello, offsetof(ksock_hello_msg_t, kshm_ips[LNET_MAX_INTERFACES])); LIBCFS_FREE(conn, sizeof(*conn)); - failed_0: - libcfs_sock_release(sock); +failed_0: + sock_release(sock); return rc; } @@ -2594,7 +2594,7 @@ ksocknal_enumerate_interfaces(ksock_net_t *net) int rc; int n; - n = libcfs_ipif_enumerate(&names); + n = lnet_ipif_enumerate(&names); if (n <= 0) { CERROR("Can't enumerate interfaces: %d\n", n); return n; @@ -2608,7 +2608,7 @@ ksocknal_enumerate_interfaces(ksock_net_t *net) if (!strcmp(names[i], "lo")) /* skip the loopback IF */ continue; - rc = libcfs_ipif_query(names[i], &up, &ip, &mask); + rc = lnet_ipif_query(names[i], &up, &ip, &mask); if (rc != 0) { CWARN("Can't get interface %s info: %d\n", names[i], rc); @@ -2634,7 +2634,7 @@ ksocknal_enumerate_interfaces(ksock_net_t *net) j++; } - libcfs_ipif_free_enumeration(names, n); + lnet_ipif_free_enumeration(names, n); if (j == 0) CERROR("Can't find any usable interfaces\n"); @@ -2796,7 +2796,7 @@ ksocknal_startup(lnet_ni_t *ni) if (ni->ni_interfaces[i] == NULL) break; - rc = libcfs_ipif_query( + rc = lnet_ipif_query( ni->ni_interfaces[i], &up, &net->ksnn_interfaces[i].ksni_ipaddr, &net->ksnn_interfaces[i].ksni_netmask); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index c54c995..f3b4923 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -453,7 +453,7 @@ ksocknal_connsock_decref(ksock_conn_t *conn) LASSERT(atomic_read(&conn->ksnc_sock_refcount) > 0); if (atomic_dec_and_test(&conn->ksnc_sock_refcount)) { LASSERT(conn->ksnc_closing); - libcfs_sock_release(conn->ksnc_sock); + sock_release(conn->ksnc_sock); conn->ksnc_sock = NULL; ksocknal_finalize_zcreq(conn); } diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index fa7ad88..718a8e2 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -1707,7 +1707,8 @@ ksocknal_recv_hello (lnet_ni_t *ni, ksock_conn_t *conn, timeout = active ? *ksocknal_tunables.ksnd_timeout : lnet_acceptor_timeout(); - rc = libcfs_sock_read(sock, &hello->kshm_magic, sizeof (hello->kshm_magic), timeout); + rc = lnet_sock_read(sock, &hello->kshm_magic, + sizeof(hello->kshm_magic), timeout); if (rc != 0) { CERROR("Error %d reading HELLO from %pI4h\n", rc, &conn->ksnc_ipaddr); @@ -1726,8 +1727,8 @@ ksocknal_recv_hello (lnet_ni_t *ni, ksock_conn_t *conn, return -EPROTO; } - rc = libcfs_sock_read(sock, &hello->kshm_version, - sizeof(hello->kshm_version), timeout); + rc = lnet_sock_read(sock, &hello->kshm_version, + sizeof(hello->kshm_version), timeout); if (rc != 0) { CERROR("Error %d reading HELLO from %pI4h\n", rc, &conn->ksnc_ipaddr); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c index f5e8ab0..a93f59c 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c @@ -39,9 +39,9 @@ int ksocknal_lib_get_conn_addrs(ksock_conn_t *conn) { - int rc = libcfs_sock_getaddr(conn->ksnc_sock, 1, - &conn->ksnc_ipaddr, - &conn->ksnc_port); + int rc = lnet_sock_getaddr(conn->ksnc_sock, 1, + &conn->ksnc_ipaddr, + &conn->ksnc_port); /* Didn't need the {get,put}connsock dance to deref ksnc_sock... */ LASSERT(!conn->ksnc_closing); @@ -51,8 +51,8 @@ ksocknal_lib_get_conn_addrs(ksock_conn_t *conn) return rc; } - rc = libcfs_sock_getaddr(conn->ksnc_sock, 0, - &conn->ksnc_myipaddr, NULL); + rc = lnet_sock_getaddr(conn->ksnc_sock, 0, + &conn->ksnc_myipaddr, NULL); if (rc != 0) { CERROR("Error %d getting sock local IP\n", rc); return rc; @@ -436,7 +436,7 @@ ksocknal_lib_get_conn_tunables(ksock_conn_t *conn, int *txmem, int *rxmem, int * return -ESHUTDOWN; } - rc = libcfs_sock_getbuf(sock, txmem, rxmem); + rc = lnet_sock_getbuf(sock, txmem, rxmem); if (rc == 0) { len = sizeof(*nagle); rc = kernel_getsockopt(sock, SOL_TCP, TCP_NODELAY, @@ -498,9 +498,8 @@ ksocknal_lib_setup_sock(struct socket *sock) } } - rc = libcfs_sock_setbuf(sock, - *ksocknal_tunables.ksnd_tx_buffer_size, - *ksocknal_tunables.ksnd_rx_buffer_size); + rc = lnet_sock_setbuf(sock, *ksocknal_tunables.ksnd_tx_buffer_size, + *ksocknal_tunables.ksnd_rx_buffer_size); if (rc != 0) { CERROR("Can't set buffer tx %d, rx %d buffers: %d\n", *ksocknal_tunables.ksnd_tx_buffer_size, diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c index 8596581..3916790 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c @@ -495,8 +495,8 @@ ksocknal_send_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello) hdr->msg.hello.type = cpu_to_le32 (hello->kshm_ctype); hdr->msg.hello.incarnation = cpu_to_le64 (hello->kshm_src_incarnation); - rc = libcfs_sock_write(sock, hdr, sizeof(*hdr), - lnet_acceptor_timeout()); + rc = lnet_sock_write(sock, hdr, sizeof(*hdr), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO hdr to %pI4h/%d\n", @@ -511,9 +511,9 @@ ksocknal_send_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello) hello->kshm_ips[i] = __cpu_to_le32 (hello->kshm_ips[i]); } - rc = libcfs_sock_write(sock, hello->kshm_ips, - hello->kshm_nips * sizeof(__u32), - lnet_acceptor_timeout()); + rc = lnet_sock_write(sock, hello->kshm_ips, + hello->kshm_nips * sizeof(__u32), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO payload (%d) to %pI4h/%d\n", rc, hello->kshm_nips, @@ -544,8 +544,8 @@ ksocknal_send_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello) LNET_UNLOCK(); } - rc = libcfs_sock_write(sock, hello, offsetof(ksock_hello_msg_t, kshm_ips), - lnet_acceptor_timeout()); + rc = lnet_sock_write(sock, hello, offsetof(ksock_hello_msg_t, kshm_ips), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO hdr to %pI4h/%d\n", @@ -556,9 +556,9 @@ ksocknal_send_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello) if (hello->kshm_nips == 0) return 0; - rc = libcfs_sock_write(sock, hello->kshm_ips, - hello->kshm_nips * sizeof(__u32), - lnet_acceptor_timeout()); + rc = lnet_sock_write(sock, hello->kshm_ips, + hello->kshm_nips * sizeof(__u32), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO payload (%d) to %pI4h/%d\n", rc, hello->kshm_nips, @@ -583,7 +583,7 @@ ksocknal_recv_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello, return -ENOMEM; } - rc = libcfs_sock_read(sock, &hdr->src_nid, + rc = lnet_sock_read(sock, &hdr->src_nid, sizeof(*hdr) - offsetof(lnet_hdr_t, src_nid), timeout); if (rc != 0) { @@ -619,7 +619,7 @@ ksocknal_recv_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello, if (hello->kshm_nips == 0) goto out; - rc = libcfs_sock_read(sock, hello->kshm_ips, + rc = lnet_sock_read(sock, hello->kshm_ips, hello->kshm_nips * sizeof(__u32), timeout); if (rc != 0) { CERROR("Error %d reading IPs from ip %pI4h\n", @@ -656,7 +656,7 @@ ksocknal_recv_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello, int timeout else conn->ksnc_flip = 1; - rc = libcfs_sock_read(sock, &hello->kshm_src_nid, + rc = lnet_sock_read(sock, &hello->kshm_src_nid, offsetof(ksock_hello_msg_t, kshm_ips) - offsetof(ksock_hello_msg_t, kshm_src_nid), timeout); @@ -687,8 +687,8 @@ ksocknal_recv_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello, int timeout if (hello->kshm_nips == 0) return 0; - rc = libcfs_sock_read(sock, hello->kshm_ips, - hello->kshm_nips * sizeof(__u32), timeout); + rc = lnet_sock_read(sock, hello->kshm_ips, + hello->kshm_nips * sizeof(__u32), timeout); if (rc != 0) { CERROR("Error %d reading IPs from ip %pI4h\n", rc, &conn->ksnc_ipaddr); diff --git a/drivers/staging/lustre/lnet/lnet/Makefile b/drivers/staging/lustre/lnet/lnet/Makefile index 336b8ea..52492fb 100644 --- a/drivers/staging/lustre/lnet/lnet/Makefile +++ b/drivers/staging/lustre/lnet/lnet/Makefile @@ -1,5 +1,6 @@ obj-$(CONFIG_LNET) += lnet.o -lnet-y := api-ni.o config.o lib-me.o lib-msg.o lib-eq.o \ - lib-md.o lib-ptl.o lib-move.o module.o lo.o router.o \ - router_proc.o acceptor.o peer.o +lnet-y := api-ni.o config.o \ + lib-me.o lib-msg.o lib-eq.o lib-md.o lib-ptl.o \ + lib-socket.o lib-move.o module.o lo.o \ + router.o router_proc.o acceptor.o peer.o diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 72fd1bf..bd97099 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -155,9 +155,8 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, --port) { /* Iterate through reserved ports. */ - rc = libcfs_sock_connect(&sock, &fatal, - local_ip, port, - peer_ip, peer_port); + rc = lnet_sock_connect(&sock, &fatal, local_ip, port, + peer_ip, peer_port); if (rc != 0) { if (fatal) goto failed; @@ -184,8 +183,7 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, lnet_net_unlock(LNET_LOCK_EX); } - rc = libcfs_sock_write(sock, &cr, sizeof(cr), - accept_timeout); + rc = lnet_sock_write(sock, &cr, sizeof(cr), accept_timeout); if (rc != 0) goto failed_sock; @@ -197,7 +195,7 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, goto failed; failed_sock: - libcfs_sock_release(sock); + sock_release(sock); failed: lnet_connect_console_error(rc, peer_nid, peer_ip, peer_port); return rc; @@ -220,7 +218,7 @@ lnet_accept(struct socket *sock, __u32 magic) LASSERT(sizeof(cr) <= 16); /* not too big for the stack */ - rc = libcfs_sock_getaddr(sock, 1, &peer_ip, &peer_port); + rc = lnet_sock_getaddr(sock, 1, &peer_ip, &peer_port); LASSERT(rc == 0); /* we succeeded before */ if (!lnet_accept_magic(magic, LNET_PROTO_ACCEPTOR_MAGIC)) { @@ -234,7 +232,7 @@ lnet_accept(struct socket *sock, __u32 magic) memset(&cr, 0, sizeof(cr)); cr.acr_magic = LNET_PROTO_ACCEPTOR_MAGIC; cr.acr_version = LNET_PROTO_ACCEPTOR_VERSION; - rc = libcfs_sock_write(sock, &cr, sizeof(cr), + rc = lnet_sock_write(sock, &cr, sizeof(cr), accept_timeout); if (rc != 0) @@ -257,9 +255,8 @@ lnet_accept(struct socket *sock, __u32 magic) flip = (magic != LNET_PROTO_ACCEPTOR_MAGIC); - rc = libcfs_sock_read(sock, &cr.acr_version, - sizeof(cr.acr_version), - accept_timeout); + rc = lnet_sock_read(sock, &cr.acr_version, sizeof(cr.acr_version), + accept_timeout); if (rc != 0) { CERROR("Error %d reading connection request version from %pI4h\n", rc, &peer_ip); @@ -280,7 +277,7 @@ lnet_accept(struct socket *sock, __u32 magic) cr.acr_magic = LNET_PROTO_ACCEPTOR_MAGIC; cr.acr_version = LNET_PROTO_ACCEPTOR_VERSION; - rc = libcfs_sock_write(sock, &cr, sizeof(cr), + rc = lnet_sock_write(sock, &cr, sizeof(cr), accept_timeout); if (rc != 0) @@ -289,7 +286,7 @@ lnet_accept(struct socket *sock, __u32 magic) return -EPROTO; } - rc = libcfs_sock_read(sock, &cr.acr_nid, + rc = lnet_sock_read(sock, &cr.acr_nid, sizeof(cr) - offsetof(lnet_acceptor_connreq_t, acr_nid), accept_timeout); @@ -343,8 +340,8 @@ lnet_acceptor(void *arg) cfs_block_allsigs(); - rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock, - 0, accept_port, accept_backlog); + rc = lnet_sock_listen(&lnet_acceptor_state.pta_sock, 0, accept_port, + accept_backlog); if (rc != 0) { if (rc == -EADDRINUSE) LCONSOLE_ERROR_MSG(0x122, "Can't start acceptor on port %d: port already in use\n", @@ -367,7 +364,7 @@ lnet_acceptor(void *arg) while (!lnet_acceptor_state.pta_shutdown) { - rc = libcfs_sock_accept(&newsock, lnet_acceptor_state.pta_sock); + rc = lnet_sock_accept(&newsock, lnet_acceptor_state.pta_sock); if (rc != 0) { if (rc != -EAGAIN) { CWARN("Accept error %d: pausing...\n", rc); @@ -377,13 +374,13 @@ lnet_acceptor(void *arg) continue; } - /* maybe we're waken up with libcfs_sock_abort_accept() */ + /* maybe we're waken up with lnet_sock_abort_accept() */ if (lnet_acceptor_state.pta_shutdown) { - libcfs_sock_release(newsock); + sock_release(newsock); break; } - rc = libcfs_sock_getaddr(newsock, 1, &peer_ip, &peer_port); + rc = lnet_sock_getaddr(newsock, 1, &peer_ip, &peer_port); if (rc != 0) { CERROR("Can't determine new connection's address\n"); goto failed; @@ -395,7 +392,7 @@ lnet_acceptor(void *arg) goto failed; } - rc = libcfs_sock_read(newsock, &magic, sizeof(magic), + rc = lnet_sock_read(newsock, &magic, sizeof(magic), accept_timeout); if (rc != 0) { CERROR("Error %d reading connection request from %pI4h\n", @@ -410,10 +407,10 @@ lnet_acceptor(void *arg) continue; failed: - libcfs_sock_release(newsock); + sock_release(newsock); } - libcfs_sock_release(lnet_acceptor_state.pta_sock); + sock_release(lnet_acceptor_state.pta_sock); lnet_acceptor_state.pta_sock = NULL; CDEBUG(D_NET, "Acceptor stopping\n"); @@ -493,7 +490,7 @@ lnet_acceptor_stop(void) return; lnet_acceptor_state.pta_shutdown = 1; - libcfs_sock_abort_accept(lnet_acceptor_state.pta_sock); + wake_up_all(sk_sleep(lnet_acceptor_state.pta_sock->sk)); /* block until acceptor signals exit */ wait_for_completion(&lnet_acceptor_state.pta_signal); diff --git a/drivers/staging/lustre/lnet/lnet/config.c b/drivers/staging/lustre/lnet/lnet/config.c index 2dc4c4a..d8c8f2e 100644 --- a/drivers/staging/lustre/lnet/lnet/config.c +++ b/drivers/staging/lustre/lnet/lnet/config.c @@ -1118,7 +1118,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) __u32 *ipaddrs2; int nip; char **ifnames; - int nif = libcfs_ipif_enumerate(&ifnames); + int nif = lnet_ipif_enumerate(&ifnames); int i; int rc; @@ -1128,7 +1128,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) LIBCFS_ALLOC(ipaddrs, nif * sizeof(*ipaddrs)); if (ipaddrs == NULL) { CERROR("Can't allocate ipaddrs[%d]\n", nif); - libcfs_ipif_free_enumeration(ifnames, nif); + lnet_ipif_free_enumeration(ifnames, nif); return -ENOMEM; } @@ -1136,8 +1136,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) if (!strcmp(ifnames[i], "lo")) continue; - rc = libcfs_ipif_query(ifnames[i], &up, - &ipaddrs[nip], &netmask); + rc = lnet_ipif_query(ifnames[i], &up, &ipaddrs[nip], &netmask); if (rc != 0) { CWARN("Can't query interface %s: %d\n", ifnames[i], rc); @@ -1153,7 +1152,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) nip++; } - libcfs_ipif_free_enumeration(ifnames, nif); + lnet_ipif_free_enumeration(ifnames, nif); if (nip == nif) { *ipaddrsp = ipaddrs; @@ -1237,8 +1236,7 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) return -EPERM; } - rc = libcfs_ipif_query(ni->ni_interfaces[0], - &up, &ip, &netmask); + rc = lnet_ipif_query(ni->ni_interfaces[0], &up, &ip, &netmask); if (rc != 0) { CERROR("Net %s can't query interface %s: %d\n", libcfs_net2str(net), ni->ni_interfaces[0], rc); @@ -1255,7 +1253,7 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) return 0; } - n = libcfs_ipif_enumerate(&names); + n = lnet_ipif_enumerate(&names); if (n <= 0) { CERROR("Net %s can't enumerate interfaces: %d\n", libcfs_net2str(net), n); @@ -1266,8 +1264,7 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) if (!strcmp(names[i], "lo")) /* skip the loopback IF */ continue; - rc = libcfs_ipif_query(names[i], &up, &ip, &netmask); - + rc = lnet_ipif_query(names[i], &up, &ip, &netmask); if (rc != 0) { CWARN("Net %s can't query interface %s: %d\n", libcfs_net2str(net), names[i], rc); @@ -1280,13 +1277,13 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) continue; } - libcfs_ipif_free_enumeration(names, n); + lnet_ipif_free_enumeration(names, n); ni->ni_nid = LNET_MKNID(net, ip); return 0; } CERROR("Net %s can't find any interfaces\n", libcfs_net2str(net)); - libcfs_ipif_free_enumeration(names, n); + lnet_ipif_free_enumeration(names, n); return -ENOENT; } EXPORT_SYMBOL(lnet_set_ip_niaddr); diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c new file mode 100644 index 0000000..da7b871 --- /dev/null +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c @@ -0,0 +1,616 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + * GPL HEADER END + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 2012, 2014, Intel Corporation. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + */ +#define DEBUG_SUBSYSTEM S_LNET + +#include +#include +#include +#include +#include +/* For sys_open & sys_close */ +#include +#include + +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lib-lnet.h" + +static int +kernel_sock_unlocked_ioctl(struct file *filp, int cmd, unsigned long arg) +{ + mm_segment_t oldfs = get_fs(); + int err; + + set_fs(KERNEL_DS); + err = filp->f_op->unlocked_ioctl(filp, cmd, arg); + set_fs(oldfs); + + return err; +} + +static int +lnet_sock_ioctl(int cmd, unsigned long arg) +{ + struct file *sock_filp; + struct socket *sock; + int fd = -1; + int rc; + + rc = sock_create(PF_INET, SOCK_STREAM, 0, &sock); + if (rc != 0) { + CERROR("Can't create socket: %d\n", rc); + return rc; + } + + sock_filp = sock_alloc_file(sock, 0, NULL); + if (!sock_filp) { + rc = -ENOMEM; + sock_release(sock); + goto out; + } + + rc = kernel_sock_unlocked_ioctl(sock_filp, cmd, arg); + + fput(sock_filp); +out: + if (fd >= 0) + sys_close(fd); + return rc; +} + +int +lnet_ipif_query(char *name, int *up, __u32 *ip, __u32 *mask) +{ + struct ifreq ifr; + int nob; + int rc; + __u32 val; + + nob = strnlen(name, IFNAMSIZ); + if (nob == IFNAMSIZ) { + CERROR("Interface name %s too long\n", name); + return -EINVAL; + } + + CLASSERT(sizeof(ifr.ifr_name) >= IFNAMSIZ); + + if (strlen(name) > sizeof(ifr.ifr_name)-1) + return -E2BIG; + strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + + rc = lnet_sock_ioctl(SIOCGIFFLAGS, (unsigned long)&ifr); + if (rc != 0) { + CERROR("Can't get flags for interface %s\n", name); + return rc; + } + + if ((ifr.ifr_flags & IFF_UP) == 0) { + CDEBUG(D_NET, "Interface %s down\n", name); + *up = 0; + *ip = *mask = 0; + return 0; + } + *up = 1; + + if (strlen(name) > sizeof(ifr.ifr_name)-1) + return -E2BIG; + strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + + ifr.ifr_addr.sa_family = AF_INET; + rc = lnet_sock_ioctl(SIOCGIFADDR, (unsigned long)&ifr); + + if (rc != 0) { + CERROR("Can't get IP address for interface %s\n", name); + return rc; + } + + val = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr; + *ip = ntohl(val); + + if (strlen(name) > sizeof(ifr.ifr_name)-1) + return -E2BIG; + strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + + ifr.ifr_addr.sa_family = AF_INET; + rc = lnet_sock_ioctl(SIOCGIFNETMASK, (unsigned long)&ifr); + if (rc != 0) { + CERROR("Can't get netmask for interface %s\n", name); + return rc; + } + + val = ((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr.s_addr; + *mask = ntohl(val); + + return 0; +} +EXPORT_SYMBOL(lnet_ipif_query); + +void +lnet_ipif_free_enumeration(char **names, int n) +{ + int i; + + LASSERT(n > 0); + + for (i = 0; i < n && names[i] != NULL; i++) + LIBCFS_FREE(names[i], IFNAMSIZ); + + LIBCFS_FREE(names, n * sizeof(*names)); +} +EXPORT_SYMBOL(lnet_ipif_free_enumeration); + +int +lnet_ipif_enumerate(char ***namesp) +{ + /* Allocate and fill in 'names', returning # interfaces/error */ + char **names; + int toobig; + int nalloc; + int nfound; + struct ifreq *ifr; + struct ifconf ifc; + int rc; + int nob; + int i; + + nalloc = 16; /* first guess at max interfaces */ + toobig = 0; + for (;;) { + if (nalloc * sizeof(*ifr) > PAGE_CACHE_SIZE) { + toobig = 1; + nalloc = PAGE_CACHE_SIZE/sizeof(*ifr); + CWARN("Too many interfaces: only enumerating " + "first %d\n", nalloc); + } + + LIBCFS_ALLOC(ifr, nalloc * sizeof(*ifr)); + if (ifr == NULL) { + CERROR("ENOMEM enumerating up to %d interfaces\n", + nalloc); + rc = -ENOMEM; + goto out0; + } + + ifc.ifc_buf = (char *)ifr; + ifc.ifc_len = nalloc * sizeof(*ifr); + + rc = lnet_sock_ioctl(SIOCGIFCONF, (unsigned long)&ifc); + if (rc < 0) { + CERROR("Error %d enumerating interfaces\n", rc); + goto out1; + } + + LASSERT(rc == 0); + + nfound = ifc.ifc_len/sizeof(*ifr); + LASSERT(nfound <= nalloc); + + if (nfound < nalloc || toobig) + break; + + LIBCFS_FREE(ifr, nalloc * sizeof(*ifr)); + nalloc *= 2; + } + + if (nfound == 0) + goto out1; + + LIBCFS_ALLOC(names, nfound * sizeof(*names)); + if (names == NULL) { + rc = -ENOMEM; + goto out1; + } + + for (i = 0; i < nfound; i++) { + nob = strnlen(ifr[i].ifr_name, IFNAMSIZ); + if (nob == IFNAMSIZ) { + /* no space for terminating NULL */ + CERROR("interface name %.*s too long (%d max)\n", + nob, ifr[i].ifr_name, IFNAMSIZ); + rc = -ENAMETOOLONG; + goto out2; + } + + LIBCFS_ALLOC(names[i], IFNAMSIZ); + if (names[i] == NULL) { + rc = -ENOMEM; + goto out2; + } + + memcpy(names[i], ifr[i].ifr_name, nob); + names[i][nob] = 0; + } + + *namesp = names; + rc = nfound; + + out2: + if (rc < 0) + lnet_ipif_free_enumeration(names, nfound); + out1: + LIBCFS_FREE(ifr, nalloc * sizeof(*ifr)); + out0: + return rc; +} +EXPORT_SYMBOL(lnet_ipif_enumerate); + +int +lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout) +{ + int rc; + long jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC); + unsigned long then; + struct timeval tv; + + LASSERT(nob > 0); + /* Caller may pass a zero timeout if she thinks the socket buffer is + * empty enough to take the whole message immediately */ + + for (;;) { + struct kvec iov = { + .iov_base = buffer, + .iov_len = nob + }; + struct msghdr msg = { + .msg_flags = (timeout == 0) ? MSG_DONTWAIT : 0 + }; + + if (timeout != 0) { + /* Set send timeout to remaining time */ + tv = (struct timeval) { + .tv_sec = jiffies_left / + msecs_to_jiffies(MSEC_PER_SEC), + .tv_usec = ((jiffies_left % + msecs_to_jiffies(MSEC_PER_SEC)) * + USEC_PER_SEC) / + msecs_to_jiffies(MSEC_PER_SEC) + }; + + rc = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, + (char *)&tv, sizeof(tv)); + if (rc != 0) { + CERROR("Can't set socket send timeout " + "%ld.%06d: %d\n", + (long)tv.tv_sec, (int)tv.tv_usec, rc); + return rc; + } + } + + then = jiffies; + rc = kernel_sendmsg(sock, &msg, &iov, 1, nob); + jiffies_left -= jiffies - then; + + if (rc == nob) + return 0; + + if (rc < 0) + return rc; + + if (rc == 0) { + CERROR("Unexpected zero rc\n"); + return -ECONNABORTED; + } + + if (jiffies_left <= 0) + return -EAGAIN; + + buffer = ((char *)buffer) + rc; + nob -= rc; + } + return 0; +} +EXPORT_SYMBOL(lnet_sock_write); + +int +lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout) +{ + int rc; + long jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC); + unsigned long then; + struct timeval tv; + + LASSERT(nob > 0); + LASSERT(jiffies_left > 0); + + for (;;) { + struct kvec iov = { + .iov_base = buffer, + .iov_len = nob + }; + struct msghdr msg = { + .msg_flags = 0 + }; + + /* Set receive timeout to remaining time */ + tv = (struct timeval) { + .tv_sec = jiffies_left / msecs_to_jiffies(MSEC_PER_SEC), + .tv_usec = ((jiffies_left % + msecs_to_jiffies(MSEC_PER_SEC)) * + USEC_PER_SEC) / + msecs_to_jiffies(MSEC_PER_SEC) + }; + rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, + (char *)&tv, sizeof(tv)); + if (rc != 0) { + CERROR("Can't set socket recv timeout %ld.%06d: %d\n", + (long)tv.tv_sec, (int)tv.tv_usec, rc); + return rc; + } + + then = jiffies; + rc = kernel_recvmsg(sock, &msg, &iov, 1, nob, 0); + jiffies_left -= jiffies - then; + + if (rc < 0) + return rc; + + if (rc == 0) + return -ECONNRESET; + + buffer = ((char *)buffer) + rc; + nob -= rc; + + if (nob == 0) + return 0; + + if (jiffies_left <= 0) + return -ETIMEDOUT; + } +} +EXPORT_SYMBOL(lnet_sock_read); + +static int +lnet_sock_create(struct socket **sockp, int *fatal, + __u32 local_ip, int local_port) +{ + struct sockaddr_in locaddr; + struct socket *sock; + int rc; + int option; + + /* All errors are fatal except bind failure if the port is in use */ + *fatal = 1; + + rc = sock_create(PF_INET, SOCK_STREAM, 0, &sock); + *sockp = sock; + if (rc != 0) { + CERROR("Can't create socket: %d\n", rc); + return rc; + } + + option = 1; + rc = kernel_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, + (char *)&option, sizeof(option)); + if (rc != 0) { + CERROR("Can't set SO_REUSEADDR for socket: %d\n", rc); + goto failed; + } + + if (local_ip != 0 || local_port != 0) { + memset(&locaddr, 0, sizeof(locaddr)); + locaddr.sin_family = AF_INET; + locaddr.sin_port = htons(local_port); + locaddr.sin_addr.s_addr = (local_ip == 0) ? + INADDR_ANY : htonl(local_ip); + + rc = kernel_bind(sock, (struct sockaddr *)&locaddr, + sizeof(locaddr)); + if (rc == -EADDRINUSE) { + CDEBUG(D_NET, "Port %d already in use\n", local_port); + *fatal = 0; + goto failed; + } + if (rc != 0) { + CERROR("Error trying to bind to port %d: %d\n", + local_port, rc); + goto failed; + } + } + return 0; + +failed: + sock_release(sock); + return rc; +} + +int +lnet_sock_setbuf(struct socket *sock, int txbufsize, int rxbufsize) +{ + int option; + int rc; + + if (txbufsize != 0) { + option = txbufsize; + rc = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDBUF, + (char *)&option, sizeof(option)); + if (rc != 0) { + CERROR("Can't set send buffer %d: %d\n", + option, rc); + return rc; + } + } + + if (rxbufsize != 0) { + option = rxbufsize; + rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVBUF, + (char *)&option, sizeof(option)); + if (rc != 0) { + CERROR("Can't set receive buffer %d: %d\n", + option, rc); + return rc; + } + } + return 0; +} +EXPORT_SYMBOL(lnet_sock_setbuf); + +int +lnet_sock_getaddr(struct socket *sock, bool remote, __u32 *ip, int *port) +{ + struct sockaddr_in sin; + int len = sizeof(sin); + int rc; + + if (remote) + rc = kernel_getpeername(sock, (struct sockaddr *)&sin, &len); + else + rc = kernel_getsockname(sock, (struct sockaddr *)&sin, &len); + if (rc != 0) { + CERROR("Error %d getting sock %s IP/port\n", + rc, remote ? "peer" : "local"); + return rc; + } + + if (ip != NULL) + *ip = ntohl(sin.sin_addr.s_addr); + + if (port != NULL) + *port = ntohs(sin.sin_port); + + return 0; +} +EXPORT_SYMBOL(lnet_sock_getaddr); + +int +lnet_sock_getbuf(struct socket *sock, int *txbufsize, int *rxbufsize) +{ + if (txbufsize != NULL) + *txbufsize = sock->sk->sk_sndbuf; + + if (rxbufsize != NULL) + *rxbufsize = sock->sk->sk_rcvbuf; + + return 0; +} +EXPORT_SYMBOL(lnet_sock_getbuf); + +int +lnet_sock_listen(struct socket **sockp, + __u32 local_ip, int local_port, int backlog) +{ + int fatal; + int rc; + + rc = lnet_sock_create(sockp, &fatal, local_ip, local_port); + if (rc != 0) { + if (!fatal) + CERROR("Can't create socket: port %d already in use\n", + local_port); + return rc; + } + + rc = kernel_listen(*sockp, backlog); + if (rc == 0) + return 0; + + CERROR("Can't set listen backlog %d: %d\n", backlog, rc); + sock_release(*sockp); + return rc; +} + +int +lnet_sock_accept(struct socket **newsockp, struct socket *sock) +{ + wait_queue_t wait; + struct socket *newsock; + int rc; + + /* XXX this should add a ref to sock->ops->owner, if + * TCP could be a module */ + rc = sock_create_lite(PF_PACKET, sock->type, IPPROTO_TCP, &newsock); + if (rc) { + CERROR("Can't allocate socket\n"); + return rc; + } + + newsock->ops = sock->ops; + + rc = sock->ops->accept(sock, newsock, O_NONBLOCK); + if (rc == -EAGAIN) { + /* Nothing ready, so wait for activity */ + init_waitqueue_entry(&wait, current); + add_wait_queue(sk_sleep(sock->sk), &wait); + set_current_state(TASK_INTERRUPTIBLE); + schedule(); + remove_wait_queue(sk_sleep(sock->sk), &wait); + rc = sock->ops->accept(sock, newsock, O_NONBLOCK); + } + + if (rc != 0) + goto failed; + + *newsockp = newsock; + return 0; + +failed: + sock_release(newsock); + return rc; +} + +int +lnet_sock_connect(struct socket **sockp, int *fatal, + __u32 local_ip, int local_port, + __u32 peer_ip, int peer_port) +{ + struct sockaddr_in srvaddr; + int rc; + + rc = lnet_sock_create(sockp, fatal, local_ip, local_port); + if (rc != 0) + return rc; + + memset(&srvaddr, 0, sizeof(srvaddr)); + srvaddr.sin_family = AF_INET; + srvaddr.sin_port = htons(peer_port); + srvaddr.sin_addr.s_addr = htonl(peer_ip); + + rc = kernel_connect(*sockp, (struct sockaddr *)&srvaddr, + sizeof(srvaddr), 0); + if (rc == 0) + return 0; + + /* EADDRNOTAVAIL probably means we're already connected to the same + * peer/port on the same local port on a differently typed + * connection. Let our caller retry with a different local + * port... */ + *fatal = !(rc == -EADDRNOTAVAIL); + + CDEBUG_LIMIT(*fatal ? D_NETERROR : D_NET, + "Error %d connecting %pI4h/%d -> %pI4h/%d\n", rc, + &local_ip, local_port, &peer_ip, peer_port); + + sock_release(*sockp); + return rc; +} diff --git a/drivers/staging/lustre/lustre/libcfs/Makefile b/drivers/staging/lustre/lustre/libcfs/Makefile index fabdd3e..ec98f44 100644 --- a/drivers/staging/lustre/lustre/libcfs/Makefile +++ b/drivers/staging/lustre/lustre/libcfs/Makefile @@ -2,7 +2,6 @@ obj-$(CONFIG_LUSTRE_FS) += libcfs.o libcfs-linux-objs := linux-tracefile.o linux-debug.o libcfs-linux-objs += linux-prim.o linux-cpu.o -libcfs-linux-objs += linux-tcpip.o libcfs-linux-objs += linux-curproc.o libcfs-linux-objs += linux-module.o libcfs-linux-objs += linux-crypto.o diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c deleted file mode 100644 index f2462e7..0000000 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c +++ /dev/null @@ -1,623 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ -#define DEBUG_SUBSYSTEM S_LNET - -#include "../../../include/linux/libcfs/libcfs.h" - -#include -#include -#include -/* For sys_open & sys_close */ -#include - -static int -libcfs_sock_ioctl(int cmd, unsigned long arg) -{ - mm_segment_t oldmm = get_fs(); - struct socket *sock; - int rc; - struct file *sock_filp; - - rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); - if (rc != 0) { - CERROR ("Can't create socket: %d\n", rc); - return rc; - } - - sock_filp = sock_alloc_file(sock, 0, NULL); - if (IS_ERR(sock_filp)) { - sock_release(sock); - rc = PTR_ERR(sock_filp); - goto out; - } - - set_fs(KERNEL_DS); - if (sock_filp->f_op->unlocked_ioctl) - rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg); - set_fs(oldmm); - - fput(sock_filp); -out: - return rc; -} - -int -libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) -{ - struct ifreq ifr; - int nob; - int rc; - __u32 val; - - nob = strnlen(name, IFNAMSIZ); - if (nob == IFNAMSIZ) { - CERROR("Interface name %s too long\n", name); - return -EINVAL; - } - - CLASSERT (sizeof(ifr.ifr_name) >= IFNAMSIZ); - - strcpy(ifr.ifr_name, name); - rc = libcfs_sock_ioctl(SIOCGIFFLAGS, (unsigned long)&ifr); - - if (rc != 0) { - CERROR("Can't get flags for interface %s\n", name); - return rc; - } - - if ((ifr.ifr_flags & IFF_UP) == 0) { - CDEBUG(D_NET, "Interface %s down\n", name); - *up = 0; - *ip = *mask = 0; - return 0; - } - - *up = 1; - - strcpy(ifr.ifr_name, name); - ifr.ifr_addr.sa_family = AF_INET; - rc = libcfs_sock_ioctl(SIOCGIFADDR, (unsigned long)&ifr); - - if (rc != 0) { - CERROR("Can't get IP address for interface %s\n", name); - return rc; - } - - val = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr; - *ip = ntohl(val); - - strcpy(ifr.ifr_name, name); - ifr.ifr_addr.sa_family = AF_INET; - rc = libcfs_sock_ioctl(SIOCGIFNETMASK, (unsigned long)&ifr); - - if (rc != 0) { - CERROR("Can't get netmask for interface %s\n", name); - return rc; - } - - val = ((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr.s_addr; - *mask = ntohl(val); - - return 0; -} - -EXPORT_SYMBOL(libcfs_ipif_query); - -int -libcfs_ipif_enumerate (char ***namesp) -{ - /* Allocate and fill in 'names', returning # interfaces/error */ - char **names; - int toobig; - int nalloc; - int nfound; - struct ifreq *ifr; - struct ifconf ifc; - int rc; - int nob; - int i; - - - nalloc = 16; /* first guess at max interfaces */ - toobig = 0; - for (;;) { - if (nalloc * sizeof(*ifr) > PAGE_CACHE_SIZE) { - toobig = 1; - nalloc = PAGE_CACHE_SIZE/sizeof(*ifr); - CWARN("Too many interfaces: only enumerating first %d\n", - nalloc); - } - - LIBCFS_ALLOC(ifr, nalloc * sizeof(*ifr)); - if (ifr == NULL) { - CERROR ("ENOMEM enumerating up to %d interfaces\n", nalloc); - rc = -ENOMEM; - goto out0; - } - - ifc.ifc_buf = (char *)ifr; - ifc.ifc_len = nalloc * sizeof(*ifr); - - rc = libcfs_sock_ioctl(SIOCGIFCONF, (unsigned long)&ifc); - - if (rc < 0) { - CERROR ("Error %d enumerating interfaces\n", rc); - goto out1; - } - - LASSERT (rc == 0); - - nfound = ifc.ifc_len/sizeof(*ifr); - LASSERT (nfound <= nalloc); - - if (nfound < nalloc || toobig) - break; - - LIBCFS_FREE(ifr, nalloc * sizeof(*ifr)); - nalloc *= 2; - } - - if (nfound == 0) - goto out1; - - LIBCFS_ALLOC(names, nfound * sizeof(*names)); - if (names == NULL) { - rc = -ENOMEM; - goto out1; - } - - for (i = 0; i < nfound; i++) { - - nob = strnlen (ifr[i].ifr_name, IFNAMSIZ); - if (nob == IFNAMSIZ) { - /* no space for terminating NULL */ - CERROR("interface name %.*s too long (%d max)\n", - nob, ifr[i].ifr_name, IFNAMSIZ); - rc = -ENAMETOOLONG; - goto out2; - } - - LIBCFS_ALLOC(names[i], IFNAMSIZ); - if (names[i] == NULL) { - rc = -ENOMEM; - goto out2; - } - - memcpy(names[i], ifr[i].ifr_name, nob); - names[i][nob] = 0; - } - - *namesp = names; - rc = nfound; - - out2: - if (rc < 0) - libcfs_ipif_free_enumeration(names, nfound); - out1: - LIBCFS_FREE(ifr, nalloc * sizeof(*ifr)); - out0: - return rc; -} - -EXPORT_SYMBOL(libcfs_ipif_enumerate); - -void -libcfs_ipif_free_enumeration (char **names, int n) -{ - int i; - - LASSERT (n > 0); - - for (i = 0; i < n && names[i] != NULL; i++) - LIBCFS_FREE(names[i], IFNAMSIZ); - - LIBCFS_FREE(names, n * sizeof(*names)); -} - -EXPORT_SYMBOL(libcfs_ipif_free_enumeration); - -int -libcfs_sock_write (struct socket *sock, void *buffer, int nob, int timeout) -{ - int rc; - long ticks = timeout * HZ; - unsigned long then; - struct timeval tv; - - LASSERT (nob > 0); - /* Caller may pass a zero timeout if she thinks the socket buffer is - * empty enough to take the whole message immediately */ - - for (;;) { - struct kvec iov = { - .iov_base = buffer, - .iov_len = nob - }; - struct msghdr msg = { - .msg_flags = (timeout == 0) ? MSG_DONTWAIT : 0 - }; - - if (timeout != 0) { - /* Set send timeout to remaining time */ - tv = (struct timeval) { - .tv_sec = ticks / HZ, - .tv_usec = ((ticks % HZ) * 1000000) / HZ - }; - rc = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, - (char *)&tv, sizeof(tv)); - if (rc != 0) { - CERROR("Can't set socket send timeout %ld.%06d: %d\n", - (long)tv.tv_sec, (int)tv.tv_usec, rc); - return rc; - } - } - - then = jiffies; - rc = kernel_sendmsg(sock, &msg, &iov, 1, nob); - ticks -= jiffies - then; - - if (rc == nob) - return 0; - - if (rc < 0) - return rc; - - if (rc == 0) { - CERROR ("Unexpected zero rc\n"); - return -ECONNABORTED; - } - - if (ticks <= 0) - return -EAGAIN; - - buffer = ((char *)buffer) + rc; - nob -= rc; - } - - return 0; -} -EXPORT_SYMBOL(libcfs_sock_write); - -int -libcfs_sock_read (struct socket *sock, void *buffer, int nob, int timeout) -{ - int rc; - long ticks = timeout * HZ; - unsigned long then; - struct timeval tv; - - LASSERT (nob > 0); - LASSERT (ticks > 0); - - for (;;) { - struct kvec iov = { - .iov_base = buffer, - .iov_len = nob - }; - struct msghdr msg = { - .msg_flags = 0 - }; - - /* Set receive timeout to remaining time */ - tv = (struct timeval) { - .tv_sec = ticks / HZ, - .tv_usec = ((ticks % HZ) * 1000000) / HZ - }; - rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, - (char *)&tv, sizeof(tv)); - if (rc != 0) { - CERROR("Can't set socket recv timeout %ld.%06d: %d\n", - (long)tv.tv_sec, (int)tv.tv_usec, rc); - return rc; - } - - then = jiffies; - rc = kernel_recvmsg(sock, &msg, &iov, 1, nob, 0); - ticks -= jiffies - then; - - if (rc < 0) - return rc; - - if (rc == 0) - return -ECONNRESET; - - buffer = ((char *)buffer) + rc; - nob -= rc; - - if (nob == 0) - return 0; - - if (ticks <= 0) - return -ETIMEDOUT; - } -} - -EXPORT_SYMBOL(libcfs_sock_read); - -static int -libcfs_sock_create (struct socket **sockp, int *fatal, - __u32 local_ip, int local_port) -{ - struct sockaddr_in locaddr; - struct socket *sock; - int rc; - int option; - - /* All errors are fatal except bind failure if the port is in use */ - *fatal = 1; - - rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); - *sockp = sock; - if (rc != 0) { - CERROR ("Can't create socket: %d\n", rc); - return rc; - } - - option = 1; - rc = kernel_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, - (char *)&option, sizeof (option)); - if (rc != 0) { - CERROR("Can't set SO_REUSEADDR for socket: %d\n", rc); - goto failed; - } - - if (local_ip != 0 || local_port != 0) { - memset(&locaddr, 0, sizeof(locaddr)); - locaddr.sin_family = AF_INET; - locaddr.sin_port = htons(local_port); - locaddr.sin_addr.s_addr = (local_ip == 0) ? - INADDR_ANY : htonl(local_ip); - - rc = sock->ops->bind(sock, (struct sockaddr *)&locaddr, - sizeof(locaddr)); - if (rc == -EADDRINUSE) { - CDEBUG(D_NET, "Port %d already in use\n", local_port); - *fatal = 0; - goto failed; - } - if (rc != 0) { - CERROR("Error trying to bind to port %d: %d\n", - local_port, rc); - goto failed; - } - } - - return 0; - - failed: - sock_release(sock); - return rc; -} - -int -libcfs_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) -{ - int option; - int rc; - - if (txbufsize != 0) { - option = txbufsize; - rc = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDBUF, - (char *)&option, sizeof (option)); - if (rc != 0) { - CERROR ("Can't set send buffer %d: %d\n", - option, rc); - return rc; - } - } - - if (rxbufsize != 0) { - option = rxbufsize; - rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVBUF, - (char *)&option, sizeof (option)); - if (rc != 0) { - CERROR ("Can't set receive buffer %d: %d\n", - option, rc); - return rc; - } - } - - return 0; -} - -EXPORT_SYMBOL(libcfs_sock_setbuf); - -int -libcfs_sock_getaddr (struct socket *sock, int remote, __u32 *ip, int *port) -{ - struct sockaddr_in sin; - int len = sizeof (sin); - int rc; - - rc = sock->ops->getname (sock, (struct sockaddr *)&sin, &len, - remote ? 2 : 0); - if (rc != 0) { - CERROR ("Error %d getting sock %s IP/port\n", - rc, remote ? "peer" : "local"); - return rc; - } - - if (ip != NULL) - *ip = ntohl (sin.sin_addr.s_addr); - - if (port != NULL) - *port = ntohs (sin.sin_port); - - return 0; -} - -EXPORT_SYMBOL(libcfs_sock_getaddr); - -int -libcfs_sock_getbuf (struct socket *sock, int *txbufsize, int *rxbufsize) -{ - - if (txbufsize != NULL) { - *txbufsize = sock->sk->sk_sndbuf; - } - - if (rxbufsize != NULL) { - *rxbufsize = sock->sk->sk_rcvbuf; - } - - return 0; -} - -EXPORT_SYMBOL(libcfs_sock_getbuf); - -int -libcfs_sock_listen (struct socket **sockp, - __u32 local_ip, int local_port, int backlog) -{ - int fatal; - int rc; - - rc = libcfs_sock_create(sockp, &fatal, local_ip, local_port); - if (rc != 0) { - if (!fatal) - CERROR("Can't create socket: port %d already in use\n", - local_port); - return rc; - } - - rc = (*sockp)->ops->listen(*sockp, backlog); - if (rc == 0) - return 0; - - CERROR("Can't set listen backlog %d: %d\n", backlog, rc); - sock_release(*sockp); - return rc; -} - -EXPORT_SYMBOL(libcfs_sock_listen); - -int -libcfs_sock_accept (struct socket **newsockp, struct socket *sock) -{ - wait_queue_t wait; - struct socket *newsock; - int rc; - - init_waitqueue_entry(&wait, current); - - /* XXX this should add a ref to sock->ops->owner, if - * TCP could be a module */ - rc = sock_create_lite(PF_PACKET, sock->type, IPPROTO_TCP, &newsock); - if (rc) { - CERROR("Can't allocate socket\n"); - return rc; - } - - newsock->ops = sock->ops; - - rc = sock->ops->accept(sock, newsock, O_NONBLOCK); - if (rc == -EAGAIN) { - /* Nothing ready, so wait for activity */ - set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(sk_sleep(sock->sk), &wait); - schedule(); - remove_wait_queue(sk_sleep(sock->sk), &wait); - set_current_state(TASK_RUNNING); - rc = sock->ops->accept(sock, newsock, O_NONBLOCK); - } - - if (rc != 0) - goto failed; - - *newsockp = newsock; - return 0; - - failed: - sock_release(newsock); - return rc; -} - -EXPORT_SYMBOL(libcfs_sock_accept); - -void -libcfs_sock_abort_accept (struct socket *sock) -{ - wake_up_all(sk_sleep(sock->sk)); -} - -EXPORT_SYMBOL(libcfs_sock_abort_accept); - -int -libcfs_sock_connect (struct socket **sockp, int *fatal, - __u32 local_ip, int local_port, - __u32 peer_ip, int peer_port) -{ - struct sockaddr_in srvaddr; - int rc; - - rc = libcfs_sock_create(sockp, fatal, local_ip, local_port); - if (rc != 0) - return rc; - - memset (&srvaddr, 0, sizeof (srvaddr)); - srvaddr.sin_family = AF_INET; - srvaddr.sin_port = htons(peer_port); - srvaddr.sin_addr.s_addr = htonl(peer_ip); - - rc = (*sockp)->ops->connect(*sockp, - (struct sockaddr *)&srvaddr, sizeof(srvaddr), - 0); - if (rc == 0) - return 0; - - /* EADDRNOTAVAIL probably means we're already connected to the same - * peer/port on the same local port on a differently typed - * connection. Let our caller retry with a different local - * port... */ - *fatal = !(rc == -EADDRNOTAVAIL); - - CDEBUG_LIMIT(*fatal ? D_NETERROR : D_NET, - "Error %d connecting %pI4h/%d -> %pI4h/%d\n", rc, - &local_ip, local_port, &peer_ip, peer_port); - - sock_release(*sockp); - return rc; -} - -EXPORT_SYMBOL(libcfs_sock_connect); - -void -libcfs_sock_release (struct socket *sock) -{ - sock_release(sock); -} - -EXPORT_SYMBOL(libcfs_sock_release); -- 1.7.1 From jsimmons at infradead.org Thu May 21 22:46:17 2015 From: jsimmons at infradead.org (James Simmons) Date: Thu, 21 May 2015 18:46:17 -0400 Subject: [lustre-devel] [PATCH 2/3] staging:lustre: remove kernel defines in userland headers In-Reply-To: References: Message-ID: <1432248378-28912-3-git-send-email-jsimmons@infradead.org> From: James Simmons Currently the lnet headers used for user land applications contain various kernel definations. This is due to the fact libcfs contains kernel wrappers for user land which will be going away. This patch sorted the header data so all kernel containing structures are moved out of headers that user land will use. Signed-off-by: James Simmons Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6245 Reviewed-on: http://review.whamcloud.com/13792 Reviewed-by: John L. Hammond Reviewed-by: Andreas Dilger --- .../staging/lustre/include/linux/libcfs/libcfs.h | 4 - .../lustre/include/linux/libcfs/libcfs_private.h | 51 -- .../lustre/include/linux/lnet/api-support.h | 44 -- drivers/staging/lustre/include/linux/lnet/api.h | 51 +- .../staging/lustre/include/linux/lnet/lib-lnet.h | 249 +------- .../staging/lustre/include/linux/lnet/lib-types.h | 649 +++++++++----------- .../lustre/include/linux/lnet/linux/api-support.h | 42 -- .../lustre/include/linux/lnet/linux/lib-lnet.h | 71 --- .../lustre/include/linux/lnet/linux/lib-types.h | 45 -- .../staging/lustre/include/linux/lnet/linux/lnet.h | 56 -- .../lustre/include/linux/lnet/lnet-sysctl.h | 49 -- drivers/staging/lustre/include/linux/lnet/lnet.h | 11 +- .../staging/lustre/include/linux/lnet/lnetctl.h | 36 +- drivers/staging/lustre/include/linux/lnet/lnetst.h | 665 ++++++++++++-------- drivers/staging/lustre/include/linux/lnet/nidstr.h | 73 +++ drivers/staging/lustre/include/linux/lnet/ptllnd.h | 93 --- .../lustre/include/linux/lnet/ptllnd_wire.h | 119 ---- .../staging/lustre/include/linux/lnet/socklnd.h | 91 ++-- drivers/staging/lustre/include/linux/lnet/types.h | 266 +++++++-- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 2 +- .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h | 9 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.h | 1 - .../lustre/lnet/klnds/socklnd/socklnd_lib-linux.c | 4 +- drivers/staging/lustre/lnet/lnet/acceptor.c | 2 - drivers/staging/lustre/lnet/lnet/api-ni.c | 100 +--- drivers/staging/lustre/lnet/lnet/lib-eq.c | 2 +- drivers/staging/lustre/lnet/lnet/lib-md.c | 6 +- drivers/staging/lustre/lnet/lnet/lib-me.c | 24 +- drivers/staging/lustre/lnet/lnet/lib-msg.c | 22 +- drivers/staging/lustre/lnet/lnet/module.c | 4 +- drivers/staging/lustre/lnet/lnet/router.c | 145 ----- drivers/staging/lustre/lustre/include/lustre_net.h | 4 +- 32 files changed, 1149 insertions(+), 1841 deletions(-) delete mode 100644 drivers/staging/lustre/include/linux/lnet/api-support.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/api-support.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/lib-types.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/linux/lnet.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h create mode 100644 drivers/staging/lustre/include/linux/lnet/nidstr.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/ptllnd.h delete mode 100644 drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index f54bab6..aae9487 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -46,10 +46,6 @@ #include "curproc.h" -#ifndef offsetof -# define offsetof(typ, memb) ((long)(long_ptr_t)((char *)&(((typ *)0)->memb))) -#endif - #ifndef ARRAY_SIZE #define ARRAY_SIZE(a) ((sizeof(a)) / (sizeof((a)[0]))) #endif diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h index fef8825..6174946 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h @@ -410,36 +410,6 @@ int cfs_percpt_atomic_summary(atomic_t **refs); */ #define CLASSERT(cond) do {switch (42) {case (cond): case 0: break; } } while (0) -/* support decl needed both by kernel and liblustre */ -int libcfs_isknown_lnd(int type); -char *libcfs_lnd2modname(int type); -char *libcfs_lnd2str(int type); -int libcfs_str2lnd(const char *str); -char *libcfs_net2str(__u32 net); -char *libcfs_nid2str(lnet_nid_t nid); -__u32 libcfs_str2net(const char *str); -lnet_nid_t libcfs_str2nid(const char *str); -int libcfs_str2anynid(lnet_nid_t *nid, const char *str); -char *libcfs_id2str(lnet_process_id_t id); -void cfs_free_nidlist(struct list_head *list); -int cfs_parse_nidlist(char *str, int len, struct list_head *list); -int cfs_match_nid(lnet_nid_t nid, struct list_head *list); - -/** \addtogroup lnet_addr - * @{ */ -/* how an LNET NID encodes net:address */ -/** extract the address part of an lnet_nid_t */ -#define LNET_NIDADDR(nid) ((__u32)((nid) & 0xffffffff)) -/** extract the network part of an lnet_nid_t */ -#define LNET_NIDNET(nid) ((__u32)(((nid) >> 32)) & 0xffffffff) -/** make an lnet_nid_t from a network part and an address part */ -#define LNET_MKNID(net, addr) ((((__u64)(net))<<32)|((__u64)(addr))) -/* how net encodes type:number */ -#define LNET_NETNUM(net) ((net) & 0xffff) -#define LNET_NETTYP(net) (((net) >> 16) & 0xffff) -#define LNET_MKNET(typ, num) ((((__u32)(typ))<<16)|((__u32)(num))) -/** @} lnet_addr */ - /* max value for numeric network address */ #define MAX_NUMERIC_VALUE 0xffffffff @@ -532,25 +502,4 @@ do { \ ptr += cfs_size_round(len + 1); \ } while (0) -/** - * Lustre Network Driver types. - */ -enum { - /* Only add to these values (i.e. don't ever change or redefine them): - * network addresses depend on them... */ - QSWLND = 1, - SOCKLND = 2, - GMLND = 3, /* obsolete, keep it so that libcfs_nid2str works */ - PTLLND = 4, - O2IBLND = 5, - CIBLND = 6, - OPENIBLND = 7, - IIBLND = 8, - LOLND = 9, - RALND = 10, - VIBLND = 11, - MXLND = 12, - GNILND = 13, -}; - #endif diff --git a/drivers/staging/lustre/include/linux/lnet/api-support.h b/drivers/staging/lustre/include/linux/lnet/api-support.h deleted file mode 100644 index 8f7fa28..0000000 --- a/drivers/staging/lustre/include/linux/lnet/api-support.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LNET_API_SUPPORT_H__ -#define __LNET_API_SUPPORT_H__ - -#include "linux/api-support.h" - -#include "../libcfs/libcfs.h" -#include "types.h" -#include "lnet.h" - -#endif diff --git a/drivers/staging/lustre/include/linux/lnet/api.h b/drivers/staging/lustre/include/linux/lnet/api.h index cd86517..76fb6fd 100644 --- a/drivers/staging/lustre/include/linux/lnet/api.h +++ b/drivers/staging/lustre/include/linux/lnet/api.h @@ -15,21 +15,19 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, 2015, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. */ #ifndef __LNET_API_H__ @@ -41,20 +39,15 @@ * * LNet is an asynchronous message-passing API, which provides an unreliable * connectionless service that can't guarantee any order. It supports OFA IB, - * TCP/IP, and Cray Portals, and routes between heterogeneous networks. - * - * LNet can run both in OS kernel space and in userspace as a library. + * TCP/IP, and Cray Interconnects, and routes between heterogeneous networks. * @{ */ -#include "../lnet/types.h" +#include "types.h" /** \defgroup lnet_init_fini Initialization and cleanup * The LNet must be properly initialized before any LNet calls can be made. * @{ */ -int LNetInit(void); -void LNetFini(void); - int LNetNIInit(lnet_pid_t requested_pid); int LNetNIFini(void); /** @} lnet_init_fini */ @@ -84,6 +77,7 @@ void LNetSnprintHandle(char *str, int str_len, lnet_handle_any_t handle); /** @} lnet_addr */ + /** \defgroup lnet_me Match entries * * A match entry (abbreviated as ME) describes a set of criteria to accept @@ -98,16 +92,16 @@ void LNetSnprintHandle(char *str, int str_len, lnet_handle_any_t handle); * @{ */ int LNetMEAttach(unsigned int portal, lnet_process_id_t match_id_in, - __u64 match_bits_in, - __u64 ignore_bits_in, + __u64 match_bits_in, + __u64 ignore_bits_in, lnet_unlink_t unlink_in, lnet_ins_pos_t pos_in, lnet_handle_me_t *handle_out); int LNetMEInsert(lnet_handle_me_t current_in, lnet_process_id_t match_id_in, - __u64 match_bits_in, - __u64 ignore_bits_in, + __u64 match_bits_in, + __u64 ignore_bits_in, lnet_unlink_t unlink_in, lnet_ins_pos_t position_in, lnet_handle_me_t *handle_out); @@ -128,11 +122,11 @@ int LNetMEUnlink(lnet_handle_me_t current_in); * associated with a MD: LNetMDUnlink(). * @{ */ int LNetMDAttach(lnet_handle_me_t current_in, - lnet_md_t md_in, + lnet_md_t md_in, lnet_unlink_t unlink_in, lnet_handle_md_t *handle_out); -int LNetMDBind(lnet_md_t md_in, +int LNetMDBind(lnet_md_t md_in, lnet_unlink_t unlink_in, lnet_handle_md_t *handle_out); @@ -170,14 +164,15 @@ int LNetEQFree(lnet_handle_eq_t eventq_in); int LNetEQGet(lnet_handle_eq_t eventq_in, lnet_event_t *event_out); + int LNetEQWait(lnet_handle_eq_t eventq_in, lnet_event_t *event_out); int LNetEQPoll(lnet_handle_eq_t *eventqs_in, - int neq_in, - int timeout_ms, + int neq_in, + int timeout_ms, lnet_event_t *event_out, - int *which_eq_out); + int *which_eq_out); /** @} lnet_eq */ /** \defgroup lnet_data Data movement operations @@ -185,23 +180,24 @@ int LNetEQPoll(lnet_handle_eq_t *eventqs_in, * The LNet API provides two data movement operations: LNetPut() * and LNetGet(). * @{ */ -int LNetPut(lnet_nid_t self, +int LNetPut(lnet_nid_t self, lnet_handle_md_t md_in, lnet_ack_req_t ack_req_in, lnet_process_id_t target_in, unsigned int portal_in, - __u64 match_bits_in, + __u64 match_bits_in, unsigned int offset_in, - __u64 hdr_data_in); + __u64 hdr_data_in); -int LNetGet(lnet_nid_t self, +int LNetGet(lnet_nid_t self, lnet_handle_md_t md_in, lnet_process_id_t target_in, unsigned int portal_in, - __u64 match_bits_in, + __u64 match_bits_in, unsigned int offset_in); /** @} lnet_data */ + /** \defgroup lnet_misc Miscellaneous operations. * Miscellaneous operations. * @{ */ @@ -209,7 +205,6 @@ int LNetGet(lnet_nid_t self, int LNetSetLazyPortal(int portal); int LNetClearLazyPortal(int portal); int LNetCtl(unsigned int cmd, void *arg); -int LNetSetAsync(lnet_process_id_t id, int nasync); /** @} lnet_misc */ diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index c00a2ca..5eacae4 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,56 +23,46 @@ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2011, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. * * lnet/include/lnet/lib-lnet.h - * - * Top level include for library side routines */ #ifndef __LNET_LIB_LNET_H__ #define __LNET_LIB_LNET_H__ -#include "linux/lib-lnet.h" #include "../libcfs/libcfs.h" -#include "types.h" +#include "api.h" #include "lnet.h" #include "lib-types.h" -extern lnet_t the_lnet; /* THE network */ - -#if defined(LNET_USE_LIB_FREELIST) -/* 1 CPT, simplify implementation... */ -# define LNET_CPT_MAX_BITS 0 - -#else /* KERNEL and no freelist */ +extern lnet_t the_lnet; /* THE network */ -# if (BITS_PER_LONG == 32) +#if (BITS_PER_LONG == 32) /* 2 CPTs, allowing more CPTs might make us under memory pressure */ -# define LNET_CPT_MAX_BITS 1 +# define LNET_CPT_MAX_BITS 1 -# else /* 64-bit system */ +#else /* 64-bit system */ /* * 256 CPTs for thousands of CPUs, allowing more CPTs might make us * under risk of consuming all lh_cookie. */ -# define LNET_CPT_MAX_BITS 8 -# endif /* BITS_PER_LONG == 32 */ -#endif +# define LNET_CPT_MAX_BITS 8 +#endif /* BITS_PER_LONG == 32 */ /* max allowed CPT number */ -#define LNET_CPT_MAX (1 << LNET_CPT_MAX_BITS) +#define LNET_CPT_MAX (1 << LNET_CPT_MAX_BITS) -#define LNET_CPT_NUMBER (the_lnet.ln_cpt_number) -#define LNET_CPT_BITS (the_lnet.ln_cpt_bits) -#define LNET_CPT_MASK ((1ULL << LNET_CPT_BITS) - 1) +#define LNET_CPT_NUMBER (the_lnet.ln_cpt_number) +#define LNET_CPT_BITS (the_lnet.ln_cpt_bits) +#define LNET_CPT_MASK ((1ULL << LNET_CPT_BITS) - 1) /** exclusive lock */ -#define LNET_LOCK_EX CFS_PERCPT_LOCK_EX +#define LNET_LOCK_EX CFS_PERCPT_LOCK_EX static inline int lnet_is_wire_handle_none(lnet_handle_wire_t *wh) { @@ -177,191 +163,9 @@ lnet_net_lock_current(void) #define MAX_PORTALS 64 -/* these are only used by code with LNET_USE_LIB_FREELIST, but we still - * exported them to !LNET_USE_LIB_FREELIST for easy implementation */ -#define LNET_FL_MAX_MES 2048 -#define LNET_FL_MAX_MDS 2048 -#define LNET_FL_MAX_EQS 512 -#define LNET_FL_MAX_MSGS 2048 /* Outstanding messages */ - -#ifdef LNET_USE_LIB_FREELIST - -int lnet_freelist_init(lnet_freelist_t *fl, int n, int size); -void lnet_freelist_fini(lnet_freelist_t *fl); - -static inline void * -lnet_freelist_alloc(lnet_freelist_t *fl) -{ - /* ALWAYS called with liblock held */ - lnet_freeobj_t *o; - - if (list_empty(&fl->fl_list)) - return NULL; - - o = list_entry(fl->fl_list.next, lnet_freeobj_t, fo_list); - list_del(&o->fo_list); - return (void *)&o->fo_contents; -} - -static inline void -lnet_freelist_free(lnet_freelist_t *fl, void *obj) -{ - /* ALWAYS called with liblock held */ - lnet_freeobj_t *o = list_entry(obj, lnet_freeobj_t, fo_contents); - - list_add(&o->fo_list, &fl->fl_list); -} - static inline lnet_eq_t * lnet_eq_alloc(void) { - /* NEVER called with resource lock held */ - struct lnet_res_container *rec = &the_lnet.ln_eq_container; - lnet_eq_t *eq; - - LASSERT(LNET_CPT_NUMBER == 1); - - lnet_res_lock(0); - eq = (lnet_eq_t *)lnet_freelist_alloc(&rec->rec_freelist); - lnet_res_unlock(0); - - return eq; -} - -static inline void -lnet_eq_free_locked(lnet_eq_t *eq) -{ - /* ALWAYS called with resource lock held */ - struct lnet_res_container *rec = &the_lnet.ln_eq_container; - - LASSERT(LNET_CPT_NUMBER == 1); - lnet_freelist_free(&rec->rec_freelist, eq); -} - -static inline void -lnet_eq_free(lnet_eq_t *eq) -{ - lnet_res_lock(0); - lnet_eq_free_locked(eq); - lnet_res_unlock(0); -} - -static inline lnet_libmd_t * -lnet_md_alloc(lnet_md_t *umd) -{ - /* NEVER called with resource lock held */ - struct lnet_res_container *rec = the_lnet.ln_md_containers[0]; - lnet_libmd_t *md; - - LASSERT(LNET_CPT_NUMBER == 1); - - lnet_res_lock(0); - md = (lnet_libmd_t *)lnet_freelist_alloc(&rec->rec_freelist); - lnet_res_unlock(0); - - if (md != NULL) - INIT_LIST_HEAD(&md->md_list); - - return md; -} - -static inline void -lnet_md_free_locked(lnet_libmd_t *md) -{ - /* ALWAYS called with resource lock held */ - struct lnet_res_container *rec = the_lnet.ln_md_containers[0]; - - LASSERT(LNET_CPT_NUMBER == 1); - lnet_freelist_free(&rec->rec_freelist, md); -} - -static inline void -lnet_md_free(lnet_libmd_t *md) -{ - lnet_res_lock(0); - lnet_md_free_locked(md); - lnet_res_unlock(0); -} - -static inline lnet_me_t * -lnet_me_alloc(void) -{ - /* NEVER called with resource lock held */ - struct lnet_res_container *rec = the_lnet.ln_me_containers[0]; - lnet_me_t *me; - - LASSERT(LNET_CPT_NUMBER == 1); - - lnet_res_lock(0); - me = (lnet_me_t *)lnet_freelist_alloc(&rec->rec_freelist); - lnet_res_unlock(0); - - return me; -} - -static inline void -lnet_me_free_locked(lnet_me_t *me) -{ - /* ALWAYS called with resource lock held */ - struct lnet_res_container *rec = the_lnet.ln_me_containers[0]; - - LASSERT(LNET_CPT_NUMBER == 1); - lnet_freelist_free(&rec->rec_freelist, me); -} - -static inline void -lnet_me_free(lnet_me_t *me) -{ - lnet_res_lock(0); - lnet_me_free_locked(me); - lnet_res_unlock(0); -} - -static inline lnet_msg_t * -lnet_msg_alloc(void) -{ - /* NEVER called with network lock held */ - struct lnet_msg_container *msc = the_lnet.ln_msg_containers[0]; - lnet_msg_t *msg; - - LASSERT(LNET_CPT_NUMBER == 1); - - lnet_net_lock(0); - msg = (lnet_msg_t *)lnet_freelist_alloc(&msc->msc_freelist); - lnet_net_unlock(0); - - if (msg != NULL) { - /* NULL pointers, clear flags etc */ - memset(msg, 0, sizeof(*msg)); - } - return msg; -} - -static inline void -lnet_msg_free_locked(lnet_msg_t *msg) -{ - /* ALWAYS called with network lock held */ - struct lnet_msg_container *msc = the_lnet.ln_msg_containers[0]; - - LASSERT(LNET_CPT_NUMBER == 1); - LASSERT(!msg->msg_onactivelist); - lnet_freelist_free(&msc->msc_freelist, msg); -} - -static inline void -lnet_msg_free(lnet_msg_t *msg) -{ - lnet_net_lock(0); - lnet_msg_free_locked(msg); - lnet_net_unlock(0); -} - -#else /* !LNET_USE_LIB_FREELIST */ - -static inline lnet_eq_t * -lnet_eq_alloc(void) -{ - /* NEVER called with liblock held */ lnet_eq_t *eq; LIBCFS_ALLOC(eq, sizeof(*eq)); @@ -371,14 +175,12 @@ lnet_eq_alloc(void) static inline void lnet_eq_free(lnet_eq_t *eq) { - /* ALWAYS called with resource lock held */ LIBCFS_FREE(eq, sizeof(*eq)); } static inline lnet_libmd_t * lnet_md_alloc(lnet_md_t *umd) { - /* NEVER called with liblock held */ lnet_libmd_t *md; unsigned int size; unsigned int niov; @@ -407,7 +209,6 @@ lnet_md_alloc(lnet_md_t *umd) static inline void lnet_md_free(lnet_libmd_t *md) { - /* ALWAYS called with resource lock held */ unsigned int size; if ((md->md_options & LNET_MD_KIOV) != 0) @@ -421,7 +222,6 @@ lnet_md_free(lnet_libmd_t *md) static inline lnet_me_t * lnet_me_alloc(void) { - /* NEVER called with liblock held */ lnet_me_t *me; LIBCFS_ALLOC(me, sizeof(*me)); @@ -431,14 +231,12 @@ lnet_me_alloc(void) static inline void lnet_me_free(lnet_me_t *me) { - /* ALWAYS called with resource lock held */ LIBCFS_FREE(me, sizeof(*me)); } static inline lnet_msg_t * lnet_msg_alloc(void) { - /* NEVER called with liblock held */ lnet_msg_t *msg; LIBCFS_ALLOC(msg, sizeof(*msg)); @@ -450,18 +248,10 @@ lnet_msg_alloc(void) static inline void lnet_msg_free(lnet_msg_t *msg) { - /* ALWAYS called with network lock held */ LASSERT(!msg->msg_onactivelist); LIBCFS_FREE(msg, sizeof(*msg)); } -#define lnet_eq_free_locked(eq) lnet_eq_free(eq) -#define lnet_md_free_locked(md) lnet_md_free(md) -#define lnet_me_free_locked(me) lnet_me_free(me) -#define lnet_msg_free_locked(msg) lnet_msg_free(msg) - -#endif /* LNET_USE_LIB_FREELIST */ - lnet_libhandle_t *lnet_res_lh_lookup(struct lnet_res_container *rec, __u64 cookie); void lnet_res_lh_initialize(struct lnet_res_container *rec, @@ -644,6 +434,9 @@ lnet_ni_t *lnet_nid2ni_locked(lnet_nid_t nid, int cpt); lnet_ni_t *lnet_net2ni_locked(__u32 net, int cpt); lnet_ni_t *lnet_net2ni(__u32 net); +int lnet_init(void); +void lnet_fini(void); + int lnet_notify(lnet_ni_t *ni, lnet_nid_t peer, int alive, unsigned long when); void lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, unsigned long when); @@ -737,7 +530,9 @@ void lnet_recv(lnet_ni_t *ni, void *private, lnet_msg_t *msg, int delayed, unsigned int offset, unsigned int mlen, unsigned int rlen); lnet_msg_t *lnet_create_reply_msg(lnet_ni_t *ni, lnet_msg_t *get_msg); void lnet_set_reply_msg_len(lnet_ni_t *ni, lnet_msg_t *msg, unsigned int len); + void lnet_finalize(lnet_ni_t *ni, lnet_msg_t *msg, int rc); + void lnet_drop_delayed_msg_list(struct list_head *head, char *reason); void lnet_recv_delayed_msg_list(struct list_head *head); @@ -887,12 +682,12 @@ void lnet_peer_tables_destroy(void); int lnet_peer_tables_create(void); void lnet_debug_peer(lnet_nid_t nid); -static inline void lnet_peer_set_alive(lnet_peer_t *lp) +static inline void +lnet_peer_set_alive(lnet_peer_t *lp) { lp->lp_last_alive = lp->lp_last_query = get_seconds(); if (!lp->lp_alive) lnet_notify_locked(lp, 0, 1, lp->lp_last_alive); } - #endif diff --git a/drivers/staging/lustre/include/linux/lnet/lib-types.h b/drivers/staging/lustre/include/linux/lnet/lib-types.h index 5053766..87acf14 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-types.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-types.h @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,155 +23,42 @@ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. * * lnet/include/lnet/lib-types.h - * - * Types used by the library side routines that do not need to be - * exposed to the user application */ #ifndef __LNET_LIB_TYPES_H__ #define __LNET_LIB_TYPES_H__ -#include "linux/lib-types.h" - -#include "../libcfs/libcfs.h" -#include -#include "types.h" - -#define WIRE_ATTR __attribute__((packed)) - -/* Packed version of lnet_process_id_t to transfer via network */ -typedef struct { - lnet_nid_t nid; - lnet_pid_t pid; /* node id / process id */ -} WIRE_ATTR lnet_process_id_packed_t; - -/* The wire handle's interface cookie only matches one network interface in - * one epoch (i.e. new cookie when the interface restarts or the node - * reboots). The object cookie only matches one object on that interface - * during that object's lifetime (i.e. no cookie re-use). */ -typedef struct { - __u64 wh_interface_cookie; - __u64 wh_object_cookie; -} WIRE_ATTR lnet_handle_wire_t; - -typedef enum { - LNET_MSG_ACK = 0, - LNET_MSG_PUT, - LNET_MSG_GET, - LNET_MSG_REPLY, - LNET_MSG_HELLO, -} lnet_msg_type_t; - -/* The variant fields of the portals message header are aligned on an 8 - * byte boundary in the message header. Note that all types used in these - * wire structs MUST be fixed size and the smaller types are placed at the - * end. */ -typedef struct lnet_ack { - lnet_handle_wire_t dst_wmd; - __u64 match_bits; - __u32 mlength; -} WIRE_ATTR lnet_ack_t; - -typedef struct lnet_put { - lnet_handle_wire_t ack_wmd; - __u64 match_bits; - __u64 hdr_data; - __u32 ptl_index; - __u32 offset; -} WIRE_ATTR lnet_put_t; - -typedef struct lnet_get { - lnet_handle_wire_t return_wmd; - __u64 match_bits; - __u32 ptl_index; - __u32 src_offset; - __u32 sink_length; -} WIRE_ATTR lnet_get_t; - -typedef struct lnet_reply { - lnet_handle_wire_t dst_wmd; -} WIRE_ATTR lnet_reply_t; - -typedef struct lnet_hello { - __u64 incarnation; - __u32 type; -} WIRE_ATTR lnet_hello_t; +#include +#include +#include +#include -typedef struct { - lnet_nid_t dest_nid; - lnet_nid_t src_nid; - lnet_pid_t dest_pid; - lnet_pid_t src_pid; - __u32 type; /* lnet_msg_type_t */ - __u32 payload_length; /* payload data to follow */ - /*<------__u64 aligned------->*/ - union { - lnet_ack_t ack; - lnet_put_t put; - lnet_get_t get; - lnet_reply_t reply; - lnet_hello_t hello; - } msg; -} WIRE_ATTR lnet_hdr_t; - -/* A HELLO message contains a magic number and protocol version - * code in the header's dest_nid, the peer's NID in the src_nid, and - * LNET_MSG_HELLO in the type field. All other common fields are zero - * (including payload_size; i.e. no payload). - * This is for use by byte-stream LNDs (e.g. TCP/IP) to check the peer is - * running the same protocol and to find out its NID. These LNDs should - * exchange HELLO messages when a connection is first established. Individual - * LNDs can put whatever else they fancy in lnet_hdr_t::msg. - */ -typedef struct { - __u32 magic; /* LNET_PROTO_TCP_MAGIC */ - __u16 version_major; /* increment on incompatible change */ - __u16 version_minor; /* increment on compatible change */ -} WIRE_ATTR lnet_magicversion_t; - -/* PROTO MAGIC for LNDs */ -#define LNET_PROTO_IB_MAGIC 0x0be91b91 -#define LNET_PROTO_RA_MAGIC 0x0be91b92 -#define LNET_PROTO_QSW_MAGIC 0x0be91b93 -#define LNET_PROTO_GNI_MAGIC 0xb00fbabe /* ask Kim */ -#define LNET_PROTO_TCP_MAGIC 0xeebc0ded -#define LNET_PROTO_PTL_MAGIC 0x50746C4E /* 'PtlN' unique magic */ -#define LNET_PROTO_MX_MAGIC 0x4d583130 /* 'MX10'! */ -#define LNET_PROTO_ACCEPTOR_MAGIC 0xacce7100 -#define LNET_PROTO_PING_MAGIC 0x70696E67 /* 'ping' */ - -/* Placeholder for a future "unified" protocol across all LNDs */ -/* Current LNDs that receive a request with this magic will respond with a - * "stub" reply using their current protocol */ -#define LNET_PROTO_MAGIC 0x45726963 /* ! */ - -#define LNET_PROTO_TCP_VERSION_MAJOR 1 -#define LNET_PROTO_TCP_VERSION_MINOR 0 - -/* Acceptor connection request */ -typedef struct { - __u32 acr_magic; /* PTL_ACCEPTOR_PROTO_MAGIC */ - __u32 acr_version; /* protocol version */ - __u64 acr_nid; /* target NID */ -} WIRE_ATTR lnet_acceptor_connreq_t; +#include "lnetctl.h" -#define LNET_PROTO_ACCEPTOR_VERSION 1 +/* Max payload size */ +# define LNET_MAX_PAYLOAD CONFIG_LNET_MAX_PAYLOAD +# if (LNET_MAX_PAYLOAD < LNET_MTU) +# error "LNET_MAX_PAYLOAD too small - error in configure --with-max-payload-mb" +# elif (LNET_MAX_PAYLOAD > (PAGE_SIZE * LNET_MAX_IOV)) +# error "LNET_MAX_PAYLOAD too large - error in configure --with-max-payload-mb" +# endif /* forward refs */ struct lnet_libmd; typedef struct lnet_msg { - struct list_head msg_activelist; - struct list_head msg_list; /* Q for credits/MD */ + struct list_head msg_activelist; + /* Q for credits/MD */ + struct list_head msg_list; - lnet_process_id_t msg_target; + lnet_process_id_t msg_target; /* where is it from, it's only for building event */ lnet_nid_t msg_from; __u32 msg_type; @@ -195,110 +78,115 @@ typedef struct lnet_msg { /* ready for pending on RX delay list */ unsigned int msg_rx_ready_delay:1; - unsigned int msg_vmflush:1; /* VM trying to free memory */ - unsigned int msg_target_is_router:1; /* sending to a router */ - unsigned int msg_routing:1; /* being forwarded */ - unsigned int msg_ack:1; /* ack on finalize (PUT) */ - unsigned int msg_sending:1; /* outgoing message */ - unsigned int msg_receiving:1; /* being received */ - unsigned int msg_txcredit:1; /* taken an NI send credit */ - unsigned int msg_peertxcredit:1; /* taken a peer send credit */ - unsigned int msg_rtrcredit:1; /* taken a global router credit */ - unsigned int msg_peerrtrcredit:1; /* taken a peer router credit */ - unsigned int msg_onactivelist:1; /* on the activelist */ - - struct lnet_peer *msg_txpeer; /* peer I'm sending to */ - struct lnet_peer *msg_rxpeer; /* peer I received from */ - - void *msg_private; - struct lnet_libmd *msg_md; - - unsigned int msg_len; - unsigned int msg_wanted; - unsigned int msg_offset; - unsigned int msg_niov; - struct kvec *msg_iov; - lnet_kiov_t *msg_kiov; - - lnet_event_t msg_ev; - lnet_hdr_t msg_hdr; + /* VM trying to free memory */ + unsigned int msg_vmflush:1; + /* sending to a router */ + unsigned int msg_target_is_router:1; + /* being forwarded */ + unsigned int msg_routing:1; + /* ack on finalize (PUT) */ + unsigned int msg_ack:1; + /* outgoing message */ + unsigned int msg_sending:1; + /* being received */ + unsigned int msg_receiving:1; + /* taken an NI send credit */ + unsigned int msg_txcredit:1; + /* taken a peer send credit */ + unsigned int msg_peertxcredit:1; + /* taken a global router credit */ + unsigned int msg_rtrcredit:1; + /* taken a peer router credit */ + unsigned int msg_peerrtrcredit:1; + /* on the activelist */ + unsigned int msg_onactivelist:1; + + /* peer I'm sending to */ + struct lnet_peer *msg_txpeer; + /* peer I received from */ + struct lnet_peer *msg_rxpeer; + + void *msg_private; + struct lnet_libmd *msg_md; + + unsigned int msg_len; + unsigned int msg_wanted; + unsigned int msg_offset; + unsigned int msg_niov; + struct kvec *msg_iov; + lnet_kiov_t *msg_kiov; + + lnet_event_t msg_ev; + lnet_hdr_t msg_hdr; } lnet_msg_t; typedef struct lnet_libhandle { - struct list_head lh_hash_chain; - __u64 lh_cookie; + struct list_head lh_hash_chain; + __u64 lh_cookie; } lnet_libhandle_t; #define lh_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(char *)(&((type *)0)->member))) typedef struct lnet_eq { - struct list_head eq_list; + struct list_head eq_list; lnet_libhandle_t eq_lh; lnet_seq_t eq_enq_seq; lnet_seq_t eq_deq_seq; unsigned int eq_size; lnet_eq_handler_t eq_callback; lnet_event_t *eq_events; - int **eq_refs; /* percpt refcount for EQ */ + /* percpt refcount for EQ */ + int **eq_refs; } lnet_eq_t; typedef struct lnet_me { - struct list_head me_list; - lnet_libhandle_t me_lh; - lnet_process_id_t me_match_id; - unsigned int me_portal; - unsigned int me_pos; /* hash offset in mt_hash */ - __u64 me_match_bits; - __u64 me_ignore_bits; - lnet_unlink_t me_unlink; - struct lnet_libmd *me_md; + struct list_head me_list; + lnet_libhandle_t me_lh; + lnet_process_id_t me_match_id; + unsigned int me_portal; + /* hash offset in mt_hash */ + unsigned int me_pos; + __u64 me_match_bits; + __u64 me_ignore_bits; + lnet_unlink_t me_unlink; + struct lnet_libmd *me_md; } lnet_me_t; typedef struct lnet_libmd { - struct list_head md_list; - lnet_libhandle_t md_lh; - lnet_me_t *md_me; - char *md_start; - unsigned int md_offset; - unsigned int md_length; - unsigned int md_max_size; - int md_threshold; - int md_refcount; - unsigned int md_options; - unsigned int md_flags; - void *md_user_ptr; - lnet_eq_t *md_eq; - unsigned int md_niov; /* # frags */ + struct list_head md_list; + lnet_libhandle_t md_lh; + lnet_me_t *md_me; + char *md_start; + unsigned int md_offset; + unsigned int md_length; + unsigned int md_max_size; + int md_threshold; + int md_refcount; + unsigned int md_options; + unsigned int md_flags; + void *md_user_ptr; + lnet_eq_t *md_eq; + /* # frags */ + unsigned int md_niov; union { - struct kvec iov[LNET_MAX_IOV]; - lnet_kiov_t kiov[LNET_MAX_IOV]; + struct kvec iov[LNET_MAX_IOV]; + lnet_kiov_t kiov[LNET_MAX_IOV]; } md_iov; } lnet_libmd_t; -#define LNET_MD_FLAG_ZOMBIE (1 << 0) -#define LNET_MD_FLAG_AUTO_UNLINK (1 << 1) -#define LNET_MD_FLAG_ABORTED (1 << 2) +#define LNET_MD_FLAG_ZOMBIE (1 << 0) +#define LNET_MD_FLAG_AUTO_UNLINK (1 << 1) +#define LNET_MD_FLAG_ABORTED (1 << 2) -#ifdef LNET_USE_LIB_FREELIST +/* info about peers we are trying to fail */ typedef struct { - void *fl_objs; /* single contiguous array of objects */ - int fl_nobjs; /* the number of them */ - int fl_objsize; /* the size (including overhead) of each of them */ - struct list_head fl_list; /* where they are enqueued */ -} lnet_freelist_t; - -typedef struct { - struct list_head fo_list; /* enqueue on fl_list */ - void *fo_contents; /* aligned contents */ -} lnet_freeobj_t; -#endif - -typedef struct { - /* info about peers we are trying to fail */ - struct list_head tp_list; /* ln_test_peers */ - lnet_nid_t tp_nid; /* matching nid */ - unsigned int tp_threshold; /* # failures to simulate */ + /* ln_test_peers */ + struct list_head tp_list; + /* matching nid */ + lnet_nid_t tp_nid; + /* # failures to simulate */ + unsigned int tp_threshold; } lnet_test_peer_t; #define LNET_COOKIE_TYPE_MD 1 @@ -307,15 +195,17 @@ typedef struct { #define LNET_COOKIE_TYPE_BITS 2 #define LNET_COOKIE_MASK ((1ULL << LNET_COOKIE_TYPE_BITS) - 1ULL) -struct lnet_ni; /* forward ref */ +struct lnet_ni; /* forward ref */ +/* fields managed by portals */ typedef struct lnet_lnd { - /* fields managed by portals */ - struct list_head lnd_list; /* stash in the LND table */ - int lnd_refcount; /* # active instances */ + /* stash in the LND table */ + struct list_head lnd_list; + /* # active instances */ + int lnd_refcount; /* fields initialised by the LND */ - unsigned int lnd_type; + __u32 lnd_type; int (*lnd_startup)(struct lnet_ni *ni); void (*lnd_shutdown)(struct lnet_ni *ni); @@ -366,47 +256,57 @@ typedef struct lnet_lnd { /* accept a new connection */ int (*lnd_accept)(struct lnet_ni *ni, struct socket *sock); - } lnd_t; -#define LNET_NI_STATUS_UP 0x15aac0de -#define LNET_NI_STATUS_DOWN 0xdeadface -#define LNET_NI_STATUS_INVALID 0x00000000 typedef struct { - lnet_nid_t ns_nid; - __u32 ns_status; - __u32 ns_unused; + lnet_nid_t ns_nid; + __u32 ns_status; + __u32 ns_unused; } WIRE_ATTR lnet_ni_status_t; struct lnet_tx_queue { - int tq_credits; /* # tx credits free */ - int tq_credits_min; /* lowest it's been */ - int tq_credits_max; /* total # tx credits */ - struct list_head tq_delayed; /* delayed TXs */ + /* # tx credits free */ + int tq_credits; + /* lowest it's been */ + int tq_credits_min; + /* total # tx credits */ + int tq_credits_max; + /* delayed TXs */ + struct list_head tq_delayed; }; -#define LNET_MAX_INTERFACES 16 - typedef struct lnet_ni { spinlock_t ni_lock; - struct list_head ni_list; /* chain on ln_nis */ - struct list_head ni_cptlist; /* chain on ln_nis_cpt */ - int ni_maxtxcredits; /* # tx credits */ + /* chain on ln_nis */ + struct list_head ni_list; + /* chain on ln_nis_cpt */ + struct list_head ni_cptlist; + /* # tx credits */ + int ni_maxtxcredits; /* # per-peer send credits */ int ni_peertxcredits; /* # per-peer router buffer credits */ int ni_peerrtrcredits; /* seconds to consider peer dead */ int ni_peertimeout; - int ni_ncpts; /* number of CPTs */ - __u32 *ni_cpts; /* bond NI on some CPTs */ - lnet_nid_t ni_nid; /* interface's NID */ - void *ni_data; /* instance-specific data */ - lnd_t *ni_lnd; /* procedural interface */ - struct lnet_tx_queue **ni_tx_queues; /* percpt TX queues */ - int **ni_refs; /* percpt reference count */ - long ni_last_alive; /* when I was last alive */ - lnet_ni_status_t *ni_status; /* my health status */ + /* number of CPTs */ + int ni_ncpts; + /* bond NI on some CPTs */ + __u32 *ni_cpts; + /* interface's NID */ + lnet_nid_t ni_nid; + /* instance-specific data */ + void *ni_data; + /* procedural interface */ + lnd_t *ni_lnd; + /* percpt TX queues */ + struct lnet_tx_queue **ni_tx_queues; + /* percpt reference count */ + int **ni_refs; + /* when I was last alive */ + long ni_last_alive; + /* my health status */ + lnet_ni_status_t *ni_status; /* equivalent interfaces to use */ char *ni_interfaces[LNET_MAX_INTERFACES]; } lnet_ni_t; @@ -435,43 +335,72 @@ typedef struct { #define LNET_PINGINFO_SIZE offsetof(lnet_ping_info_t, pi_ni[LNET_MAX_RTR_NIS]) typedef struct { /* chain on the_lnet.ln_zombie_rcd or ln_deathrow_rcd */ - struct list_head rcd_list; - lnet_handle_md_t rcd_mdh; /* ping buffer MD */ - struct lnet_peer *rcd_gateway; /* reference to gateway */ - lnet_ping_info_t *rcd_pinginfo; /* ping buffer */ + struct list_head rcd_list; + /* ping buffer MD */ + lnet_handle_md_t rcd_mdh; + /* reference to gateway */ + struct lnet_peer *rcd_gateway; + /* ping buffer */ + lnet_ping_info_t *rcd_pinginfo; } lnet_rc_data_t; typedef struct lnet_peer { - struct list_head lp_hashlist; /* chain on peer hash */ - struct list_head lp_txq; /* messages blocking for tx credits */ - struct list_head lp_rtrq; /* messages blocking for router credits */ - struct list_head lp_rtr_list; /* chain on router list */ - int lp_txcredits; /* # tx credits available */ - int lp_mintxcredits; /* low water mark */ - int lp_rtrcredits; /* # router credits */ - int lp_minrtrcredits; /* low water mark */ - unsigned int lp_alive:1; /* alive/dead? */ - unsigned int lp_notify:1; /* notification outstanding? */ - unsigned int lp_notifylnd:1; /* outstanding notification for LND? */ - unsigned int lp_notifying:1; /* some thread is handling notification */ - unsigned int lp_ping_notsent; /* SEND event outstanding from ping */ - int lp_alive_count; /* # times router went dead<->alive */ - long lp_txqnob; /* bytes queued for sending */ - unsigned long lp_timestamp; /* time of last aliveness news */ - unsigned long lp_ping_timestamp; /* time of last ping attempt */ - unsigned long lp_ping_deadline; /* != 0 if ping reply expected */ - unsigned long lp_last_alive; /* when I was last alive */ - unsigned long lp_last_query; /* when lp_ni was queried last time */ - lnet_ni_t *lp_ni; /* interface peer is on */ - lnet_nid_t lp_nid; /* peer's NID */ - int lp_refcount; /* # refs */ - int lp_cpt; /* CPT this peer attached on */ + /* chain on peer hash */ + struct list_head lp_hashlist; + /* messages blocking for tx credits */ + struct list_head lp_txq; + /* messages blocking for router credits */ + struct list_head lp_rtrq; + /* chain on router list */ + struct list_head lp_rtr_list; + /* # tx credits available */ + int lp_txcredits; + /* low water mark */ + int lp_mintxcredits; + /* # router credits */ + int lp_rtrcredits; + /* low water mark */ + int lp_minrtrcredits; + /* alive/dead? */ + unsigned int lp_alive:1; + /* notification outstanding? */ + unsigned int lp_notify:1; + /* outstanding notification for LND? */ + unsigned int lp_notifylnd:1; + /* some thread is handling notification */ + unsigned int lp_notifying:1; + /* SEND event outstanding from ping */ + unsigned int lp_ping_notsent; + /* # times router went dead<->alive */ + int lp_alive_count; + /* bytes queued for sending */ + long lp_txqnob; + /* time of last aliveness news */ + unsigned long lp_timestamp; + /* time of last ping attempt */ + unsigned long lp_ping_timestamp; + /* != 0 if ping reply expected */ + unsigned long lp_ping_deadline; + /* when I was last alive */ + unsigned long lp_last_alive; + /* when lp_ni was queried last time */ + unsigned long lp_last_query; + /* interface peer is on */ + lnet_ni_t *lp_ni; + /* peer's NID */ + lnet_nid_t lp_nid; + /* # refs */ + int lp_refcount; + /* CPT this peer attached on */ + int lp_cpt; /* # refs from lnet_route_t::lr_gateway */ int lp_rtr_refcount; /* returned RC ping features */ unsigned int lp_ping_feats; - struct list_head lp_routes; /* routers on this peer */ - lnet_rc_data_t *lp_rcd; /* router checker state */ + /* routers on this peer */ + struct list_head lp_routes; + /* router checker state */ + lnet_rc_data_t *lp_rcd; } lnet_peer_t; /* peer hash size */ @@ -480,10 +409,14 @@ typedef struct lnet_peer { /* peer hash table */ struct lnet_peer_table { - int pt_version; /* /proc validity stamp */ - int pt_number; /* # peers extant */ - struct list_head pt_deathrow; /* zombie peers */ - struct list_head *pt_hash; /* NID->peer hash */ + /* /proc validity stamp */ + int pt_version; + /* # peers extant */ + int pt_number; + /* zombie peers */ + struct list_head pt_deathrow; + /* NID->peer hash */ + struct list_head *pt_hash; }; /* peer aliveness is enabled only on routers for peers in a network where the @@ -492,14 +425,22 @@ struct lnet_peer_table { (lp)->lp_ni->ni_peertimeout > 0) typedef struct { - struct list_head lr_list; /* chain on net */ - struct list_head lr_gwlist; /* chain on gateway */ - lnet_peer_t *lr_gateway; /* router node */ - __u32 lr_net; /* remote network number */ - int lr_seq; /* sequence for round-robin */ - unsigned int lr_downis; /* number of down NIs */ - unsigned int lr_hops; /* how far I am */ - unsigned int lr_priority; /* route priority */ + /* chain on net */ + struct list_head lr_list; + /* chain on gateway */ + struct list_head lr_gwlist; + /* router node */ + lnet_peer_t *lr_gateway; + /* remote network number */ + __u32 lr_net; + /* sequence for round-robin */ + int lr_seq; + /* number of down NIs */ + unsigned int lr_downis; + /* how far I am */ + unsigned int lr_hops; + /* route priority */ + unsigned int lr_priority; } lnet_route_t; #define LNET_REMOTE_NETS_HASH_DEFAULT (1U << 7) @@ -507,43 +448,41 @@ typedef struct { #define LNET_REMOTE_NETS_HASH_SIZE (1 << the_lnet.ln_remote_nets_hbits) typedef struct { - struct list_head lrn_list; /* chain on ln_remote_nets_hash */ - struct list_head lrn_routes; /* routes to me */ - __u32 lrn_net; /* my net number */ + /* chain on ln_remote_nets_hash */ + struct list_head lrn_list; + /* routes to me */ + struct list_head lrn_routes; + /* my net number */ + __u32 lrn_net; } lnet_remotenet_t; typedef struct { - struct list_head rbp_bufs; /* my free buffer pool */ - struct list_head rbp_msgs; /* messages blocking for a buffer */ - int rbp_npages; /* # pages in each buffer */ - int rbp_nbuffers; /* # buffers */ - int rbp_credits; /* # free buffers / blocked messages */ - int rbp_mincredits; /* low water mark */ + /* my free buffer pool */ + struct list_head rbp_bufs; + /* messages blocking for a buffer */ + struct list_head rbp_msgs; + /* # pages in each buffer */ + int rbp_npages; + /* # buffers */ + int rbp_nbuffers; + /* # free buffers / blocked messages */ + int rbp_credits; + /* low water mark */ + int rbp_mincredits; } lnet_rtrbufpool_t; typedef struct { - struct list_head rb_list; /* chain on rbp_bufs */ - lnet_rtrbufpool_t *rb_pool; /* owning pool */ - lnet_kiov_t rb_kiov[0]; /* the buffer space */ + /* chain on rbp_bufs */ + struct list_head rb_list; + /* owning pool */ + lnet_rtrbufpool_t *rb_pool; + /* the buffer space */ + lnet_kiov_t rb_kiov[0]; } lnet_rtrbuf_t; -typedef struct { - __u32 msgs_alloc; - __u32 msgs_max; - __u32 errors; - __u32 send_count; - __u32 recv_count; - __u32 route_count; - __u32 drop_count; - __u64 send_length; - __u64 recv_length; - __u64 route_length; - __u64 drop_length; -} WIRE_ATTR lnet_counters_t; - -#define LNET_PEER_HASHSIZE 503 /* prime! */ - -#define LNET_NRBPOOLS 3 /* # different router buffer pools */ +#define LNET_PEER_HASHSIZE 503 /* prime! */ + +#define LNET_NRBPOOLS 3 /* # different router buffer pools */ enum { /* Didn't match anything */ @@ -559,9 +498,9 @@ enum { }; /* Options for lnet_portal_t::ptl_options */ -#define LNET_PTL_LAZY (1 << 0) -#define LNET_PTL_MATCH_UNIQUE (1 << 1) /* unique match, for RDMA */ -#define LNET_PTL_MATCH_WILDCARD (1 << 2) /* wildcard match, request portal */ +#define LNET_PTL_LAZY (1 << 0) +#define LNET_PTL_MATCH_UNIQUE (1 << 1) /* unique match, for RDMA */ +#define LNET_PTL_MATCH_WILDCARD (1 << 2) /* wildcard match, request portal */ /* parameter for matching operations (GET, PUT) */ struct lnet_match_info { @@ -591,13 +530,15 @@ struct lnet_match_info { struct lnet_match_table { /* reserved for upcoming patches, CPU partition ID */ unsigned int mt_cpt; - unsigned int mt_portal; /* portal index */ + /* portal index */ + unsigned int mt_portal; /* match table is set as "enabled" if there's non-exhausted MD * attached on mt_mhash, it's only valid for wildcard portal */ unsigned int mt_enabled; /* bitmap to flag whether MEs on mt_hash are exhausted or not */ __u64 mt_exhausted[LNET_MT_EXHAUSTED_BMAP]; - struct list_head *mt_mhash; /* matching hash */ + /* matching hash */ + struct list_head *mt_mhash; }; /* these are only useful for wildcard portal */ @@ -612,21 +553,22 @@ struct lnet_match_table { typedef struct lnet_portal { spinlock_t ptl_lock; - unsigned int ptl_index; /* portal ID, reserved */ + /* portal ID, reserved */ + unsigned int ptl_index; /* flags on this portal: lazy, unique... */ unsigned int ptl_options; /* list of messages which are stealing buffer */ - struct list_head ptl_msg_stealing; + struct list_head ptl_msg_stealing; /* messages blocking for MD */ - struct list_head ptl_msg_delayed; + struct list_head ptl_msg_delayed; /* Match table for each CPT */ struct lnet_match_table **ptl_mtables; /* spread rotor of incoming "PUT" */ unsigned int ptl_rotor; /* # active entries for this portal */ - int ptl_mt_nmaps; + int ptl_mt_nmaps; /* array of active entries' cpu-partition-id */ - int ptl_mt_maps[0]; + int ptl_mt_maps[0]; } lnet_portal_t; #define LNET_LH_HASH_BITS 12 @@ -635,28 +577,28 @@ typedef struct lnet_portal { /* resource container (ME, MD, EQ) */ struct lnet_res_container { - unsigned int rec_type; /* container type */ - __u64 rec_lh_cookie; /* cookie generator */ - struct list_head rec_active; /* active resource list */ - struct list_head *rec_lh_hash; /* handle hash */ -#ifdef LNET_USE_LIB_FREELIST - lnet_freelist_t rec_freelist; /* freelist for resources */ -#endif + /* container type */ + unsigned int rec_type; + /* cookie generator */ + __u64 rec_lh_cookie; + /* active resource list */ + struct list_head rec_active; + /* handle hash */ + struct list_head *rec_lh_hash; }; /* message container */ struct lnet_msg_container { - int msc_init; /* initialized or not */ + /* initialized or not */ + int msc_init; /* max # threads finalizing */ int msc_nfinalizers; /* msgs waiting to complete finalizing */ - struct list_head msc_finalizing; - struct list_head msc_active; /* active message list */ + struct list_head msc_finalizing; + /* active message list */ + struct list_head msc_active; /* threads doing finalization */ void **msc_finalizers; -#ifdef LNET_USE_LIB_FREELIST - lnet_freelist_t msc_freelist; /* freelist for messages */ -#endif }; /* Router Checker states */ @@ -684,7 +626,7 @@ typedef struct { /* Event Queue container */ struct lnet_res_container ln_eq_container; - wait_queue_head_t ln_eq_waitq; + wait_queue_head_t ln_eq_waitq; spinlock_t ln_eq_wait_lock; unsigned int ln_remote_nets_hbits; @@ -695,23 +637,25 @@ typedef struct { lnet_counters_t **ln_counters; struct lnet_peer_table **ln_peer_tables; /* failure simulation */ - struct list_head ln_test_peers; + struct list_head ln_test_peers; - struct list_head ln_nis; /* LND instances */ + /* LND instances */ + struct list_head ln_nis; /* NIs bond on specific CPT(s) */ - struct list_head ln_nis_cpt; + struct list_head ln_nis_cpt; /* dying LND instances */ - struct list_head ln_nis_zombie; - lnet_ni_t *ln_loni; /* the loopback NI */ + struct list_head ln_nis_zombie; + /* the loopback NI */ + lnet_ni_t *ln_loni; /* NI to wait for events in */ lnet_ni_t *ln_eq_waitni; /* remote networks with routes to them */ - struct list_head *ln_remote_nets_hash; + struct list_head *ln_remote_nets_hash; /* validity stamp */ __u64 ln_remote_nets_version; /* list of all known routers */ - struct list_head ln_routers; + struct list_head ln_routers; /* validity stamp */ __u64 ln_routers_version; /* percpt router buffer pools */ @@ -726,15 +670,16 @@ typedef struct { /* router checker's event queue */ lnet_handle_eq_t ln_rc_eqh; /* rcd still pending on net */ - struct list_head ln_rcd_deathrow; + struct list_head ln_rcd_deathrow; /* rcd ready for free */ - struct list_head ln_rcd_zombie; + struct list_head ln_rcd_zombie; /* serialise startup/shutdown */ struct semaphore ln_rc_signal; struct mutex ln_api_mutex; struct mutex ln_lnd_mutex; - int ln_init; /* LNetInit() called? */ + /* LNetInit() called? */ + int ln_init; /* Have I called LNetNIInit myself? */ int ln_niinit_self; /* LNetNIInit/LNetNIFini counter */ @@ -742,12 +687,14 @@ typedef struct { /* shutdown in progress */ int ln_shutdown; - int ln_routing; /* am I a router? */ - lnet_pid_t ln_pid; /* requested pid */ + /* am I a router? */ + int ln_routing; + /* requested pid */ + lnet_pid_t ln_pid; /* uniquely identifies this ni in this epoch */ __u64 ln_interface_cookie; /* registered LNDs */ - struct list_head ln_lnds; + struct list_head ln_lnds; /* space for network names */ char *ln_network_tokens; diff --git a/drivers/staging/lustre/include/linux/lnet/linux/api-support.h b/drivers/staging/lustre/include/linux/lnet/linux/api-support.h deleted file mode 100644 index e237ad6..0000000 --- a/drivers/staging/lustre/include/linux/lnet/linux/api-support.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LINUX_API_SUPPORT_H__ -#define __LINUX_API_SUPPORT_H__ - -#ifndef __LNET_API_SUPPORT_H__ -#error Do not #include this file directly. #include instead -#endif - -#endif diff --git a/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h deleted file mode 100644 index 0f8f04d..0000000 --- a/drivers/staging/lustre/include/linux/lnet/linux/lib-lnet.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LNET_LINUX_LIB_LNET_H__ -#define __LNET_LINUX_LIB_LNET_H__ - -#ifndef __LNET_LIB_LNET_H__ -#error Do not #include this file directly. #include instead -#endif - -# include -# include -# include -#include "../../libcfs/libcfs.h" - -static inline __u64 -lnet_page2phys(struct page *p) -{ - /* compiler optimizer will elide unused branches */ - - switch (sizeof(typeof(page_to_phys(p)))) { - case 4: - /* page_to_phys returns a 32 bit physical address. This must - * be a 32 bit machine with <= 4G memory and we must ensure we - * don't sign extend when converting to 64 bits. */ - return (unsigned long)page_to_phys(p); - - case 8: - /* page_to_phys returns a 64 bit physical address :) */ - return page_to_phys(p); - - default: - LBUG(); - return 0; - } -} - -#define LNET_ROUTER - -#endif /* __LNET_LINUX_LIB_LNET_H__ */ diff --git a/drivers/staging/lustre/include/linux/lnet/linux/lib-types.h b/drivers/staging/lustre/include/linux/lnet/linux/lib-types.h deleted file mode 100644 index 669e8c0..0000000 --- a/drivers/staging/lustre/include/linux/lnet/linux/lib-types.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LNET_LINUX_LIB_TYPES_H__ -#define __LNET_LINUX_LIB_TYPES_H__ - -#ifndef __LNET_LIB_TYPES_H__ -#error Do not #include this file directly. #include instead -#endif - -# include -# include - -#endif diff --git a/drivers/staging/lustre/include/linux/lnet/linux/lnet.h b/drivers/staging/lustre/include/linux/lnet/linux/lnet.h deleted file mode 100644 index 1e888f1..0000000 --- a/drivers/staging/lustre/include/linux/lnet/linux/lnet.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LNET_LINUX_LNET_H__ -#define __LNET_LINUX_LNET_H__ - -#ifndef __LNET_H__ -#error Do not #include this file directly. #include instead -#endif - -/* - * lnet.h - * - * User application interface file - */ - -#include -#include - -#define cfs_tcp_sendpage(sk, page, offset, size, flags) \ - tcp_sendpage(sk, page, offset, size, flags) - -#endif diff --git a/drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h b/drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h deleted file mode 100644 index 2dee1b9..0000000 --- a/drivers/staging/lustre/include/linux/lnet/lnet-sysctl.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LNET_SYSCTL_H__ -#define __LNET_SYSCTL_H__ - -#if defined(CONFIG_SYSCTL) - -#define CTL_KRANAL 201 -#define CTL_O2IBLND 205 -#define CTL_PTLLND 206 -#define CTL_QSWNAL 207 -#define CTL_SOCKLND 208 -#define CTL_GNILND 210 - -#endif - -#endif diff --git a/drivers/staging/lustre/include/linux/lnet/lnet.h b/drivers/staging/lustre/include/linux/lnet/lnet.h index 75c0ab9..a31b29c 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lnet.h @@ -26,10 +26,12 @@ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. */ #ifndef __LNET_H__ @@ -40,12 +42,7 @@ * * User application interface file */ -#include "linux/lnet.h" - #include "types.h" -#include "api.h" - -#define LNET_NIDSTR_COUNT 1024 /* # of nidstrings */ -#define LNET_NIDSTR_SIZE 32 /* size of each one (see below for usage) */ +#include "nidstr.h" #endif diff --git a/drivers/staging/lustre/include/linux/lnet/lnetctl.h b/drivers/staging/lustre/include/linux/lnet/lnetctl.h index 98181d3..2b82a06 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnetctl.h +++ b/drivers/staging/lustre/include/linux/lnet/lnetctl.h @@ -14,27 +14,29 @@ * along with Portals; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * header for libptlctl.a + * header for lnet ioctl */ -#ifndef _PTLCTL_H_ -#define _PTLCTL_H_ +/* + * Copyright (c) 2014, Intel Corporation. + */ +#ifndef _LNETCTL_H_ +#define _LNETCTL_H_ -#include "../libcfs/libcfs.h" #include "types.h" -#define LNET_DEV_ID 0 -#define LNET_DEV_PATH "/dev/lnet" -#define LNET_DEV_MAJOR 10 -#define LNET_DEV_MINOR 240 -#define OBD_DEV_ID 1 -#define OBD_DEV_NAME "obd" -#define OBD_DEV_PATH "/dev/" OBD_DEV_NAME -#define OBD_DEV_MAJOR 10 -#define OBD_DEV_MINOR 241 -#define SMFS_DEV_ID 2 -#define SMFS_DEV_PATH "/dev/snapdev" -#define SMFS_DEV_MAJOR 10 -#define SMFS_DEV_MINOR 242 +#define LNET_DEV_ID 0 +#define LNET_DEV_PATH "/dev/lnet" +#define LNET_DEV_MAJOR 10 +#define LNET_DEV_MINOR 240 +#define OBD_DEV_ID 1 +#define OBD_DEV_NAME "obd" +#define OBD_DEV_PATH "/dev/" OBD_DEV_NAME +#define OBD_DEV_MAJOR 10 +#define OBD_DEV_MINOR 241 +#define SMFS_DEV_ID 2 +#define SMFS_DEV_PATH "/dev/snapdev" +#define SMFS_DEV_MAJOR 10 +#define SMFS_DEV_MINOR 242 int ptl_initialize(int argc, char **argv); int jt_ptl_network(int argc, char **argv); diff --git a/drivers/staging/lustre/include/linux/lnet/lnetst.h b/drivers/staging/lustre/include/linux/lnet/lnetst.h index 885f708..462eae8 100644 --- a/drivers/staging/lustre/include/linux/lnet/lnetst.h +++ b/drivers/staging/lustre/include/linux/lnet/lnetst.h @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,123 +23,182 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, Intel Corporation. + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. * * lnet/include/lnet/lnetst.h * - * Author: Liang Zhen + * Author: Liang Zhen */ #ifndef __LNET_ST_H__ #define __LNET_ST_H__ -#include "../libcfs/libcfs.h" -#include "lnet.h" -#include "lib-types.h" - #define LST_FEAT_NONE (0) #define LST_FEAT_BULK_LEN (1 << 0) /* enable variable page size */ #define LST_FEATS_EMPTY (LST_FEAT_NONE) #define LST_FEATS_MASK (LST_FEAT_NONE | LST_FEAT_BULK_LEN) -#define LST_NAME_SIZE 32 /* max name buffer length */ - -#define LSTIO_DEBUG 0xC00 /* debug */ -#define LSTIO_SESSION_NEW 0xC01 /* create session */ -#define LSTIO_SESSION_END 0xC02 /* end session */ -#define LSTIO_SESSION_INFO 0xC03 /* query session */ -#define LSTIO_GROUP_ADD 0xC10 /* add group */ -#define LSTIO_GROUP_LIST 0xC11 /* list all groups in session */ -#define LSTIO_GROUP_INFO 0xC12 /* query default information of specified group */ -#define LSTIO_GROUP_DEL 0xC13 /* delete group */ -#define LSTIO_NODES_ADD 0xC14 /* add nodes to specified group */ -#define LSTIO_GROUP_UPDATE 0xC15 /* update group */ -#define LSTIO_BATCH_ADD 0xC20 /* add batch */ -#define LSTIO_BATCH_START 0xC21 /* start batch */ -#define LSTIO_BATCH_STOP 0xC22 /* stop batch */ -#define LSTIO_BATCH_DEL 0xC23 /* delete batch */ -#define LSTIO_BATCH_LIST 0xC24 /* show all batches in the session */ -#define LSTIO_BATCH_INFO 0xC25 /* show defail of specified batch */ -#define LSTIO_TEST_ADD 0xC26 /* add test (to batch) */ -#define LSTIO_BATCH_QUERY 0xC27 /* query batch status */ -#define LSTIO_STAT_QUERY 0xC30 /* get stats */ - -typedef struct { - lnet_nid_t ses_nid; /* nid of console node */ - __u64 ses_stamp; /* time stamp */ -} lst_sid_t; /*** session id */ +#define LST_NAME_SIZE 32 /* max name buffer length */ + +/* debug */ +#define LSTIO_DEBUG 0xC00 +/* create session */ +#define LSTIO_SESSION_NEW 0xC01 +/* end session */ +#define LSTIO_SESSION_END 0xC02 +/* query session */ +#define LSTIO_SESSION_INFO 0xC03 +/* add group */ +#define LSTIO_GROUP_ADD 0xC10 +/* list all groups in session */ +#define LSTIO_GROUP_LIST 0xC11 +/* query default information of specified group */ +#define LSTIO_GROUP_INFO 0xC12 +/* delete group */ +#define LSTIO_GROUP_DEL 0xC13 +/* add nodes to specified group */ +#define LSTIO_NODES_ADD 0xC14 +/* update group */ +#define LSTIO_GROUP_UPDATE 0xC15 +/* add batch */ +#define LSTIO_BATCH_ADD 0xC20 +/* start batch */ +#define LSTIO_BATCH_START 0xC21 +/* stop batch */ +#define LSTIO_BATCH_STOP 0xC22 +/* delete batch */ +#define LSTIO_BATCH_DEL 0xC23 +/* show all batches in the session */ +#define LSTIO_BATCH_LIST 0xC24 +/* show details of specified batch */ +#define LSTIO_BATCH_INFO 0xC25 +/* add test (to batch) */ +#define LSTIO_TEST_ADD 0xC26 +/* query batch status */ +#define LSTIO_BATCH_QUERY 0xC27 +/* get stats */ +#define LSTIO_STAT_QUERY 0xC30 + +/*** session id */ +typedef struct { + /* nid of console node */ + lnet_nid_t ses_nid; + /* time stamp */ + __u64 ses_stamp; +} lst_sid_t; extern lst_sid_t LST_INVALID_SID; -typedef struct { - __u64 bat_id; /* unique id in session */ -} lst_bid_t; /*** batch id (group of tests) */ - -/* Status of test node */ -#define LST_NODE_ACTIVE 0x1 /* node in this session */ -#define LST_NODE_BUSY 0x2 /* node is taken by other session */ -#define LST_NODE_DOWN 0x4 /* node is down */ -#define LST_NODE_UNKNOWN 0x8 /* node not in session */ - -typedef struct { - lnet_process_id_t nde_id; /* id of node */ - int nde_state; /* state of node */ -} lstcon_node_ent_t; /*** node entry, for list_group command */ - -typedef struct { - int nle_nnode; /* # of nodes */ - int nle_nactive; /* # of active nodes */ - int nle_nbusy; /* # of busy nodes */ - int nle_ndown; /* # of down nodes */ - int nle_nunknown; /* # of unknown nodes */ -} lstcon_ndlist_ent_t; /*** node_list entry, for list_batch command */ - -typedef struct { - int tse_type; /* test type */ - int tse_loop; /* loop count */ - int tse_concur; /* concurrency of test */ -} lstcon_test_ent_t; /*** test summary entry, for list_batch command */ - -typedef struct { - int bae_state; /* batch status */ - int bae_timeout; /* batch timeout */ - int bae_ntest; /* # of tests in the batch */ -} lstcon_batch_ent_t; /*** batch summary entry, for list_batch command */ - -typedef struct { - lstcon_ndlist_ent_t tbe_cli_nle; /* client (group) node_list entry */ - lstcon_ndlist_ent_t tbe_srv_nle; /* server (group) node_list entry */ +/*** batch id (group of tests) */ +typedef struct { + /* unique id in session */ + __u64 bat_id; +} lst_bid_t; + +/*** Status of test node */ + +/* node in this session */ +#define LST_NODE_ACTIVE 0x1 +/* node is taken by other session */ +#define LST_NODE_BUSY 0x2 +/* node is down */ +#define LST_NODE_DOWN 0x4 +/* node not in session */ +#define LST_NODE_UNKNOWN 0x8 + +/*** node entry, for list_group command */ +typedef struct { + /* id of node */ + lnet_process_id_t nde_id; + /* state of node */ + int nde_state; +} lstcon_node_ent_t; + +/*** node_list entry, for list_batch command */ +typedef struct { + /* # of nodes */ + int nle_nnode; + /* # of active nodes */ + int nle_nactive; + /* # of busy nodes */ + int nle_nbusy; + /* # of down nodes */ + int nle_ndown; + /* # of unknown nodes */ + int nle_nunknown; +} lstcon_ndlist_ent_t; + +/*** test summary entry, for list_batch command */ +typedef struct { + /* test type */ + int tse_type; + /* loop count */ + int tse_loop; + /* concurrency of test */ + int tse_concur; +} lstcon_test_ent_t; + +/*** batch summary entry, for list_batch command */ +typedef struct { + /* batch status */ + int bae_state; + /* batch status */ + int bae_timeout; + /* # of tests in the batch */ + int bae_ntest; +} lstcon_batch_ent_t; + +/*** test/batch verbose information entry, for list_batch command */ +typedef struct { + /* client (group) node_list entry */ + lstcon_ndlist_ent_t tbe_cli_nle; + /* server (group) node_list entry */ + lstcon_ndlist_ent_t tbe_srv_nle; union { - lstcon_test_ent_t tbe_test; /* test entry */ - lstcon_batch_ent_t tbe_batch; /* batch entry */ + /* test entry */ + lstcon_test_ent_t tbe_test; + /* batch entry */ + lstcon_batch_ent_t tbe_batch; } u; -} lstcon_test_batch_ent_t; /*** test/batch verbose information entry, - *** for list_batch command */ - -typedef struct { - struct list_head rpe_link; /* link chain */ - lnet_process_id_t rpe_peer; /* peer's id */ - struct timeval rpe_stamp; /* time stamp of RPC */ - int rpe_state; /* peer's state */ - int rpe_rpc_errno; /* RPC errno */ - - lst_sid_t rpe_sid; /* peer's session id */ - int rpe_fwk_errno; /* framework errno */ - int rpe_priv[4]; /* private data */ - char rpe_payload[0]; /* private reply payload */ +} lstcon_test_batch_ent_t; + +typedef struct { + /* link chain */ + struct list_head rpe_link; + /* peer's id */ + lnet_process_id_t rpe_peer; + /* time stamp of RPC */ + struct timeval rpe_stamp; + /* peer's state */ + int rpe_state; + /* RPC errno */ + int rpe_rpc_errno; + /* peer's session id */ + lst_sid_t rpe_sid; + /* framework errno */ + int rpe_fwk_errno; + /* private data */ + int rpe_priv[4]; + /* private reply payload */ + char rpe_payload[0]; } lstcon_rpc_ent_t; typedef struct { - int trs_rpc_stat[4]; /* RPCs stat (0: total, 1: failed, 2: finished, 4: reserved */ - int trs_rpc_errno; /* RPC errno */ - int trs_fwk_stat[8]; /* framework stat */ - int trs_fwk_errno; /* errno of the first remote error */ - void *trs_fwk_private; /* private framework stat */ + /* RPCs stat (0: total, 1: failed, 2: finished, 4: reserved */ + int trs_rpc_stat[4]; + /* RPC errno */ + int trs_rpc_errno; + /* framework stat */ + int trs_fwk_stat[8]; + /* errno of the first remote error */ + int trs_fwk_errno; + /* private framework stat */ + void *trs_fwk_private; } lstcon_trans_stat_t; static inline int @@ -238,237 +293,351 @@ lstcon_statqry_stat_failure(lstcon_trans_stat_t *stat, int inc) /* create a session */ typedef struct { - int lstio_ses_key; /* IN: local key */ - int lstio_ses_timeout; /* IN: session timeout */ - int lstio_ses_force; /* IN: force create ? */ + /* IN: local key */ + int lstio_ses_key; + /* IN: session timeout */ + int lstio_ses_timeout; + /* IN: force create ? */ + int lstio_ses_force; /** IN: session features */ - unsigned lstio_ses_feats; - lst_sid_t *lstio_ses_idp; /* OUT: session id */ - int lstio_ses_nmlen; /* IN: name length */ - char *lstio_ses_namep; /* IN: session name */ + unsigned lstio_ses_feats; + /* OUT: session id */ + lst_sid_t *lstio_ses_idp; + /* IN: name length */ + int lstio_ses_nmlen; + /* IN: session name */ + char *lstio_ses_namep; } lstio_session_new_args_t; /* query current session */ typedef struct { - lst_sid_t *lstio_ses_idp; /* OUT: session id */ - int *lstio_ses_keyp; /* OUT: local key */ + /* OUT: session id */ + lst_sid_t *lstio_ses_idp; + /* OUT: local key */ + int *lstio_ses_keyp; /** OUT: session features */ - unsigned *lstio_ses_featp; - lstcon_ndlist_ent_t *lstio_ses_ndinfo; /* OUT: */ - int lstio_ses_nmlen; /* IN: name length */ - char *lstio_ses_namep; /* OUT: session name */ + unsigned *lstio_ses_featp; + /* OUT: */ + lstcon_ndlist_ent_t *lstio_ses_ndinfo; + /* IN: name length */ + int lstio_ses_nmlen; + /* OUT: session name */ + char *lstio_ses_namep; } lstio_session_info_args_t; /* delete a session */ typedef struct { - int lstio_ses_key; /* IN: session key */ + /* IN: session key */ + int lstio_ses_key; } lstio_session_end_args_t; -#define LST_OPC_SESSION 1 -#define LST_OPC_GROUP 2 -#define LST_OPC_NODES 3 +#define LST_OPC_SESSION 1 +#define LST_OPC_GROUP 2 +#define LST_OPC_NODES 3 #define LST_OPC_BATCHCLI 4 #define LST_OPC_BATCHSRV 5 typedef struct { - int lstio_dbg_key; /* IN: session key */ - int lstio_dbg_type; /* IN: debug sessin|batch|group|nodes list */ - int lstio_dbg_flags; /* IN: reserved debug flags */ - int lstio_dbg_timeout; /* IN: timeout of debug */ - - int lstio_dbg_nmlen; /* IN: len of name */ - char *lstio_dbg_namep; /* IN: name of group|batch */ - int lstio_dbg_count; /* IN: # of test nodes to debug */ - lnet_process_id_t *lstio_dbg_idsp; /* IN: id of test nodes */ - struct list_head *lstio_dbg_resultp; /* OUT: list head of result buffer */ + /* IN: session key */ + int lstio_dbg_key; + /* IN: debug sessin|batch|group|nodes list */ + int lstio_dbg_type; + /* IN: reserved debug flags */ + int lstio_dbg_flags; + /* IN: timeout of debug */ + int lstio_dbg_timeout; + /* IN: len of name */ + int lstio_dbg_nmlen; + /* IN: name of group|batch */ + char *lstio_dbg_namep; + /* IN: # of test nodes to debug */ + int lstio_dbg_count; + /* IN: id of test nodes */ + lnet_process_id_t *lstio_dbg_idsp; + /* OUT: list head of result buffer */ + struct list_head *lstio_dbg_resultp; } lstio_debug_args_t; typedef struct { - int lstio_grp_key; /* IN: session key */ - int lstio_grp_nmlen; /* IN: name length */ - char *lstio_grp_namep; /* IN: group name */ + /* IN: session key */ + int lstio_grp_key; + /* IN: name length */ + int lstio_grp_nmlen; + /* IN: group name */ + char *lstio_grp_namep; } lstio_group_add_args_t; typedef struct { - int lstio_grp_key; /* IN: session key */ - int lstio_grp_nmlen; /* IN: name length */ - char *lstio_grp_namep; /* IN: group name */ + /* IN: session key */ + int lstio_grp_key; + /* IN: name length */ + int lstio_grp_nmlen; /* IN: name length */ + /* IN: group name */ + char *lstio_grp_namep; } lstio_group_del_args_t; -#define LST_GROUP_CLEAN 1 /* remove inactive nodes in the group */ -#define LST_GROUP_REFRESH 2 /* refresh inactive nodes in the group */ -#define LST_GROUP_RMND 3 /* delete nodes from the group */ - -typedef struct { - int lstio_grp_key; /* IN: session key */ - int lstio_grp_opc; /* IN: OPC */ - int lstio_grp_args; /* IN: arguments */ - int lstio_grp_nmlen; /* IN: name length */ - char *lstio_grp_namep; /* IN: group name */ - int lstio_grp_count; /* IN: # of nodes id */ - lnet_process_id_t *lstio_grp_idsp; /* IN: array of nodes */ - struct list_head *lstio_grp_resultp; /* OUT: list head of result buffer */ +#define LST_GROUP_CLEAN 1 /* remove inactive nodes in the group */ +#define LST_GROUP_REFRESH 2 /* refresh inactive nodes in the group */ +#define LST_GROUP_RMND 3 /* delete nodes from the group */ + +typedef struct { + /* IN: session key */ + int lstio_grp_key; + /* IN: OPC */ + int lstio_grp_opc; + /* IN: arguments */ + int lstio_grp_args; + /* IN: name length */ + int lstio_grp_nmlen; + /* IN: group name */ + char *lstio_grp_namep; + /* IN: # of nodes id */ + int lstio_grp_count; + /* IN: array of nodes */ + lnet_process_id_t *lstio_grp_idsp; + /* OUT: list head of result buffer */ + struct list_head *lstio_grp_resultp; } lstio_group_update_args_t; typedef struct { - int lstio_grp_key; /* IN: session key */ - int lstio_grp_nmlen; /* IN: name length */ - char *lstio_grp_namep; /* IN: group name */ - int lstio_grp_count; /* IN: # of nodes */ + /* IN: session key */ + int lstio_grp_key; + /* IN: name length */ + int lstio_grp_nmlen; + /* IN: group name */ + char *lstio_grp_namep; + /* IN: # of nodes */ + int lstio_grp_count; /** OUT: session features */ - unsigned *lstio_grp_featp; - lnet_process_id_t *lstio_grp_idsp; /* IN: nodes */ - struct list_head *lstio_grp_resultp; /* OUT: list head of result buffer */ + unsigned *lstio_grp_featp; + /* IN: nodes */ + lnet_process_id_t *lstio_grp_idsp; + /* OUT: list head of result buffer */ + struct list_head *lstio_grp_resultp; } lstio_group_nodes_args_t; typedef struct { - int lstio_grp_key; /* IN: session key */ - int lstio_grp_idx; /* IN: group idx */ - int lstio_grp_nmlen; /* IN: name len */ - char *lstio_grp_namep; /* OUT: name */ + /* IN: session key */ + int lstio_grp_key; + /* IN: group idx */ + int lstio_grp_idx; + /* IN: name len */ + int lstio_grp_nmlen; + /* OUT: name */ + char *lstio_grp_namep; } lstio_group_list_args_t; typedef struct { - int lstio_grp_key; /* IN: session key */ - int lstio_grp_nmlen; /* IN: name len */ - char *lstio_grp_namep; /* IN: name */ - lstcon_ndlist_ent_t *lstio_grp_entp; /* OUT: description of group */ - - int *lstio_grp_idxp; /* IN/OUT: node index */ - int *lstio_grp_ndentp; /* IN/OUT: # of nodent */ - lstcon_node_ent_t *lstio_grp_dentsp; /* OUT: nodent array */ + /* IN: session key */ + int lstio_grp_key; + /* IN: name len */ + int lstio_grp_nmlen; + /* IN: name */ + char *lstio_grp_namep; + /* OUT: description of group */ + lstcon_ndlist_ent_t *lstio_grp_entp; + /* IN/OUT: node index */ + int *lstio_grp_idxp; + /* IN/OUT: # of nodent */ + int *lstio_grp_ndentp; + /* OUT: nodent array */ + lstcon_node_ent_t *lstio_grp_dentsp; } lstio_group_info_args_t; -#define LST_DEFAULT_BATCH "batch" /* default batch name */ +#define LST_DEFAULT_BATCH "batch" /* default batch name */ typedef struct { - int lstio_bat_key; /* IN: session key */ - int lstio_bat_nmlen; /* IN: name length */ - char *lstio_bat_namep; /* IN: batch name */ + /* IN: session key */ + int lstio_bat_key; + /* IN: name length */ + int lstio_bat_nmlen; + /* IN: batch name */ + char *lstio_bat_namep; } lstio_batch_add_args_t; typedef struct { - int lstio_bat_key; /* IN: session key */ - int lstio_bat_nmlen; /* IN: name length */ - char *lstio_bat_namep; /* IN: batch name */ + /* IN: session key */ + int lstio_bat_key; /* IN: session key */ + /* IN: name length */ + int lstio_bat_nmlen; + /* IN: batch name */ + char *lstio_bat_namep; } lstio_batch_del_args_t; typedef struct { - int lstio_bat_key; /* IN: session key */ - int lstio_bat_timeout; /* IN: timeout for the batch */ - int lstio_bat_nmlen; /* IN: name length */ - char *lstio_bat_namep; /* IN: batch name */ - struct list_head *lstio_bat_resultp; /* OUT: list head of result buffer */ + /* IN: session key */ + int lstio_bat_key; + /* IN: timeout for the batch */ + int lstio_bat_timeout; + /* IN: name length */ + int lstio_bat_nmlen; + /* IN: batch name */ + char *lstio_bat_namep; + /* OUT: list head of result buffer */ + struct list_head *lstio_bat_resultp; } lstio_batch_run_args_t; typedef struct { - int lstio_bat_key; /* IN: session key */ - int lstio_bat_force; /* IN: abort unfinished test RPC */ - int lstio_bat_nmlen; /* IN: name length */ - char *lstio_bat_namep; /* IN: batch name */ - struct list_head *lstio_bat_resultp; /* OUT: list head of result buffer */ + /* IN: session key */ + int lstio_bat_key; + /* IN: abort unfinished test RPC */ + int lstio_bat_force; + /* IN: name length */ + int lstio_bat_nmlen; + /* IN: batch name */ + char *lstio_bat_namep; + /* OUT: list head of result buffer */ + struct list_head *lstio_bat_resultp; } lstio_batch_stop_args_t; typedef struct { - int lstio_bat_key; /* IN: session key */ - int lstio_bat_testidx; /* IN: test index */ - int lstio_bat_client; /* IN: is test client? */ - int lstio_bat_timeout; /* IN: timeout for waiting */ - int lstio_bat_nmlen; /* IN: name length */ - char *lstio_bat_namep; /* IN: batch name */ - struct list_head *lstio_bat_resultp; /* OUT: list head of result buffer */ + /* IN: session key */ + int lstio_bat_key; + /* IN: test index */ + int lstio_bat_testidx; + /* IN: is test client? */ + int lstio_bat_client; + /* IN: timeout for waiting */ + int lstio_bat_timeout; + /* IN: name length */ + int lstio_bat_nmlen; + /* IN: batch name */ + char *lstio_bat_namep; + /* OUT: list head of result buffer */ + struct list_head *lstio_bat_resultp; } lstio_batch_query_args_t; typedef struct { - int lstio_bat_key; /* IN: session key */ - int lstio_bat_idx; /* IN: index */ - int lstio_bat_nmlen; /* IN: name length */ - char *lstio_bat_namep; /* IN: batch name */ + /* IN: session key */ + int lstio_bat_key; + /* IN: index */ + int lstio_bat_idx; + /* IN: name length */ + int lstio_bat_nmlen; + /* IN: batch name */ + char *lstio_bat_namep; } lstio_batch_list_args_t; typedef struct { - int lstio_bat_key; /* IN: session key */ - int lstio_bat_nmlen; /* IN: name length */ - char *lstio_bat_namep; /* IN: name */ - int lstio_bat_server; /* IN: query server or not */ - int lstio_bat_testidx; /* IN: test index */ - lstcon_test_batch_ent_t *lstio_bat_entp; /* OUT: batch ent */ - - int *lstio_bat_idxp; /* IN/OUT: index of node */ - int *lstio_bat_ndentp; /* IN/OUT: # of nodent */ - lstcon_node_ent_t *lstio_bat_dentsp; /* array of nodent */ + /* IN: session key */ + int lstio_bat_key; + /* IN: name length */ + int lstio_bat_nmlen; + /* IN: name */ + char *lstio_bat_namep; + /* IN: query server or not */ + int lstio_bat_server; + /* IN: test index */ + int lstio_bat_testidx; + /* OUT: batch ent */ + lstcon_test_batch_ent_t *lstio_bat_entp; + /* IN/OUT: index of node */ + int *lstio_bat_idxp; + /* IN/OUT: # of nodent */ + int *lstio_bat_ndentp; + /* array of nodent */ + lstcon_node_ent_t *lstio_bat_dentsp; } lstio_batch_info_args_t; /* add stat in session */ typedef struct { - int lstio_sta_key; /* IN: session key */ - int lstio_sta_timeout; /* IN: timeout for stat request */ - int lstio_sta_nmlen; /* IN: group name length */ - char *lstio_sta_namep; /* IN: group name */ - int lstio_sta_count; /* IN: # of pid */ - lnet_process_id_t *lstio_sta_idsp; /* IN: pid */ - struct list_head *lstio_sta_resultp; /* OUT: list head of result buffer */ + /* IN: session key */ + int lstio_sta_key; + /* IN: timeout for stat request */ + int lstio_sta_timeout; + /* IN: group name length */ + int lstio_sta_nmlen; + /* IN: group name */ + char *lstio_sta_namep; + /* IN: # of pid */ + int lstio_sta_count; + /* IN: pid */ + lnet_process_id_t *lstio_sta_idsp; + /* OUT: list head of result buffer */ + struct list_head *lstio_sta_resultp; } lstio_stat_args_t; typedef enum { - LST_TEST_BULK = 1, - LST_TEST_PING = 2 + LST_TEST_BULK = 1, + LST_TEST_PING = 2 } lst_test_type_t; /* create a test in a batch */ -#define LST_MAX_CONCUR 1024 /* Max concurrency of test */ - -typedef struct { - int lstio_tes_key; /* IN: session key */ - int lstio_tes_bat_nmlen; /* IN: batch name len */ - char *lstio_tes_bat_name; /* IN: batch name */ - int lstio_tes_type; /* IN: test type */ - int lstio_tes_oneside; /* IN: one sided test */ - int lstio_tes_loop; /* IN: loop count */ - int lstio_tes_concur; /* IN: concurrency */ - - int lstio_tes_dist; /* IN: node distribution in destination groups */ - int lstio_tes_span; /* IN: node span in destination groups */ - int lstio_tes_sgrp_nmlen; /* IN: source group name length */ - char *lstio_tes_sgrp_name; /* IN: group name */ - int lstio_tes_dgrp_nmlen; /* IN: destination group name length */ - char *lstio_tes_dgrp_name; /* IN: group name */ - - int lstio_tes_param_len; /* IN: param buffer len */ - void *lstio_tes_param; /* IN: parameter for specified test: - lstio_bulk_param_t, - lstio_ping_param_t, - ... more */ - int *lstio_tes_retp; /* OUT: private returned value */ - struct list_head *lstio_tes_resultp; /* OUT: list head of result buffer */ +#define LST_MAX_CONCUR 1024 /* Max concurrency of test */ + +typedef struct { + /* IN: session key */ + int lstio_tes_key; + /* IN: batch name len */ + int lstio_tes_bat_nmlen; + /* IN: batch name */ + char *lstio_tes_bat_name; + /* IN: test type */ + int lstio_tes_type; + /* IN: one sided test */ + int lstio_tes_oneside; + /* IN: loop count */ + int lstio_tes_loop; + /* IN: concurrency */ + int lstio_tes_concur; + /* IN: node distribution in destination groups */ + int lstio_tes_dist; + /* IN: node span in destination groups */ + int lstio_tes_span; + /* IN: source group name length */ + int lstio_tes_sgrp_nmlen; + /* IN: group name */ + char *lstio_tes_sgrp_name; + /* IN: destination group name length */ + int lstio_tes_dgrp_nmlen; + /* IN: group name */ + char *lstio_tes_dgrp_name; + /* IN: param buffer len */ + int lstio_tes_param_len; + /* IN: parameter for specified test: + * lstio_bulk_param_t, + * lstio_ping_param_t, + * ... more */ + void *lstio_tes_param; + /* OUT: private returned value */ + int *lstio_tes_retp; + /* OUT: list head of result buffer */ + struct list_head *lstio_tes_resultp; } lstio_test_args_t; typedef enum { - LST_BRW_READ = 1, - LST_BRW_WRITE = 2 + LST_BRW_READ = 1, + LST_BRW_WRITE = 2 } lst_brw_type_t; typedef enum { - LST_BRW_CHECK_NONE = 1, - LST_BRW_CHECK_SIMPLE = 2, - LST_BRW_CHECK_FULL = 3 + LST_BRW_CHECK_NONE = 1, + LST_BRW_CHECK_SIMPLE = 2, + LST_BRW_CHECK_FULL = 3 } lst_brw_flags_t; typedef struct { - int blk_opc; /* bulk operation code */ - int blk_size; /* size (bytes) */ - int blk_time; /* time of running the test*/ - int blk_flags; /* reserved flags */ + /* bulk operation code */ + int blk_opc; + /* size (bytes) */ + int blk_size; /* size (bytes) */ + /* time of running the test*/ + int blk_time; + /* reserved flags */ + int blk_flags; } lst_test_bulk_param_t; typedef struct { - int png_size; /* size of ping message */ - int png_time; /* time */ - int png_loop; /* loop */ - int png_flags; /* reserved flags */ + /* size of ping message */ + int png_size; + /* time */ + int png_time; + /* loop */ + int png_loop; + /* reserved flags */ + int png_flags; } lst_test_ping_param_t; -/* more tests */ typedef struct { __u32 errors; __u32 rpcs_sent; diff --git a/drivers/staging/lustre/include/linux/lnet/nidstr.h b/drivers/staging/lustre/include/linux/lnet/nidstr.h new file mode 100644 index 0000000..14cca80 --- /dev/null +++ b/drivers/staging/lustre/include/linux/lnet/nidstr.h @@ -0,0 +1,73 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html + * + * GPL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 2011, 2014, Intel Corporation. + */ +#ifndef _LNET_NIDSTRINGS_H +#define _LNET_NIDSTRINGS_H +#include "types.h" + +/** + * Lustre Network Driver types. + */ +enum { + /* Only add to these values (i.e. don't ever change or redefine them): + * network addresses depend on them... */ + QSWLND = 1, + SOCKLND = 2, + GMLND = 3, + PTLLND = 4, + O2IBLND = 5, + CIBLND = 6, + OPENIBLND = 7, + IIBLND = 8, + LOLND = 9, + RALND = 10, + VIBLND = 11, + MXLND = 12, + GNILND = 13, + GNIIPLND = 14, +}; + +/* # of nidstrings */ +#define LNET_NIDSTR_COUNT 1024 +/* size of each one (see below for usage) */ +#define LNET_NIDSTR_SIZE 32 + +int libcfs_isknown_lnd(int type); +char *libcfs_lnd2modname(int type); +char *libcfs_lnd2str(int type); +int libcfs_str2lnd(const char *str); +char *libcfs_net2str(__u32 net); +char *libcfs_nid2str(lnet_nid_t nid); +__u32 libcfs_str2net(const char *str); +lnet_nid_t libcfs_str2nid(const char *str); +int libcfs_str2anynid(lnet_nid_t *nid, const char *str); +char *libcfs_id2str(lnet_process_id_t id); +void cfs_free_nidlist(struct list_head *list); +int cfs_parse_nidlist(char *str, int len, struct list_head *list); +int cfs_match_nid(lnet_nid_t nid, struct list_head *list); + +#endif /* _LNET_NIDSTRINGS_H */ diff --git a/drivers/staging/lustre/include/linux/lnet/ptllnd.h b/drivers/staging/lustre/include/linux/lnet/ptllnd.h deleted file mode 100644 index c91d653..0000000 --- a/drivers/staging/lustre/include/linux/lnet/ptllnd.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lnet/include/lnet/ptllnd.h - * - * Author: PJ Kirner - */ - -/* - * The PTLLND was designed to support Portals with - * Lustre and non-lustre UNLINK semantics. - * However for now the two targets are Cray Portals - * on the XT3 and Lustre Portals (for testing) both - * have Lustre UNLINK semantics, so this is defined - * by default. - */ -#define LUSTRE_PORTALS_UNLINK_SEMANTICS - -#ifdef _USING_LUSTRE_PORTALS_ - -/* NIDs are 64-bits on Lustre Portals */ -#define FMT_NID "%llu" -#define FMT_PID "%d" - -/* When using Lustre Portals Lustre completion semantics are imlicit*/ -#define PTL_MD_LUSTRE_COMPLETION_SEMANTICS 0 - -#else /* _USING_CRAY_PORTALS_ */ - -/* NIDs are integers on Cray Portals */ -#define FMT_NID "%u" -#define FMT_PID "%d" - -/* When using Cray Portals this is defined in the Cray Portals Header*/ -/*#define PTL_MD_LUSTRE_COMPLETION_SEMANTICS */ - -/* Can compare handles directly on Cray Portals */ -#define PtlHandleIsEqual(a, b) ((a) == (b)) - -/* Different error types on Cray Portals*/ -#define ptl_err_t ptl_ni_fail_t - -/* - * The Cray Portals has no maximum number of IOVs. The - * maximum is limited only by memory and size of the - * int parameters (2^31-1). - * Lustre only really require that the underyling - * implementation to support at least LNET_MAX_IOV, - * so for Cray portals we can safely just use that - * value here. - * - */ -#define PTL_MD_MAX_IOV LNET_MAX_IOV - -#endif - -#define FMT_PTLID "ptlid:"FMT_PID"-"FMT_NID - -/* Align incoming small request messages to an 8 byte boundary if this is - * supported to avoid alignment issues on some architectures */ -#ifndef PTL_MD_LOCAL_ALIGN8 -# define PTL_MD_LOCAL_ALIGN8 0 -#endif diff --git a/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h b/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h deleted file mode 100644 index 808f37b..0000000 --- a/drivers/staging/lustre/include/linux/lnet/ptllnd_wire.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lnet/include/lnet/ptllnd_wire.h - * - * Author: PJ Kirner - */ - -/* Minimum buffer size that any peer will post to receive ptllnd messages */ -#define PTLLND_MIN_BUFFER_SIZE 256 - -/************************************************************************ - * Tunable defaults that {u,k}lnds/ptllnd should have in common. - */ - -#define PTLLND_PORTAL 9 /* The same portal PTLPRC used when talking to cray portals */ -#define PTLLND_PID 9 /* The Portals PID */ -#define PTLLND_PEERCREDITS 8 /* concurrent sends to 1 peer */ - -/* Default buffer size for kernel ptllnds (guaranteed eager) */ -#define PTLLND_MAX_KLND_MSG_SIZE 512 - -/* Default buffer size for catamount ptllnds (not guaranteed eager) - large - * enough to avoid RDMA for anything sent while control is not in liblustre */ -#define PTLLND_MAX_ULND_MSG_SIZE 512 - -/************************************************************************ - * Portals LND Wire message format. - * These are sent in sender's byte order (i.e. receiver flips). - */ - -#define PTL_RESERVED_MATCHBITS 0x100 /* below this value is reserved - * above is for bulk data transfer */ -#define LNET_MSG_MATCHBITS 0 /* the value for the message channel */ - -typedef struct { - lnet_hdr_t kptlim_hdr; /* portals header */ - char kptlim_payload[0]; /* piggy-backed payload */ -} WIRE_ATTR kptl_immediate_msg_t; - -typedef struct { - lnet_hdr_t kptlrm_hdr; /* portals header */ - __u64 kptlrm_matchbits; /* matchbits */ -} WIRE_ATTR kptl_rdma_msg_t; - -typedef struct { - __u64 kptlhm_matchbits; /* matchbits */ - __u32 kptlhm_max_msg_size; /* max message size */ -} WIRE_ATTR kptl_hello_msg_t; - -typedef struct { - /* First 2 fields fixed FOR ALL TIME */ - __u32 ptlm_magic; /* I'm a Portals LND message */ - __u16 ptlm_version; /* this is my version number */ - __u8 ptlm_type; /* the message type */ - __u8 ptlm_credits; /* returned credits */ - __u32 ptlm_nob; /* # bytes in whole message */ - __u32 ptlm_cksum; /* checksum (0 == no checksum) */ - __u64 ptlm_srcnid; /* sender's NID */ - __u64 ptlm_srcstamp; /* sender's incarnation */ - __u64 ptlm_dstnid; /* destination's NID */ - __u64 ptlm_dststamp; /* destination's incarnation */ - __u32 ptlm_srcpid; /* sender's PID */ - __u32 ptlm_dstpid; /* destination's PID */ - - union { - kptl_immediate_msg_t immediate; - kptl_rdma_msg_t rdma; - kptl_hello_msg_t hello; - } WIRE_ATTR ptlm_u; - -} kptl_msg_t; - -/* kptl_msg_t::ptlm_credits is only a __u8 */ -#define PTLLND_MSG_MAX_CREDITS ((typeof(((kptl_msg_t *)0)->ptlm_credits)) - 1) - -#define PTLLND_MSG_MAGIC LNET_PROTO_PTL_MAGIC -#define PTLLND_MSG_VERSION 0x04 - -#define PTLLND_RDMA_OK 0x00 -#define PTLLND_RDMA_FAIL 0x01 - -#define PTLLND_MSG_TYPE_INVALID 0x00 -#define PTLLND_MSG_TYPE_PUT 0x01 -#define PTLLND_MSG_TYPE_GET 0x02 -#define PTLLND_MSG_TYPE_IMMEDIATE 0x03 /* No bulk data xfer*/ -#define PTLLND_MSG_TYPE_NOOP 0x04 -#define PTLLND_MSG_TYPE_HELLO 0x05 -#define PTLLND_MSG_TYPE_NAK 0x06 diff --git a/drivers/staging/lustre/include/linux/lnet/socklnd.h b/drivers/staging/lustre/include/linux/lnet/socklnd.h index 389038b..e62df8c 100644 --- a/drivers/staging/lustre/include/linux/lnet/socklnd.h +++ b/drivers/staging/lustre/include/linux/lnet/socklnd.h @@ -15,89 +15,92 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, 2014 Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. * * lnet/include/lnet/socklnd.h - * - * #defines shared between socknal implementation and utilities */ #ifndef __LNET_LNET_SOCKLND_H__ #define __LNET_LNET_SOCKLND_H__ #include "types.h" -#include "lib-types.h" -#define SOCKLND_CONN_NONE (-1) +#define SOCKLND_CONN_NONE (-1) #define SOCKLND_CONN_ANY 0 -#define SOCKLND_CONN_CONTROL 1 -#define SOCKLND_CONN_BULK_IN 2 -#define SOCKLND_CONN_BULK_OUT 3 -#define SOCKLND_CONN_NTYPES 4 +#define SOCKLND_CONN_CONTROL 1 +#define SOCKLND_CONN_BULK_IN 2 +#define SOCKLND_CONN_BULK_OUT 3 +#define SOCKLND_CONN_NTYPES 4 #define SOCKLND_CONN_ACK SOCKLND_CONN_BULK_IN typedef struct { - __u32 kshm_magic; /* magic number of socklnd message */ - __u32 kshm_version; /* version of socklnd message */ - lnet_nid_t kshm_src_nid; /* sender's nid */ - lnet_nid_t kshm_dst_nid; /* destination nid */ - lnet_pid_t kshm_src_pid; /* sender's pid */ - lnet_pid_t kshm_dst_pid; /* destination pid */ - __u64 kshm_src_incarnation; /* sender's incarnation */ - __u64 kshm_dst_incarnation; /* destination's incarnation */ - __u32 kshm_ctype; /* connection type */ - __u32 kshm_nips; /* # IP addrs */ - __u32 kshm_ips[0]; /* IP addrs */ + /* magic number of socklnd message */ + __u32 kshm_magic; + /* version of socklnd message */ + __u32 kshm_version; + /* sender's nid */ + lnet_nid_t kshm_src_nid; + /* destination nid */ + lnet_nid_t kshm_dst_nid; + /* sender's pid */ + lnet_pid_t kshm_src_pid; + /* destination pid */ + lnet_pid_t kshm_dst_pid; + /* sender's incarnation */ + __u64 kshm_src_incarnation; + /* destination's incarnation */ + __u64 kshm_dst_incarnation; + /* connection type */ + __u32 kshm_ctype; + /* # IP addrs */ + __u32 kshm_nips; + __u32 kshm_ips[0]; } WIRE_ATTR ksock_hello_msg_t; typedef struct { - lnet_hdr_t ksnm_hdr; /* lnet hdr */ - - /* - * ksnm_payload is removed because of winnt compiler's limitation: - * zero-sized array can only be placed at the tail of [nested] - * structure definitions. lnet payload will be stored just after - * the body of structure ksock_lnet_msg_t - */ + /* lnet hdr */ + lnet_hdr_t ksnm_hdr; } WIRE_ATTR ksock_lnet_msg_t; typedef struct { - __u32 ksm_type; /* type of socklnd message */ - __u32 ksm_csum; /* checksum if != 0 */ - __u64 ksm_zc_cookies[2]; /* Zero-Copy request/ACK cookie */ + /* type of socklnd message */ + __u32 ksm_type; + /* checksum if != 0 */ + __u32 ksm_csum; + /* Zero-Copy request/ACK cookie */ + __u64 ksm_zc_cookies[2]; union { - ksock_lnet_msg_t lnetmsg; /* lnet message, it's empty if it's NOOP */ + /* lnet message, it's empty if it's NOOP */ + ksock_lnet_msg_t lnetmsg; } WIRE_ATTR ksm_u; } WIRE_ATTR ksock_msg_t; static inline void socklnd_init_msg(ksock_msg_t *msg, int type) { - msg->ksm_csum = 0; - msg->ksm_type = type; - msg->ksm_zc_cookies[0] = msg->ksm_zc_cookies[1] = 0; + msg->ksm_csum = 0; + msg->ksm_type = type; + msg->ksm_zc_cookies[0] = msg->ksm_zc_cookies[1] = 0; } -#define KSOCK_MSG_NOOP 0xc0 /* ksm_u empty */ -#define KSOCK_MSG_LNET 0xc1 /* lnet msg */ +#define KSOCK_MSG_NOOP 0xc0 /* ksm_u empty */ +#define KSOCK_MSG_LNET 0xc1 /* lnet msg */ /* We need to know this number to parse hello msg from ksocklnd in * other LND (usocklnd, for example) */ -#define KSOCK_PROTO_V2 2 -#define KSOCK_PROTO_V3 3 +#define KSOCK_PROTO_V2 2 +#define KSOCK_PROTO_V3 3 #endif diff --git a/drivers/staging/lustre/include/linux/lnet/types.h b/drivers/staging/lustre/include/linux/lnet/types.h index 68d8139..53997ae 100644 --- a/drivers/staging/lustre/include/linux/lnet/types.h +++ b/drivers/staging/lustre/include/linux/lnet/types.h @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,11 +23,11 @@ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2014 Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. */ #ifndef __LNET_TYPES_H__ @@ -48,7 +44,7 @@ /** Portal reserved for LNet's own use. * \see lustre/include/lustre/lustre_idl.h for Lustre portal assignments. */ -#define LNET_RESERVED_PORTAL 0 +#define LNET_RESERVED_PORTAL 0 /** * Address of an end-point in an LNet network. @@ -74,8 +70,179 @@ typedef __u32 lnet_pid_t; #define LNET_PID_RESERVED 0xf0000000 /* reserved bits in PID */ #define LNET_PID_USERFLAG 0x80000000 /* set in userspace peers */ +#define LNET_PID_LUSTRE 12345 + +#define LNET_TIME_FOREVER (-1) + +/* how an LNET NID encodes net:address */ +/** extract the address part of an lnet_nid_t */ + +static inline __u32 LNET_NIDADDR(lnet_nid_t nid) +{ + return nid & 0xffffffff; +} + +static inline __u32 LNET_NIDNET(lnet_nid_t nid) +{ + return (nid >> 32) & 0xffffffff; +} + +static inline lnet_nid_t LNET_MKNID(__u32 net, __u32 addr) +{ + return (((__u64)net) << 32) | addr; +} + +static inline __u32 LNET_NETNUM(__u32 net) +{ + return net & 0xffff; +} + +static inline __u32 LNET_NETTYP(__u32 net) +{ + return (net >> 16) & 0xffff; +} + +static inline __u32 LNET_MKNET(__u32 type, __u32 num) +{ + return (type << 16) | num; +} + +#define WIRE_ATTR __packed + +/* Packed version of lnet_process_id_t to transfer via network */ +typedef struct { + /* node id / process id */ + lnet_nid_t nid; + lnet_pid_t pid; +} WIRE_ATTR lnet_process_id_packed_t; -#define LNET_TIME_FOREVER (-1) +/* The wire handle's interface cookie only matches one network interface in + * one epoch (i.e. new cookie when the interface restarts or the node + * reboots). The object cookie only matches one object on that interface + * during that object's lifetime (i.e. no cookie re-use). */ +typedef struct { + __u64 wh_interface_cookie; + __u64 wh_object_cookie; +} WIRE_ATTR lnet_handle_wire_t; + +typedef enum { + LNET_MSG_ACK = 0, + LNET_MSG_PUT, + LNET_MSG_GET, + LNET_MSG_REPLY, + LNET_MSG_HELLO, +} lnet_msg_type_t; + +/* The variant fields of the portals message header are aligned on an 8 + * byte boundary in the message header. Note that all types used in these + * wire structs MUST be fixed size and the smaller types are placed at the + * end. */ +typedef struct lnet_ack { + lnet_handle_wire_t dst_wmd; + __u64 match_bits; + __u32 mlength; +} WIRE_ATTR lnet_ack_t; + +typedef struct lnet_put { + lnet_handle_wire_t ack_wmd; + __u64 match_bits; + __u64 hdr_data; + __u32 ptl_index; + __u32 offset; +} WIRE_ATTR lnet_put_t; + +typedef struct lnet_get { + lnet_handle_wire_t return_wmd; + __u64 match_bits; + __u32 ptl_index; + __u32 src_offset; + __u32 sink_length; +} WIRE_ATTR lnet_get_t; + +typedef struct lnet_reply { + lnet_handle_wire_t dst_wmd; +} WIRE_ATTR lnet_reply_t; + +typedef struct lnet_hello { + __u64 incarnation; + __u32 type; +} WIRE_ATTR lnet_hello_t; + +typedef struct { + lnet_nid_t dest_nid; + lnet_nid_t src_nid; + lnet_pid_t dest_pid; + lnet_pid_t src_pid; + __u32 type; /* lnet_msg_type_t */ + __u32 payload_length; /* payload data to follow */ + /*<------__u64 aligned------->*/ + union { + lnet_ack_t ack; + lnet_put_t put; + lnet_get_t get; + lnet_reply_t reply; + lnet_hello_t hello; + } msg; +} WIRE_ATTR lnet_hdr_t; + +/* A HELLO message contains a magic number and protocol version + * code in the header's dest_nid, the peer's NID in the src_nid, and + * LNET_MSG_HELLO in the type field. All other common fields are zero + * (including payload_size; i.e. no payload). + * This is for use by byte-stream LNDs (e.g. TCP/IP) to check the peer is + * running the same protocol and to find out its NID. These LNDs should + * exchange HELLO messages when a connection is first established. Individual + * LNDs can put whatever else they fancy in lnet_hdr_t::msg. + */ +typedef struct { + __u32 magic; /* LNET_PROTO_TCP_MAGIC */ + __u16 version_major; /* increment on incompatible change */ + __u16 version_minor; /* increment on compatible change */ +} WIRE_ATTR lnet_magicversion_t; + +/* PROTO MAGIC for LNDs */ +#define LNET_PROTO_IB_MAGIC 0x0be91b91 +#define LNET_PROTO_GNI_MAGIC 0xb00fbabe /* ask Kim */ +#define LNET_PROTO_TCP_MAGIC 0xeebc0ded +#define LNET_PROTO_ACCEPTOR_MAGIC 0xacce7100 +#define LNET_PROTO_PING_MAGIC 0x70696E67 /* 'ping' */ + +/* Placeholder for a future "unified" protocol across all LNDs */ +/* Current LNDs that receive a request with this magic will respond with a + * "stub" reply using their current protocol */ +#define LNET_PROTO_MAGIC 0x45726963 /* ! */ + +#define LNET_PROTO_TCP_VERSION_MAJOR 1 +#define LNET_PROTO_TCP_VERSION_MINOR 0 + +/* Acceptor connection request */ +typedef struct { + __u32 acr_magic; /* PTL_ACCEPTOR_PROTO_MAGIC */ + __u32 acr_version; /* protocol version */ + __u64 acr_nid; /* target NID */ +} WIRE_ATTR lnet_acceptor_connreq_t; + +#define LNET_PROTO_ACCEPTOR_VERSION 1 + +typedef struct lnet_counters { + __u32 msgs_alloc; + __u32 msgs_max; + __u32 errors; + __u32 send_count; + __u32 recv_count; + __u32 route_count; + __u32 drop_count; + __u64 send_length; + __u64 recv_length; + __u64 route_length; + __u64 drop_length; +} WIRE_ATTR lnet_counters_t; + +#define LNET_NI_STATUS_UP 0x15aac0de +#define LNET_NI_STATUS_DOWN 0xdeadface +#define LNET_NI_STATUS_INVALID 0x00000000 + +#define LNET_MAX_INTERFACES 16 /** * Objects maintained by the LNet are accessed through handles. Handle types @@ -195,8 +362,8 @@ typedef struct { * one must start on page boundary, and all but the last must end on * page boundary. */ - void *start; - unsigned int length; + void *start; + unsigned int length; /** * Specifies the maximum number of operations that can be performed * on the memory descriptor. An operation is any action that could @@ -207,7 +374,7 @@ typedef struct { * there is no bound on the number of operations that may be applied * to a MD. */ - int threshold; + int threshold; /** * Specifies the largest incoming request that the memory descriptor * should respond to. When the unused portion of a MD (length - @@ -215,7 +382,7 @@ typedef struct { * does not respond to further operations. This value is only used * if the LNET_MD_MAX_SIZE option is set. */ - int max_size; + int max_size; /** * Specifies the behavior of the memory descriptor. A bitwise OR * of the following values can be used: @@ -252,14 +419,14 @@ typedef struct { * region (i.e. sum of all fragment lengths) must not be less than * \a max_size. */ - unsigned int options; + unsigned int options; /** * A user-specified value that is associated with the memory * descriptor. The value does not need to be a pointer, but must fit * in the space used by a pointer. This value is recorded in events * associated with operations on this MD. */ - void *user_ptr; + void *user_ptr; /** * A handle for the event queue used to log the operations performed on * the memory region. If this argument is a NULL handle (i.e. nullified @@ -276,44 +443,33 @@ typedef struct { #define LNET_MTU (1 << LNET_MTU_BITS) /** limit on the number of fragments in discontiguous MDs */ -#define LNET_MAX_IOV 256 - -/* Max payload size */ -# define LNET_MAX_PAYLOAD CONFIG_LNET_MAX_PAYLOAD -# if (LNET_MAX_PAYLOAD < LNET_MTU) -# error "LNET_MAX_PAYLOAD too small - error in configure --with-max-payload-mb" -# else -# if (LNET_MAX_PAYLOAD > (PAGE_SIZE * LNET_MAX_IOV)) -/* PAGE_SIZE is a constant: check with cpp! */ -# error "LNET_MAX_PAYLOAD too large - error in configure --with-max-payload-mb" -# endif -# endif +#define LNET_MAX_IOV 256 /** * Options for the MD structure. See lnet_md_t::options. */ -#define LNET_MD_OP_PUT (1 << 0) +#define LNET_MD_OP_PUT (1 << 0) /** See lnet_md_t::options. */ -#define LNET_MD_OP_GET (1 << 1) +#define LNET_MD_OP_GET (1 << 1) /** See lnet_md_t::options. */ #define LNET_MD_MANAGE_REMOTE (1 << 2) -/* unused (1 << 3) */ +/* unused (1 << 3) */ /** See lnet_md_t::options. */ -#define LNET_MD_TRUNCATE (1 << 4) +#define LNET_MD_TRUNCATE (1 << 4) /** See lnet_md_t::options. */ -#define LNET_MD_ACK_DISABLE (1 << 5) +#define LNET_MD_ACK_DISABLE (1 << 5) /** See lnet_md_t::options. */ #define LNET_MD_IOVEC (1 << 6) /** See lnet_md_t::options. */ -#define LNET_MD_MAX_SIZE (1 << 7) +#define LNET_MD_MAX_SIZE (1 << 7) /** See lnet_md_t::options. */ -#define LNET_MD_KIOV (1 << 8) +#define LNET_MD_KIOV (1 << 8) /* For compatibility with Cray Portals */ -#define LNET_MD_PHYS 0 +#define LNET_MD_PHYS 0 /** Infinite threshold on MD operations. See lnet_md_t::threshold */ -#define LNET_MD_THRESH_INF (-1) +#define LNET_MD_THRESH_INF (-1) /* NB lustre portals uses struct iovec internally! */ typedef struct iovec lnet_md_iovec_t; @@ -323,15 +479,15 @@ typedef struct iovec lnet_md_iovec_t; */ typedef struct { /** Pointer to the page where the fragment resides */ - struct page *kiov_page; + struct page *kiov_page; /** Length in bytes of the fragment */ - unsigned int kiov_len; + unsigned int kiov_len; /** * Starting offset of the fragment within the page. Note that the * end of the fragment must not pass the end of the page; i.e., * kiov_len + kiov_offset <= PAGE_CACHE_SIZE. */ - unsigned int kiov_offset; + unsigned int kiov_offset; } lnet_kiov_t; /** @} lnet_md */ @@ -379,7 +535,7 @@ typedef enum { LNET_EVENT_UNLINK, } lnet_event_kind_t; -#define LNET_SEQ_BASETYPE long +#define LNET_SEQ_BASETYPE long typedef unsigned LNET_SEQ_BASETYPE lnet_seq_t; #define LNET_SEQ_GT(a, b) (((signed LNET_SEQ_BASETYPE)((a) - (b))) > 0) @@ -388,23 +544,23 @@ typedef unsigned LNET_SEQ_BASETYPE lnet_seq_t; */ typedef struct { /** The identifier (nid, pid) of the target. */ - lnet_process_id_t target; + lnet_process_id_t target; /** The identifier (nid, pid) of the initiator. */ - lnet_process_id_t initiator; + lnet_process_id_t initiator; /** * The NID of the immediate sender. If the request has been forwarded * by routers, this is the NID of the last hop; otherwise it's the * same as the initiator. */ - lnet_nid_t sender; + lnet_nid_t sender; /** Indicates the type of the event. */ - lnet_event_kind_t type; + lnet_event_kind_t type; /** The portal table index specified in the request */ - unsigned int pt_index; + unsigned int pt_index; /** A copy of the match bits specified in the request. */ - __u64 match_bits; + __u64 match_bits; /** The length (in bytes) specified in the request. */ - unsigned int rlength; + unsigned int rlength; /** * The length (in bytes) of the data that was manipulated by the * operation. For truncated operations, the manipulated length will be @@ -412,47 +568,47 @@ typedef struct { * see lnet_md_t). For all other operations, the manipulated length * will be the length of the requested operation, i.e. rlength. */ - unsigned int mlength; + unsigned int mlength; /** * The handle to the MD associated with the event. The handle may be * invalid if the MD has been unlinked. */ - lnet_handle_md_t md_handle; + lnet_handle_md_t md_handle; /** * A snapshot of the state of the MD immediately after the event has * been processed. In particular, the threshold field in md will * reflect the value of the threshold after the operation occurred. */ - lnet_md_t md; + lnet_md_t md; /** * 64 bits of out-of-band user data. Only valid for LNET_EVENT_PUT. * \see LNetPut */ - __u64 hdr_data; + __u64 hdr_data; /** * Indicates the completion status of the operation. It's 0 for * successful operations, otherwise it's an error code. */ - int status; + int status; /** * Indicates whether the MD has been unlinked. Note that: * - An event with unlinked set is the last event on the MD. * - This field is also set for an explicit LNET_EVENT_UNLINK event. * \see LNetMDUnlink */ - int unlinked; + int unlinked; /** * The displacement (in bytes) into the memory region that the * operation used. The offset can be determined by the operation for * a remote managed MD or by the local MD. * \see lnet_md_t::options */ - unsigned int offset; + unsigned int offset; /** * The sequence number for this event. Sequence numbers are unique * to each event. */ - volatile lnet_seq_t sequence; + volatile lnet_seq_t sequence; } lnet_event_t; /** diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index be4de56..8a3341e 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -1177,7 +1177,7 @@ void kiblnd_map_rx_descs(kib_conn_t *conn) CDEBUG(D_NET, "rx %d: %p %#llx(%#llx)\n", i, rx->rx_msg, rx->rx_msgaddr, - lnet_page2phys(pg) + pg_off); + (__u64)(page_to_phys(pg) + pg_off)); pg_off += IBLND_MSG_SIZE; LASSERT(pg_off <= PAGE_SIZE); diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h index cd664d0..32b39a4 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h @@ -62,16 +62,15 @@ #define DEBUG_SUBSYSTEM S_LND -#include "../../../include/linux/libcfs/libcfs.h" -#include "../../../include/linux/lnet/lnet.h" -#include "../../../include/linux/lnet/lib-lnet.h" -#include "../../../include/linux/lnet/lnet-sysctl.h" - #include #include #include #include +#include "../../../include/linux/libcfs/libcfs.h" +#include "../../../include/linux/lnet/lnet.h" +#include "../../../include/linux/lnet/lib-lnet.h" + #define IBLND_PEER_HASH_SIZE 101 /* # peer lists */ /* # scheduler loops before reschedule */ #define IBLND_RESCHED 100 diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index f3b4923..8798e49 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -34,7 +34,6 @@ #include "../../../include/linux/lnet/lnet.h" #include "../../../include/linux/lnet/lib-lnet.h" #include "../../../include/linux/lnet/socklnd.h" -#include "../../../include/linux/lnet/lnet-sysctl.h" #define SOCKNAL_PEER_HASH_SIZE 101 /* # peer lists */ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c index a93f59c..df0f7d8 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c @@ -148,8 +148,8 @@ ksocknal_lib_send_kiov(ksock_conn_t *conn, ksock_tx_t *tx) rc = sk->sk_prot->sendpage(sk, page, offset, fragsize, msgflg); } else { - rc = cfs_tcp_sendpage(sk, page, offset, fragsize, - msgflg); + rc = tcp_sendpage(sk, page, offset, fragsize, + msgflg); } } else { #if SOCKNAL_SINGLE_FRAG_TX || !SOCKNAL_RISK_KMAP_DEADLOCK diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index bd97099..c44d3e0 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -243,8 +243,6 @@ lnet_accept(struct socket *sock, __u32 magic) if (magic == le32_to_cpu(LNET_PROTO_TCP_MAGIC)) str = "'old' socknal/tcpnal"; - else if (lnet_accept_magic(magic, LNET_PROTO_RA_MAGIC)) - str = "'old' ranal"; else str = "unrecognised"; diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c index 4a14e51..f9ae9e5 100644 --- a/drivers/staging/lustre/lnet/lnet/api-ni.c +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c @@ -364,56 +364,6 @@ lnet_counters_reset(void) } EXPORT_SYMBOL(lnet_counters_reset); -#ifdef LNET_USE_LIB_FREELIST - -int -lnet_freelist_init(lnet_freelist_t *fl, int n, int size) -{ - char *space; - - LASSERT(n > 0); - - size += offsetof(lnet_freeobj_t, fo_contents); - - LIBCFS_ALLOC(space, n * size); - if (space == NULL) - return -ENOMEM; - - INIT_LIST_HEAD(&fl->fl_list); - fl->fl_objs = space; - fl->fl_nobjs = n; - fl->fl_objsize = size; - - do { - memset(space, 0, size); - list_add((struct list_head *)space, &fl->fl_list); - space += size; - } while (--n != 0); - - return 0; -} - -void -lnet_freelist_fini(lnet_freelist_t *fl) -{ - struct list_head *el; - int count; - - if (fl->fl_nobjs == 0) - return; - - count = 0; - for (el = fl->fl_list.next; el != &fl->fl_list; el = el->next) - count++; - - LASSERT(count == fl->fl_nobjs); - - LIBCFS_FREE(fl->fl_objs, fl->fl_nobjs * fl->fl_objsize); - memset(fl, 0, sizeof(*fl)); -} - -#endif /* LNET_USE_LIB_FREELIST */ - static __u64 lnet_create_interface_cookie(void) { @@ -470,9 +420,6 @@ lnet_res_container_cleanup(struct lnet_res_container *rec) count, lnet_res_type2str(rec->rec_type)); } -#ifdef LNET_USE_LIB_FREELIST - lnet_freelist_fini(&rec->rec_freelist); -#endif if (rec->rec_lh_hash != NULL) { LIBCFS_FREE(rec->rec_lh_hash, LNET_LH_HASH_SIZE * sizeof(rec->rec_lh_hash[0])); @@ -483,8 +430,7 @@ lnet_res_container_cleanup(struct lnet_res_container *rec) } static int -lnet_res_container_setup(struct lnet_res_container *rec, - int cpt, int type, int objnum, int objsz) +lnet_res_container_setup(struct lnet_res_container *rec, int cpt, int type) { int rc = 0; int i; @@ -494,12 +440,6 @@ lnet_res_container_setup(struct lnet_res_container *rec, rec->rec_type = type; INIT_LIST_HEAD(&rec->rec_active); -#ifdef LNET_USE_LIB_FREELIST - memset(&rec->rec_freelist, 0, sizeof(rec->rec_freelist)); - rc = lnet_freelist_init(&rec->rec_freelist, objnum, objsz); - if (rc != 0) - goto out; -#endif rec->rec_lh_cookie = (cpt << LNET_COOKIE_TYPE_BITS) | type; /* Arbitrary choice of hash table size */ @@ -535,7 +475,7 @@ lnet_res_containers_destroy(struct lnet_res_container **recs) } static struct lnet_res_container ** -lnet_res_containers_create(int type, int objnum, int objsz) +lnet_res_containers_create(int type) { struct lnet_res_container **recs; struct lnet_res_container *rec; @@ -550,7 +490,7 @@ lnet_res_containers_create(int type, int objnum, int objsz) } cfs_percpt_for_each(rec, i, recs) { - rc = lnet_res_container_setup(rec, i, type, objnum, objsz); + rc = lnet_res_container_setup(rec, i, type); if (rc != 0) { lnet_res_containers_destroy(recs); return NULL; @@ -597,7 +537,6 @@ lnet_res_lh_initialize(struct lnet_res_container *rec, lnet_libhandle_t *lh) list_add(&lh->lh_hash_chain, &rec->rec_lh_hash[hash]); } - int lnet_unprepare(void); static int @@ -643,13 +582,11 @@ lnet_prepare(lnet_pid_t requested_pid) goto failed; rc = lnet_res_container_setup(&the_lnet.ln_eq_container, 0, - LNET_COOKIE_TYPE_EQ, LNET_FL_MAX_EQS, - sizeof(lnet_eq_t)); + LNET_COOKIE_TYPE_EQ); if (rc != 0) goto failed; - recs = lnet_res_containers_create(LNET_COOKIE_TYPE_ME, LNET_FL_MAX_MES, - sizeof(lnet_me_t)); + recs = lnet_res_containers_create(LNET_COOKIE_TYPE_ME); if (recs == NULL) { rc = -ENOMEM; goto failed; @@ -657,8 +594,7 @@ lnet_prepare(lnet_pid_t requested_pid) the_lnet.ln_me_containers = recs; - recs = lnet_res_containers_create(LNET_COOKIE_TYPE_MD, LNET_FL_MAX_MDS, - sizeof(lnet_libmd_t)); + recs = lnet_res_containers_create(LNET_COOKIE_TYPE_MD); if (recs == NULL) { rc = -ENOMEM; goto failed; @@ -1171,15 +1107,14 @@ lnet_startup_lndnis(void) /** * Initialize LNet library. * - * Only userspace program needs to call this function - it's automatically - * called in the kernel at module loading time. Caller has to call LNetFini() - * after a call to LNetInit(), if and only if the latter returned 0. It must - * be called exactly once. + * Automatically called at module loading time. Caller has to call + * lnet_fini() after a call to lnet_init(), if and only if the latter + * returned 0. It must be called exactly once. * * \return 0 on success, and -ve on failures. */ int -LNetInit(void) +lnet_init(void) { int rc; @@ -1232,19 +1167,16 @@ LNetInit(void) lnet_register_lnd(&the_lolnd); return 0; } -EXPORT_SYMBOL(LNetInit); +EXPORT_SYMBOL(lnet_init); /** * Finalize LNet library. * - * Only userspace program needs to call this function. It can be called - * at most once. - * - * \pre LNetInit() called with success. - * \pre All LNet users called LNetNIFini() for matching LNetNIInit() calls. + * \pre lnet_init() called with success. + * \pre All LNet users called lnet_fini() for matching lnet_init() calls. */ void -LNetFini(void) +lnet_fini(void) { LASSERT(the_lnet.ln_init); LASSERT(the_lnet.ln_refcount == 0); @@ -1256,7 +1188,7 @@ LNetFini(void) the_lnet.ln_init = 0; } -EXPORT_SYMBOL(LNetFini); +EXPORT_SYMBOL(lnet_fini); /** * Set LNet PID and start LNet interfaces, routing, and forwarding. @@ -1290,8 +1222,6 @@ LNetNIInit(lnet_pid_t requested_pid) goto out; } - lnet_get_tunables(); - if (requested_pid == LNET_PID_ANY) { /* Don't instantiate LNET just for me */ rc = -ENETDOWN; diff --git a/drivers/staging/lustre/lnet/lnet/lib-eq.c b/drivers/staging/lustre/lnet/lnet/lib-eq.c index 5470148..fabca5d 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-eq.c +++ b/drivers/staging/lustre/lnet/lnet/lib-eq.c @@ -191,7 +191,7 @@ LNetEQFree(lnet_handle_eq_t eqh) lnet_res_lh_invalidate(&eq->eq_lh); list_del(&eq->eq_list); - lnet_eq_free_locked(eq); + lnet_eq_free(eq); out: lnet_eq_wait_unlock(); lnet_res_unlock(LNET_LOCK_EX); diff --git a/drivers/staging/lustre/lnet/lnet/lib-md.c b/drivers/staging/lustre/lnet/lnet/lib-md.c index 89d660f..57ede1b 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-md.c +++ b/drivers/staging/lustre/lnet/lnet/lib-md.c @@ -82,7 +82,7 @@ lnet_md_unlink(lnet_libmd_t *md) LASSERT(!list_empty(&md->md_list)); list_del_init(&md->md_list); - lnet_md_free_locked(md); + lnet_md_free(md); } static int @@ -320,7 +320,7 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd, return 0; failed: - lnet_md_free_locked(md); + lnet_md_free(md); lnet_res_unlock(cpt); return rc; @@ -381,7 +381,7 @@ LNetMDBind(lnet_md_t umd, lnet_unlink_t unlink, lnet_handle_md_t *handle) return 0; failed: - lnet_md_free_locked(md); + lnet_md_free(md); lnet_res_unlock(cpt); return rc; diff --git a/drivers/staging/lustre/lnet/lnet/lib-me.c b/drivers/staging/lustre/lnet/lnet/lib-me.c index a3f9292..823df95 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-me.c +++ b/drivers/staging/lustre/lnet/lnet/lib-me.c @@ -172,7 +172,7 @@ LNetMEInsert(lnet_handle_me_t current_meh, current_me = lnet_handle2me(¤t_meh); if (current_me == NULL) { - lnet_me_free_locked(new_me); + lnet_me_free(new_me); lnet_res_unlock(cpt); return -ENOENT; @@ -183,7 +183,7 @@ LNetMEInsert(lnet_handle_me_t current_meh, ptl = the_lnet.ln_portals[current_me->me_portal]; if (lnet_ptl_is_unique(ptl)) { /* nosense to insertion on unique portal */ - lnet_me_free_locked(new_me); + lnet_me_free(new_me); lnet_res_unlock(cpt); return -EPERM; } @@ -276,23 +276,5 @@ lnet_me_unlink(lnet_me_t *me) } lnet_res_lh_invalidate(&me->me_lh); - lnet_me_free_locked(me); + lnet_me_free(me); } - -#if 0 -static void -lib_me_dump(lnet_me_t *me) -{ - CWARN("Match Entry %p (%#llx)\n", me, - me->me_lh.lh_cookie); - - CWARN("\tMatch/Ignore\t= %016lx / %016lx\n", - me->me_match_bits, me->me_ignore_bits); - - CWARN("\tMD\t= %p\n", me->md); - CWARN("\tprev\t= %p\n", - list_entry(me->me_list.prev, lnet_me_t, me_list)); - CWARN("\tnext\t= %p\n", - list_entry(me->me_list.next, lnet_me_t, me_list)); -} -#endif diff --git a/drivers/staging/lustre/lnet/lnet/lib-msg.c b/drivers/staging/lustre/lnet/lnet/lib-msg.c index a46ccbf..41a5900 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-msg.c +++ b/drivers/staging/lustre/lnet/lnet/lib-msg.c @@ -427,7 +427,7 @@ lnet_complete_msg_locked(lnet_msg_t *msg, int cpt) } lnet_msg_decommit(msg, cpt, status); - lnet_msg_free_locked(msg); + lnet_msg_free(msg); return 0; } @@ -559,35 +559,17 @@ lnet_msg_container_cleanup(struct lnet_msg_container *container) sizeof(*container->msc_finalizers)); container->msc_finalizers = NULL; } -#ifdef LNET_USE_LIB_FREELIST - lnet_freelist_fini(&container->msc_freelist); -#endif container->msc_init = 0; } int lnet_msg_container_setup(struct lnet_msg_container *container, int cpt) { - int rc; - container->msc_init = 1; INIT_LIST_HEAD(&container->msc_active); INIT_LIST_HEAD(&container->msc_finalizing); -#ifdef LNET_USE_LIB_FREELIST - memset(&container->msc_freelist, 0, sizeof(lnet_freelist_t)); - - rc = lnet_freelist_init(&container->msc_freelist, - LNET_FL_MAX_MSGS, sizeof(lnet_msg_t)); - if (rc != 0) { - CERROR("Failed to init freelist for message container\n"); - lnet_msg_container_cleanup(container); - return rc; - } -#else - rc = 0; -#endif /* number of CPUs */ container->msc_nfinalizers = cfs_cpt_weight(lnet_cpt_table(), cpt); @@ -601,7 +583,7 @@ lnet_msg_container_setup(struct lnet_msg_container *container, int cpt) return -ENOMEM; } - return rc; + return 0; } void diff --git a/drivers/staging/lustre/lnet/lnet/module.c b/drivers/staging/lustre/lnet/lnet/module.c index 72b7fbc..bc74738 100644 --- a/drivers/staging/lustre/lnet/lnet/module.c +++ b/drivers/staging/lustre/lnet/lnet/module.c @@ -117,7 +117,7 @@ init_lnet(void) mutex_init(&lnet_config_mutex); - rc = LNetInit(); + rc = lnet_init(); if (rc != 0) { CERROR("LNetInit: error %d\n", rc); return rc; @@ -143,7 +143,7 @@ fini_lnet(void) rc = libcfs_deregister_ioctl(&lnet_ioctl_handler); LASSERT(rc == 0); - LNetFini(); + lnet_fini(); } MODULE_AUTHOR("Peter J. Braam "); diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index 8510bae..6acaaae 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -24,8 +24,6 @@ #define DEBUG_SUBSYSTEM S_LNET #include "../../include/linux/lnet/lib-lnet.h" -#if defined(LNET_ROUTER) - #define LNET_NRB_TINY_MIN 512 /* min value for each CPT */ #define LNET_NRB_TINY (LNET_NRB_TINY_MIN * 4) #define LNET_NRB_SMALL_MIN 4096 /* min value for each CPT */ @@ -70,15 +68,6 @@ lnet_peer_buffer_credits(lnet_ni_t *ni) /* forward ref's */ static int lnet_router_checker(void *); -#else - -int -lnet_peer_buffer_credits(lnet_ni_t *ni) -{ - return 0; -} - -#endif static int check_routers_before_use; module_param(check_routers_before_use, int, 0444); @@ -1163,9 +1152,6 @@ lnet_prune_rc_data(int wait_unlink) lnet_net_unlock(LNET_LOCK_EX); } - -#if defined(LNET_ROUTER) - static int lnet_router_checker(void *arg) { @@ -1573,134 +1559,3 @@ lnet_notify(lnet_ni_t *ni, lnet_nid_t nid, int alive, unsigned long when) return 0; } EXPORT_SYMBOL(lnet_notify); - -void -lnet_get_tunables(void) -{ -} - -#else - -int -lnet_notify(lnet_ni_t *ni, lnet_nid_t nid, int alive, unsigned long when) -{ - return -EOPNOTSUPP; -} - -void -lnet_router_checker(void) -{ - static time_t last; - static int running; - - time_t now = get_seconds(); - int interval = now - last; - int rc; - __u64 version; - lnet_peer_t *rtr; - - /* It's no use to call me again within a sec - all intervals and - * timeouts are measured in seconds */ - if (last != 0 && interval < 2) - return; - - if (last != 0 && - interval > max(live_router_check_interval, - dead_router_check_interval)) - CNETERR("Checker(%d/%d) not called for %d seconds\n", - live_router_check_interval, dead_router_check_interval, - interval); - - LASSERT(LNET_CPT_NUMBER == 1); - - lnet_net_lock(0); - LASSERT(!running); /* recursion check */ - running = 1; - lnet_net_unlock(0); - - last = now; - - if (the_lnet.ln_rc_state == LNET_RC_STATE_STOPPING) - lnet_prune_rc_data(0); /* unlink all rcd and nowait */ - - /* consume all pending events */ - while (1) { - int i; - lnet_event_t ev; - - /* NB ln_rc_eqh must be the 1st in 'eventqs' otherwise the - * recursion breaker in LNetEQPoll would fail */ - rc = LNetEQPoll(&the_lnet.ln_rc_eqh, 1, 0, &ev, &i); - if (rc == 0) /* no event pending */ - break; - - /* NB a lost SENT prevents me from pinging a router again */ - if (rc == -EOVERFLOW) { - CERROR("Dropped an event!!!\n"); - abort(); - } - - LASSERT(rc == 1); - - lnet_router_checker_event(&ev); - } - - if (the_lnet.ln_rc_state == LNET_RC_STATE_STOPPING) { - lnet_prune_rc_data(1); /* release rcd */ - the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN; - running = 0; - return; - } - - LASSERT(the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING); - - lnet_net_lock(0); - - version = the_lnet.ln_routers_version; - list_for_each_entry(rtr, &the_lnet.ln_routers, lp_rtr_list) { - lnet_ping_router_locked(rtr); - LASSERT(version == the_lnet.ln_routers_version); - } - - lnet_net_unlock(0); - - running = 0; /* lock only needed for the recursion check */ -} - -/* NB lnet_peers_start_down depends on me, - * so must be called before any peer creation */ -void -lnet_get_tunables(void) -{ - char *s; - - s = getenv("LNET_ROUTER_PING_TIMEOUT"); - if (s != NULL) - router_ping_timeout = atoi(s); - - s = getenv("LNET_LIVE_ROUTER_CHECK_INTERVAL"); - if (s != NULL) - live_router_check_interval = atoi(s); - - s = getenv("LNET_DEAD_ROUTER_CHECK_INTERVAL"); - if (s != NULL) - dead_router_check_interval = atoi(s); - - /* This replaces old lnd_notify mechanism */ - check_routers_before_use = 1; - if (dead_router_check_interval <= 0) - dead_router_check_interval = 30; -} - -void -lnet_rtrpools_free(void) -{ -} - -int -lnet_rtrpools_alloc(int im_a_arouter) -{ - return 0; -} - -#endif diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index e2805bd..b32bc54 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -56,8 +56,8 @@ */ #include "../../include/linux/libcfs/libcfs.h" -// #include -#include "../../include/linux/lnet/lnet.h" +#include "../../include/linux/lnet/nidstr.h" +#include "../../include/linux/lnet/api.h" #include "lustre/lustre_idl.h" #include "lustre_ha.h" #include "lustre_sec.h" -- 1.7.1 From jsimmons at infradead.org Thu May 21 22:46:18 2015 From: jsimmons at infradead.org (James Simmons) Date: Thu, 21 May 2015 18:46:18 -0400 Subject: [lustre-devel] [PATCH 3/3] staging:lustre: cleanup libcfs lock handling In-Reply-To: References: Message-ID: <1432248378-28912-4-git-send-email-jsimmons@infradead.org> Previously with libcfs being built for user land and kernel space wrappers were created to transparently handle locking. Now that user land support has been removed we delete all those locking wrappers with this patch. Many of those changes landed upstream but some nice cleanups still remain that are pushed in this patch. Signed-off-by: James Simmons Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6245 Reviewed-on: http://review.whamcloud.com/13793 Reviewed-by: Dmitry Eremin Reviewed-by: John L. Hammond Reviewed-by: Andreas Dilger --- drivers/staging/lustre/lnet/lnet/acceptor.c | 2 +- drivers/staging/lustre/lustre/libcfs/fail.c | 2 +- .../lustre/lustre/libcfs/linux/linux-tracefile.c | 4 +--- drivers/staging/lustre/lustre/libcfs/module.c | 11 ++--------- drivers/staging/lustre/lustre/libcfs/tracefile.c | 2 +- 5 files changed, 6 insertions(+), 15 deletions(-) diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index c44d3e0..a7c5785 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -35,9 +35,9 @@ */ #define DEBUG_SUBSYSTEM S_LNET +#include #include "../../include/linux/lnet/lib-lnet.h" - static int accept_port = 988; static int accept_backlog = 127; static int accept_timeout = 5; diff --git a/drivers/staging/lustre/lustre/libcfs/fail.c b/drivers/staging/lustre/lustre/libcfs/fail.c index 92444b0..7b7fc21 100644 --- a/drivers/staging/lustre/lustre/libcfs/fail.c +++ b/drivers/staging/lustre/lustre/libcfs/fail.c @@ -41,7 +41,7 @@ EXPORT_SYMBOL(cfs_fail_loc); unsigned int cfs_fail_val = 0; EXPORT_SYMBOL(cfs_fail_val); -wait_queue_head_t cfs_race_waitq; +DECLARE_WAIT_QUEUE_HEAD(cfs_race_waitq); EXPORT_SYMBOL(cfs_race_waitq); int cfs_race_state; diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c index 483cbc8..eb10e3b 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tracefile.c @@ -49,7 +49,7 @@ static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = { char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX]; -struct rw_semaphore cfs_tracefile_sem; +static DECLARE_RWSEM(cfs_tracefile_sem); int cfs_tracefile_init_arch(void) { @@ -57,8 +57,6 @@ int cfs_tracefile_init_arch(void) int j; struct cfs_trace_cpu_data *tcd; - init_rwsem(&cfs_tracefile_sem); - /* initialize trace_data */ memset(cfs_trace_data, 0, sizeof(cfs_trace_data)); for (i = 0; i < CFS_TCD_TYPE_MAX; i++) { diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c index f0ee76a..22fe9cf 100644 --- a/drivers/staging/lustre/lustre/libcfs/module.c +++ b/drivers/staging/lustre/lustre/libcfs/module.c @@ -67,8 +67,6 @@ MODULE_DESCRIPTION("Portals v3.1"); MODULE_LICENSE("GPL"); extern struct miscdevice libcfs_dev; -extern struct rw_semaphore cfs_tracefile_sem; -extern struct mutex cfs_trace_thread_mutex; extern struct cfs_wi_sched *cfs_sched_rehash; extern void libcfs_init_nidstrings(void); @@ -249,8 +247,8 @@ static int libcfs_psdev_release(unsigned long flags, void *args) return 0; } -static struct rw_semaphore ioctl_list_sem; -static struct list_head ioctl_list; +static DECLARE_RWSEM(ioctl_list_sem); +static LIST_HEAD(ioctl_list); int libcfs_register_ioctl(struct libcfs_ioctl_handler *hand) { @@ -393,11 +391,6 @@ static int init_libcfs_module(void) libcfs_arch_init(); libcfs_init_nidstrings(); - init_rwsem(&cfs_tracefile_sem); - mutex_init(&cfs_trace_thread_mutex); - init_rwsem(&ioctl_list_sem); - INIT_LIST_HEAD(&ioctl_list); - init_waitqueue_head(&cfs_race_waitq); rc = libcfs_debug_init(5 * 1024 * 1024); if (rc < 0) { diff --git a/drivers/staging/lustre/lustre/libcfs/tracefile.c b/drivers/staging/lustre/lustre/libcfs/tracefile.c index c86394f..6ee2adc 100644 --- a/drivers/staging/lustre/lustre/libcfs/tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/tracefile.c @@ -52,7 +52,7 @@ union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline char cfs_tracefile[TRACEFILE_NAME_SIZE]; long long cfs_tracefile_size = CFS_TRACEFILE_SIZE; static struct tracefiled_ctl trace_tctl; -struct mutex cfs_trace_thread_mutex; +static DEFINE_MUTEX(cfs_trace_thread_mutex); static int thread_running; static atomic_t cfs_tage_allocated = ATOMIC_INIT(0); -- 1.7.1 From dan.carpenter at oracle.com Fri May 22 11:15:36 2015 From: dan.carpenter at oracle.com (Dan Carpenter) Date: Fri, 22 May 2015 14:15:36 +0300 Subject: [lustre-devel] [PATCH 1/3] staging:lustre: remove tcpip abstraction from libcfs In-Reply-To: <1432248378-28912-2-git-send-email-jsimmons@infradead.org> References: <1432248378-28912-2-git-send-email-jsimmons@infradead.org> Message-ID: <20150522111536.GA19434@mwanda> This patch does a lot of stuff all at once and it is hard to review. It could easily be broken into patches which are easy to review. > @@ -1378,15 +1378,15 @@ ksocknal_create_conn(lnet_ni_t *ni, ksock_route_t *route, > ksocknal_txlist_done(ni, &zombies, 1); > ksocknal_peer_decref(peer); > > - failed_1: > +failed_1: Do unrelated white space changes in a different patch. It just makes reviewing complicated to mix easy to review white space changes in with everything else. > if (hello != NULL) > LIBCFS_FREE(hello, offsetof(ksock_hello_msg_t, > kshm_ips[LNET_MAX_INTERFACES])); > > LIBCFS_FREE(conn, sizeof(*conn)); > > - failed_0: > - libcfs_sock_release(sock); > +failed_0: > + sock_release(sock); Do a rename patch by itself. You can rename a bunch of functions at the same time, that's fine. Personally, you can even move the functions between files, that's also fine with me and doesn't complicate my review. Ok in this next section we move functions around and rename them but also introduce some bad changes in the new function. > +static int > +lnet_sock_ioctl(int cmd, unsigned long arg) > +{ > + struct file *sock_filp; > + struct socket *sock; > + int fd = -1; > + int rc; > + > + rc = sock_create(PF_INET, SOCK_STREAM, 0, &sock); > + if (rc != 0) { > + CERROR("Can't create socket: %d\n", rc); > + return rc; > + } > + > + sock_filp = sock_alloc_file(sock, 0, NULL); > + if (!sock_filp) { sock_alloc_file() never returns NULL, only valid pointers on success or ERR_PTRs on failue. > + rc = -ENOMEM; > + sock_release(sock); > + goto out; > + } > + > + rc = kernel_sock_unlocked_ioctl(sock_filp, cmd, arg); This is an unrelated cleanup. Do it in a different patch. > + > + fput(sock_filp); > +out: > + if (fd >= 0) > + sys_close(fd); This is a new change as well. "fd" is always -1 so this is dead code. > + return rc; > +} > + Here is the old function: > -static int > -libcfs_sock_ioctl(int cmd, unsigned long arg) > -{ > - mm_segment_t oldmm = get_fs(); > - struct socket *sock; > - int rc; > - struct file *sock_filp; > - > - rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); > - if (rc != 0) { > - CERROR ("Can't create socket: %d\n", rc); > - return rc; > - } > - > - sock_filp = sock_alloc_file(sock, 0, NULL); > - if (IS_ERR(sock_filp)) { This check was correct in the original. > - sock_release(sock); > - rc = PTR_ERR(sock_filp); > - goto out; > - } > - > - set_fs(KERNEL_DS); > - if (sock_filp->f_op->unlocked_ioctl) > - rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg); > - set_fs(oldmm); > - > - fput(sock_filp); > -out: > - return rc; > -} This patch has some bug fixes as well. Those should be sent as one patch per bugfix with a proper changelog. regards, dan carpenter From dan.carpenter at oracle.com Fri May 22 13:00:19 2015 From: dan.carpenter at oracle.com (Dan Carpenter) Date: Fri, 22 May 2015 16:00:19 +0300 Subject: [lustre-devel] [PATCH 2/3] staging:lustre: remove kernel defines in userland headers In-Reply-To: <1432248378-28912-3-git-send-email-jsimmons@infradead.org> References: <1432248378-28912-3-git-send-email-jsimmons@infradead.org> Message-ID: <20150522130019.GN4150@mwanda> This patch seems fine but it would also be better if it were broken up into easy to review patches. [patch 1] delete LNET_USE_LIB_FREELIST code This is theortetically what this patch does except it does tons of other things as well. Patches which delete whole functions, #defines or from #ifdef to #endif are normally easy to review. When there are + lines it is hard. [patch 2] move things around (i guess)? [patch 3] white space fixes [patch 4] get rid of lnet_eq_free_locked() and macro friends. [patch 5] rename CamelCase functions [patch 6] clean up lnet_msg_container_setup() > typedef struct lnet_peer { > - struct list_head lp_hashlist; /* chain on peer hash */ > - struct list_head lp_txq; /* messages blocking for tx credits */ > - struct list_head lp_rtrq; /* messages blocking for router credits */ > - struct list_head lp_rtr_list; /* chain on router list */ > - int lp_txcredits; /* # tx credits available */ > - int lp_mintxcredits; /* low water mark */ > - int lp_rtrcredits; /* # router credits */ > - int lp_minrtrcredits; /* low water mark */ > - unsigned int lp_alive:1; /* alive/dead? */ > - unsigned int lp_notify:1; /* notification outstanding? */ > - unsigned int lp_notifylnd:1; /* outstanding notification for LND? */ > - unsigned int lp_notifying:1; /* some thread is handling notification */ > - unsigned int lp_ping_notsent; /* SEND event outstanding from ping */ > - int lp_alive_count; /* # times router went dead<->alive */ > - long lp_txqnob; /* bytes queued for sending */ > - unsigned long lp_timestamp; /* time of last aliveness news */ > - unsigned long lp_ping_timestamp; /* time of last ping attempt */ > - unsigned long lp_ping_deadline; /* != 0 if ping reply expected */ > - unsigned long lp_last_alive; /* when I was last alive */ > - unsigned long lp_last_query; /* when lp_ni was queried last time */ > - lnet_ni_t *lp_ni; /* interface peer is on */ > - lnet_nid_t lp_nid; /* peer's NID */ > - int lp_refcount; /* # refs */ > - int lp_cpt; /* CPT this peer attached on */ > + /* chain on peer hash */ > + struct list_head lp_hashlist; > + /* messages blocking for tx credits */ > + struct list_head lp_txq; > + /* messages blocking for router credits */ > + struct list_head lp_rtrq; > + /* chain on router list */ > + struct list_head lp_rtr_list; > + /* # tx credits available */ > + int lp_txcredits; > + /* low water mark */ > + int lp_mintxcredits; > + /* # router credits */ > + int lp_rtrcredits; > + /* low water mark */ > + int lp_minrtrcredits; > + /* alive/dead? */ > + unsigned int lp_alive:1; > + /* notification outstanding? */ > + unsigned int lp_notify:1; > + /* outstanding notification for LND? */ > + unsigned int lp_notifylnd:1; > + /* some thread is handling notification */ > + unsigned int lp_notifying:1; > + /* SEND event outstanding from ping */ > + unsigned int lp_ping_notsent; > + /* # times router went dead<->alive */ > + int lp_alive_count; > + /* bytes queued for sending */ > + long lp_txqnob; > + /* time of last aliveness news */ > + unsigned long lp_timestamp; > + /* time of last ping attempt */ > + unsigned long lp_ping_timestamp; > + /* != 0 if ping reply expected */ > + unsigned long lp_ping_deadline; > + /* when I was last alive */ > + unsigned long lp_last_alive; > + /* when lp_ni was queried last time */ > + unsigned long lp_last_query; > + /* interface peer is on */ > + lnet_ni_t *lp_ni; > + /* peer's NID */ > + lnet_nid_t lp_nid; > + /* # refs */ > + int lp_refcount; > + /* CPT this peer attached on */ > + int lp_cpt; This new block of declarations is uglier than the original. Don't make things uglier. regards, dan carpenter From dan.carpenter at oracle.com Fri May 22 15:39:29 2015 From: dan.carpenter at oracle.com (Dan Carpenter) Date: Fri, 22 May 2015 18:39:29 +0300 Subject: [lustre-devel] [PATCH 1/3] staging:lustre: remove tcpip abstraction from libcfs In-Reply-To: <4ebf8ca4e2dd466c8ff68291b6670515@EXCHCS32.ornl.gov> References: <1432248378-28912-2-git-send-email-jsimmons@infradead.org> <20150522111536.GA19434@mwanda> <4ebf8ca4e2dd466c8ff68291b6670515@EXCHCS32.ornl.gov> Message-ID: <20150522153929.GW22558@mwanda> On Fri, May 22, 2015 at 03:08:44PM +0000, Simmons, James A. wrote: > >This patch does a lot of stuff all at once and it is hard to review. It > >could easily be broken into patches which are easy to review. > > I have more very large patches. With breaking them up that means you are > going to see hundreds of patches coming from me. > The problem here is that we have two upstreams which have diverged and you're hopefully merging them into one upstream for the future. Breaking things up into patches is a pain and it basically means you have to do a lot of the work a second time. It sucks for you and I totally understand that... :( We regulary review 100+ patch series so that's not a big deal. We still have to review a ball of code with it broken up or not broken up but when it's broken up then I have scripts to strip out much of the mechanical changes. > >Ok in this next section we move functions around and rename them but > >also introduce some bad changes in the new function. > > Thanks for pointing out these bugs. We are still carrying these bugs in the > OpenSFS branch. Once you approve these changes I will sync up lib-socket.c > in the OpenSFS branch. > > P.S > Does the 3rd patch look okay to you? Yeah. That looks fine. regards, dan carpenter From jsimmons at infradead.org Fri May 22 18:32:26 2015 From: jsimmons at infradead.org (James Simmons) Date: Fri, 22 May 2015 14:32:26 -0400 Subject: [lustre-devel] [PATCH 0/6] staging:lustre: remove tcpip abstraction from libcfs In-Reply-To: References: Message-ID: <1432319552-10479-1-git-send-email-jsimmons@infradead.org> Since libcfs no longer builds for user land we can move the TCPIP abstraction that exist to the LNET layer which is the only place that uses it. Also the migrated code will use native linux kernel APIs directly instead of with wrappers. Signed-off-by: James Simmons Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6245 Reviewed-on: http://review.whamcloud.com/13760 Reviewed-by: John L. Hammond Reviewed-by: Isaac Huang Reviewed-by: Oleg Drokin James Simmons (6): staging:lustre:remove useless libcfs_sock_release staging:lustre:remove useless libcfs_sock_abort_accept staging:lustre: rename tcpip handling functions to lnet_* prefix staging:lustre: use available kernel wrappers in lib-socket.c staging:lustre: style cleanups for lib-socket.c staging:lustre: Update license and copyright for lib-socket.c .../staging/lustre/include/linux/libcfs/libcfs.h | 17 - .../staging/lustre/include/linux/lnet/lib-lnet.h | 16 + .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 17 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.h | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 6 +- .../lustre/lnet/klnds/socklnd/socklnd_lib-linux.c | 15 +- .../lustre/lnet/klnds/socklnd/socklnd_proto.c | 43 ++-- drivers/staging/lustre/lnet/lnet/acceptor.c | 55 ++-- drivers/staging/lustre/lnet/lnet/config.c | 21 +- drivers/staging/lustre/lnet/lnet/lib-socket.c | 323 +++++++++----------- 11 files changed, 236 insertions(+), 281 deletions(-) From jsimmons at infradead.org Fri May 22 18:32:27 2015 From: jsimmons at infradead.org (James Simmons) Date: Fri, 22 May 2015 14:32:27 -0400 Subject: [lustre-devel] [PATCH 1/6] staging:lustre:remove useless libcfs_sock_release In-Reply-To: References: Message-ID: <1432319552-10479-2-git-send-email-jsimmons@infradead.org> There is no reason to have a one line exported function libcfs_sock_release. Instead we can call sock_release directly. Signed-off-by: James Simmons --- .../staging/lustre/include/linux/libcfs/libcfs.h | 1 - .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.h | 2 +- drivers/staging/lustre/lnet/lnet/acceptor.c | 8 ++++---- drivers/staging/lustre/lnet/lnet/lib-socket.c | 8 -------- 5 files changed, 6 insertions(+), 15 deletions(-) diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index 947df7e..7a7a525 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -103,7 +103,6 @@ int libcfs_sock_getbuf(struct socket *socket, int *txbufsize, int *rxbufsize); int libcfs_sock_getaddr(struct socket *socket, int remote, __u32 *ip, int *port); int libcfs_sock_write(struct socket *sock, void *buffer, int nob, int timeout); int libcfs_sock_read(struct socket *sock, void *buffer, int nob, int timeout); -void libcfs_sock_release(struct socket *sock); /* need both kernel and user-land acceptor */ #define LNET_ACCEPTOR_MIN_RESERVED_PORT 512 diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index 7586b7e..e642752 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -1386,7 +1386,7 @@ ksocknal_create_conn(lnet_ni_t *ni, ksock_route_t *route, LIBCFS_FREE(conn, sizeof(*conn)); failed_0: - libcfs_sock_release(sock); + sock_release(sock); return rc; } diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index c54c995..f3b4923 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -453,7 +453,7 @@ ksocknal_connsock_decref(ksock_conn_t *conn) LASSERT(atomic_read(&conn->ksnc_sock_refcount) > 0); if (atomic_dec_and_test(&conn->ksnc_sock_refcount)) { LASSERT(conn->ksnc_closing); - libcfs_sock_release(conn->ksnc_sock); + sock_release(conn->ksnc_sock); conn->ksnc_sock = NULL; ksocknal_finalize_zcreq(conn); } diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 72fd1bf..14673ef 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -197,7 +197,7 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, goto failed; failed_sock: - libcfs_sock_release(sock); + sock_release(sock); failed: lnet_connect_console_error(rc, peer_nid, peer_ip, peer_port); return rc; @@ -379,7 +379,7 @@ lnet_acceptor(void *arg) /* maybe we're waken up with libcfs_sock_abort_accept() */ if (lnet_acceptor_state.pta_shutdown) { - libcfs_sock_release(newsock); + sock_release(newsock); break; } @@ -410,10 +410,10 @@ lnet_acceptor(void *arg) continue; failed: - libcfs_sock_release(newsock); + sock_release(newsock); } - libcfs_sock_release(lnet_acceptor_state.pta_sock); + sock_release(lnet_acceptor_state.pta_sock); lnet_acceptor_state.pta_sock = NULL; CDEBUG(D_NET, "Acceptor stopping\n"); diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c index 7f80612..259db61 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c @@ -614,11 +614,3 @@ libcfs_sock_connect (struct socket **sockp, int *fatal, } EXPORT_SYMBOL(libcfs_sock_connect); - -void -libcfs_sock_release (struct socket *sock) -{ - sock_release(sock); -} - -EXPORT_SYMBOL(libcfs_sock_release); -- 1.7.1 From jsimmons at infradead.org Fri May 22 18:32:28 2015 From: jsimmons at infradead.org (James Simmons) Date: Fri, 22 May 2015 14:32:28 -0400 Subject: [lustre-devel] [PATCH 2/6] staging:lustre:remove useless libcfs_sock_abort_accept In-Reply-To: References: Message-ID: <1432319552-10479-3-git-send-email-jsimmons@infradead.org> Another one of those silly one line wrappers which is not needed. Replace libcfs_sock_abort_accept wrapper with a direct call to wake_up_all on the lnet_acceptor_state sock. Signed-off-by: James Simmons --- .../staging/lustre/include/linux/libcfs/libcfs.h | 1 - drivers/staging/lustre/lnet/lnet/acceptor.c | 4 ++-- drivers/staging/lustre/lnet/lnet/lib-socket.c | 8 -------- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index 7a7a525..854ba6a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -94,7 +94,6 @@ int libcfs_ipif_enumerate(char ***names); void libcfs_ipif_free_enumeration(char **names, int n); int libcfs_sock_listen(struct socket **sockp, __u32 ip, int port, int backlog); int libcfs_sock_accept(struct socket **newsockp, struct socket *sock); -void libcfs_sock_abort_accept(struct socket *sock); int libcfs_sock_connect(struct socket **sockp, int *fatal, __u32 local_ip, int local_port, __u32 peer_ip, int peer_port); diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 14673ef..8c6726a 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -377,7 +377,7 @@ lnet_acceptor(void *arg) continue; } - /* maybe we're waken up with libcfs_sock_abort_accept() */ + /* maybe the LNet acceptor thread has been waken */ if (lnet_acceptor_state.pta_shutdown) { sock_release(newsock); break; @@ -493,7 +493,7 @@ lnet_acceptor_stop(void) return; lnet_acceptor_state.pta_shutdown = 1; - libcfs_sock_abort_accept(lnet_acceptor_state.pta_sock); + wake_up_all(sk_sleep(lnet_acceptor_state.pta_sock->sk)); /* block until acceptor signals exit */ wait_for_completion(&lnet_acceptor_state.pta_signal); diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c index 259db61..bb8d9c2 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c @@ -568,14 +568,6 @@ libcfs_sock_accept (struct socket **newsockp, struct socket *sock) EXPORT_SYMBOL(libcfs_sock_accept); -void -libcfs_sock_abort_accept (struct socket *sock) -{ - wake_up_all(sk_sleep(sock->sk)); -} - -EXPORT_SYMBOL(libcfs_sock_abort_accept); - int libcfs_sock_connect (struct socket **sockp, int *fatal, __u32 local_ip, int local_port, -- 1.7.1 From jsimmons at infradead.org Fri May 22 18:32:30 2015 From: jsimmons at infradead.org (James Simmons) Date: Fri, 22 May 2015 14:32:30 -0400 Subject: [lustre-devel] [PATCH 4/6] staging:lustre: use available kernel wrappers in lib-socket.c In-Reply-To: References: Message-ID: <1432319552-10479-5-git-send-email-jsimmons@infradead.org> Instead of handling calls to struct proto ourselves we can use equivalent kernel wrappers. No wrapper exist for unlocked ioctl handling so we create one here for our use. I expect some day that function will be integrated into sock.c. Signed-off-by: James Simmons --- drivers/staging/lustre/lnet/lnet/lib-socket.c | 47 ++++++++++++++++--------- 1 files changed, 30 insertions(+), 17 deletions(-) diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c index 2e87168..2d46a69 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c @@ -35,22 +35,37 @@ */ #define DEBUG_SUBSYSTEM S_LNET -#include "../../include/linux/libcfs/libcfs.h" -#include "../../include/linux/lnet/lib-lnet.h" - #include #include +#include #include +#include /* For sys_open & sys_close */ #include +#include + +#include "../../include/linux/libcfs/libcfs.h" +#include "../../include/linux/lnet/lib-lnet.h" + +static int +kernel_sock_unlocked_ioctl(struct file *filp, int cmd, unsigned long arg) +{ + mm_segment_t oldfs = get_fs(); + int err; + + set_fs(KERNEL_DS); + err = filp->f_op->unlocked_ioctl(filp, cmd, arg); + set_fs(oldfs); + + return err; +} static int lnet_sock_ioctl(int cmd, unsigned long arg) { - mm_segment_t oldmm = get_fs(); + struct file *sock_filp; struct socket *sock; int rc; - struct file *sock_filp; rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); if (rc != 0) { @@ -65,10 +80,7 @@ lnet_sock_ioctl(int cmd, unsigned long arg) goto out; } - set_fs(KERNEL_DS); - if (sock_filp->f_op->unlocked_ioctl) - rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg); - set_fs(oldmm); + rc = kernel_sock_unlocked_ioctl(sock_filp, cmd, arg); fput(sock_filp); out: @@ -398,8 +410,8 @@ lnet_sock_create (struct socket **sockp, int *fatal, locaddr.sin_addr.s_addr = (local_ip == 0) ? INADDR_ANY : htonl(local_ip); - rc = sock->ops->bind(sock, (struct sockaddr *)&locaddr, - sizeof(locaddr)); + rc = kernel_bind(sock, (struct sockaddr *)&locaddr, + sizeof(locaddr)); if (rc == -EADDRINUSE) { CDEBUG(D_NET, "Port %d already in use\n", local_port); *fatal = 0; @@ -459,8 +471,10 @@ lnet_sock_getaddr (struct socket *sock, bool remote, __u32 *ip, int *port) int len = sizeof (sin); int rc; - rc = sock->ops->getname (sock, (struct sockaddr *)&sin, &len, - remote ? 2 : 0); + if (remote) + rc = kernel_getpeername(sock, (struct sockaddr *)&sin, &len); + else + rc = kernel_getsockname(sock, (struct sockaddr *)&sin, &len); if (rc != 0) { CERROR ("Error %d getting sock %s IP/port\n", rc, remote ? "peer" : "local"); @@ -510,7 +524,7 @@ lnet_sock_listen (struct socket **sockp, return rc; } - rc = (*sockp)->ops->listen(*sockp, backlog); + rc = kernel_listen(*sockp, backlog); if (rc == 0) return 0; @@ -581,9 +595,8 @@ lnet_sock_connect (struct socket **sockp, int *fatal, srvaddr.sin_port = htons(peer_port); srvaddr.sin_addr.s_addr = htonl(peer_ip); - rc = (*sockp)->ops->connect(*sockp, - (struct sockaddr *)&srvaddr, sizeof(srvaddr), - 0); + rc = kernel_connect(*sockp, (struct sockaddr *)&srvaddr, + sizeof(srvaddr), 0); if (rc == 0) return 0; -- 1.7.1 From jsimmons at infradead.org Fri May 22 18:32:31 2015 From: jsimmons at infradead.org (James Simmons) Date: Fri, 22 May 2015 14:32:31 -0400 Subject: [lustre-devel] [PATCH 5/6] staging:lustre: style cleanups for lib-socket.c In-Reply-To: References: Message-ID: <1432319552-10479-6-git-send-email-jsimmons@infradead.org> Handle all the style issues reported by checkpatch.pl. Remove general white spaces, spaces in function calls, etc. Signed-off-by: James Simmons --- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 4 +- drivers/staging/lustre/lnet/lnet/lib-socket.c | 210 +++++++++----------- 2 files changed, 98 insertions(+), 116 deletions(-) diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index a27dddf..caccb00 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -1378,14 +1378,14 @@ ksocknal_create_conn(lnet_ni_t *ni, ksock_route_t *route, ksocknal_txlist_done(ni, &zombies, 1); ksocknal_peer_decref(peer); - failed_1: +failed_1: if (hello != NULL) LIBCFS_FREE(hello, offsetof(ksock_hello_msg_t, kshm_ips[LNET_MAX_INTERFACES])); LIBCFS_FREE(conn, sizeof(*conn)); - failed_0: +failed_0: sock_release(sock); return rc; } diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c index 2d46a69..f0b187d 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c @@ -63,13 +63,13 @@ kernel_sock_unlocked_ioctl(struct file *filp, int cmd, unsigned long arg) static int lnet_sock_ioctl(int cmd, unsigned long arg) { - struct file *sock_filp; - struct socket *sock; - int rc; + struct file *sock_filp; + struct socket *sock; + int rc; - rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); + rc = sock_create(PF_INET, SOCK_STREAM, 0, &sock); if (rc != 0) { - CERROR ("Can't create socket: %d\n", rc); + CERROR("Can't create socket: %d\n", rc); return rc; } @@ -88,12 +88,12 @@ out: } int -lnet_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) +lnet_ipif_query(char *name, int *up, __u32 *ip, __u32 *mask) { - struct ifreq ifr; - int nob; - int rc; - __u32 val; + struct ifreq ifr; + int nob; + int rc; + __u32 val; nob = strnlen(name, IFNAMSIZ); if (nob == IFNAMSIZ) { @@ -101,7 +101,7 @@ lnet_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) return -EINVAL; } - CLASSERT (sizeof(ifr.ifr_name) >= IFNAMSIZ); + CLASSERT(sizeof(ifr.ifr_name) >= IFNAMSIZ); strcpy(ifr.ifr_name, name); rc = lnet_sock_ioctl(SIOCGIFFLAGS, (unsigned long)&ifr); @@ -116,7 +116,6 @@ lnet_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) *ip = *mask = 0; return 0; } - *up = 1; strcpy(ifr.ifr_name, name); @@ -143,23 +142,21 @@ lnet_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) return 0; } - EXPORT_SYMBOL(lnet_ipif_query); int -lnet_ipif_enumerate (char ***namesp) +lnet_ipif_enumerate(char ***namesp) { /* Allocate and fill in 'names', returning # interfaces/error */ - char **names; - int toobig; - int nalloc; - int nfound; - struct ifreq *ifr; - struct ifconf ifc; - int rc; - int nob; - int i; - + char **names; + int toobig; + int nalloc; + int nfound; + struct ifreq *ifr; + struct ifconf ifc; + int rc; + int nob; + int i; nalloc = 16; /* first guess at max interfaces */ toobig = 0; @@ -167,13 +164,14 @@ lnet_ipif_enumerate (char ***namesp) if (nalloc * sizeof(*ifr) > PAGE_CACHE_SIZE) { toobig = 1; nalloc = PAGE_CACHE_SIZE/sizeof(*ifr); - CWARN("Too many interfaces: only enumerating first %d\n", - nalloc); + CWARN("Too many interfaces: only enumerating " + "first %d\n", nalloc); } LIBCFS_ALLOC(ifr, nalloc * sizeof(*ifr)); if (ifr == NULL) { - CERROR ("ENOMEM enumerating up to %d interfaces\n", nalloc); + CERROR("ENOMEM enumerating up to %d interfaces\n", + nalloc); rc = -ENOMEM; goto out0; } @@ -183,14 +181,14 @@ lnet_ipif_enumerate (char ***namesp) rc = lnet_sock_ioctl(SIOCGIFCONF, (unsigned long)&ifc); if (rc < 0) { - CERROR ("Error %d enumerating interfaces\n", rc); + CERROR("Error %d enumerating interfaces\n", rc); goto out1; } - LASSERT (rc == 0); + LASSERT(rc == 0); nfound = ifc.ifc_len/sizeof(*ifr); - LASSERT (nfound <= nalloc); + LASSERT(nfound <= nalloc); if (nfound < nalloc || toobig) break; @@ -209,8 +207,7 @@ lnet_ipif_enumerate (char ***namesp) } for (i = 0; i < nfound; i++) { - - nob = strnlen (ifr[i].ifr_name, IFNAMSIZ); + nob = strnlen(ifr[i].ifr_name, IFNAMSIZ); if (nob == IFNAMSIZ) { /* no space for terminating NULL */ CERROR("interface name %.*s too long (%d max)\n", @@ -232,41 +229,39 @@ lnet_ipif_enumerate (char ***namesp) *namesp = names; rc = nfound; - out2: +out2: if (rc < 0) lnet_ipif_free_enumeration(names, nfound); - out1: +out1: LIBCFS_FREE(ifr, nalloc * sizeof(*ifr)); - out0: +out0: return rc; } - EXPORT_SYMBOL(lnet_ipif_enumerate); void -lnet_ipif_free_enumeration (char **names, int n) +lnet_ipif_free_enumeration(char **names, int n) { - int i; + int i; - LASSERT (n > 0); + LASSERT(n > 0); for (i = 0; i < n && names[i] != NULL; i++) LIBCFS_FREE(names[i], IFNAMSIZ); LIBCFS_FREE(names, n * sizeof(*names)); } - EXPORT_SYMBOL(lnet_ipif_free_enumeration); int -lnet_sock_write (struct socket *sock, void *buffer, int nob, int timeout) +lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout) { - int rc; - long ticks = timeout * HZ; - unsigned long then; + int rc; + long ticks = timeout * HZ; + unsigned long then; struct timeval tv; - LASSERT (nob > 0); + LASSERT(nob > 0); /* Caller may pass a zero timeout if she thinks the socket buffer is * empty enough to take the whole message immediately */ @@ -286,9 +281,10 @@ lnet_sock_write (struct socket *sock, void *buffer, int nob, int timeout) .tv_usec = ((ticks % HZ) * 1000000) / HZ }; rc = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, - (char *)&tv, sizeof(tv)); + (char *)&tv, sizeof(tv)); if (rc != 0) { - CERROR("Can't set socket send timeout %ld.%06d: %d\n", + CERROR("Can't set socket send timeout " + "%ld.%06d: %d\n", (long)tv.tv_sec, (int)tv.tv_usec, rc); return rc; } @@ -305,7 +301,7 @@ lnet_sock_write (struct socket *sock, void *buffer, int nob, int timeout) return rc; if (rc == 0) { - CERROR ("Unexpected zero rc\n"); + CERROR("Unexpected zero rc\n"); return -ECONNABORTED; } @@ -315,21 +311,20 @@ lnet_sock_write (struct socket *sock, void *buffer, int nob, int timeout) buffer = ((char *)buffer) + rc; nob -= rc; } - return 0; } EXPORT_SYMBOL(lnet_sock_write); int -lnet_sock_read (struct socket *sock, void *buffer, int nob, int timeout) +lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout) { - int rc; - long ticks = timeout * HZ; - unsigned long then; + int rc; + long ticks = timeout * HZ; + unsigned long then; struct timeval tv; - LASSERT (nob > 0); - LASSERT (ticks > 0); + LASSERT(nob > 0); + LASSERT(ticks > 0); for (;;) { struct kvec iov = { @@ -337,7 +332,7 @@ lnet_sock_read (struct socket *sock, void *buffer, int nob, int timeout) .iov_len = nob }; struct msghdr msg = { - .msg_flags = 0 + .msg_flags = 0 }; /* Set receive timeout to remaining time */ @@ -346,7 +341,7 @@ lnet_sock_read (struct socket *sock, void *buffer, int nob, int timeout) .tv_usec = ((ticks % HZ) * 1000000) / HZ }; rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, - (char *)&tv, sizeof(tv)); + (char *)&tv, sizeof(tv)); if (rc != 0) { CERROR("Can't set socket recv timeout %ld.%06d: %d\n", (long)tv.tv_sec, (int)tv.tv_usec, rc); @@ -373,31 +368,30 @@ lnet_sock_read (struct socket *sock, void *buffer, int nob, int timeout) return -ETIMEDOUT; } } - EXPORT_SYMBOL(lnet_sock_read); static int -lnet_sock_create (struct socket **sockp, int *fatal, - __u32 local_ip, int local_port) +lnet_sock_create(struct socket **sockp, int *fatal, __u32 local_ip, + int local_port) { - struct sockaddr_in locaddr; - struct socket *sock; - int rc; - int option; + struct sockaddr_in locaddr; + struct socket *sock; + int rc; + int option; /* All errors are fatal except bind failure if the port is in use */ *fatal = 1; - rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock); + rc = sock_create(PF_INET, SOCK_STREAM, 0, &sock); *sockp = sock; if (rc != 0) { - CERROR ("Can't create socket: %d\n", rc); + CERROR("Can't create socket: %d\n", rc); return rc; } option = 1; rc = kernel_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, - (char *)&option, sizeof (option)); + (char *)&option, sizeof(option)); if (rc != 0) { CERROR("Can't set SO_REUSEADDR for socket: %d\n", rc); goto failed; @@ -423,27 +417,26 @@ lnet_sock_create (struct socket **sockp, int *fatal, goto failed; } } - return 0; - failed: +failed: sock_release(sock); return rc; } int -lnet_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) +lnet_sock_setbuf(struct socket *sock, int txbufsize, int rxbufsize) { - int option; - int rc; + int option; + int rc; if (txbufsize != 0) { option = txbufsize; rc = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDBUF, - (char *)&option, sizeof (option)); + (char *)&option, sizeof(option)); if (rc != 0) { - CERROR ("Can't set send buffer %d: %d\n", - option, rc); + CERROR("Can't set send buffer %d: %d\n", + option, rc); return rc; } } @@ -451,70 +444,63 @@ lnet_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) if (rxbufsize != 0) { option = rxbufsize; rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVBUF, - (char *)&option, sizeof (option)); + (char *)&option, sizeof(option)); if (rc != 0) { - CERROR ("Can't set receive buffer %d: %d\n", - option, rc); + CERROR("Can't set receive buffer %d: %d\n", + option, rc); return rc; } } - return 0; } - EXPORT_SYMBOL(lnet_sock_setbuf); int -lnet_sock_getaddr (struct socket *sock, bool remote, __u32 *ip, int *port) +lnet_sock_getaddr(struct socket *sock, bool remote, __u32 *ip, int *port) { struct sockaddr_in sin; - int len = sizeof (sin); - int rc; + int len = sizeof(sin); + int rc; if (remote) rc = kernel_getpeername(sock, (struct sockaddr *)&sin, &len); else rc = kernel_getsockname(sock, (struct sockaddr *)&sin, &len); if (rc != 0) { - CERROR ("Error %d getting sock %s IP/port\n", - rc, remote ? "peer" : "local"); + CERROR("Error %d getting sock %s IP/port\n", + rc, remote ? "peer" : "local"); return rc; } if (ip != NULL) - *ip = ntohl (sin.sin_addr.s_addr); + *ip = ntohl(sin.sin_addr.s_addr); if (port != NULL) - *port = ntohs (sin.sin_port); + *port = ntohs(sin.sin_port); return 0; } - EXPORT_SYMBOL(lnet_sock_getaddr); int -lnet_sock_getbuf (struct socket *sock, int *txbufsize, int *rxbufsize) +lnet_sock_getbuf(struct socket *sock, int *txbufsize, int *rxbufsize) { - - if (txbufsize != NULL) { + if (txbufsize != NULL) *txbufsize = sock->sk->sk_sndbuf; - } - if (rxbufsize != NULL) { + if (rxbufsize != NULL) *rxbufsize = sock->sk->sk_rcvbuf; - } return 0; } - EXPORT_SYMBOL(lnet_sock_getbuf); int -lnet_sock_listen (struct socket **sockp, - __u32 local_ip, int local_port, int backlog) +lnet_sock_listen(struct socket **sockp, __u32 local_ip, int local_port, + int backlog) { - int fatal; - int rc; + int fatal; + int rc; rc = lnet_sock_create(sockp, &fatal, local_ip, local_port); if (rc != 0) { @@ -532,15 +518,14 @@ lnet_sock_listen (struct socket **sockp, sock_release(*sockp); return rc; } - EXPORT_SYMBOL(lnet_sock_listen); int -lnet_sock_accept (struct socket **newsockp, struct socket *sock) +lnet_sock_accept(struct socket **newsockp, struct socket *sock) { - wait_queue_t wait; + wait_queue_t wait; struct socket *newsock; - int rc; + int rc; init_waitqueue_entry(&wait, current); @@ -571,26 +556,24 @@ lnet_sock_accept (struct socket **newsockp, struct socket *sock) *newsockp = newsock; return 0; - failed: +failed: sock_release(newsock); return rc; } - EXPORT_SYMBOL(lnet_sock_accept); int -lnet_sock_connect (struct socket **sockp, int *fatal, - __u32 local_ip, int local_port, - __u32 peer_ip, int peer_port) +lnet_sock_connect(struct socket **sockp, int *fatal, __u32 local_ip, + int local_port, __u32 peer_ip, int peer_port) { - struct sockaddr_in srvaddr; - int rc; + struct sockaddr_in srvaddr; + int rc; rc = lnet_sock_create(sockp, fatal, local_ip, local_port); if (rc != 0) return rc; - memset (&srvaddr, 0, sizeof (srvaddr)); + memset(&srvaddr, 0, sizeof(srvaddr)); srvaddr.sin_family = AF_INET; srvaddr.sin_port = htons(peer_port); srvaddr.sin_addr.s_addr = htonl(peer_ip); @@ -607,11 +590,10 @@ lnet_sock_connect (struct socket **sockp, int *fatal, *fatal = !(rc == -EADDRNOTAVAIL); CDEBUG_LIMIT(*fatal ? D_NETERROR : D_NET, - "Error %d connecting %pI4h/%d -> %pI4h/%d\n", rc, - &local_ip, local_port, &peer_ip, peer_port); + "Error %d connecting %pI4h/%d -> %pI4h/%d\n", rc, + &local_ip, local_port, &peer_ip, peer_port); sock_release(*sockp); return rc; } - EXPORT_SYMBOL(lnet_sock_connect); -- 1.7.1 From jsimmons at infradead.org Fri May 22 18:32:29 2015 From: jsimmons at infradead.org (James Simmons) Date: Fri, 22 May 2015 14:32:29 -0400 Subject: [lustre-devel] [PATCH 3/6] staging:lustre: rename tcpip handling functions to lnet_* prefix In-Reply-To: References: Message-ID: <1432319552-10479-4-git-send-email-jsimmons@infradead.org> With all the TCPIP handling done in the lnet layer we should rename all the functions with the prefix lnet_*. One other change done was changing the remove argument of lnet_sock_getaddr from a int to a bool. Signed-off-by: James Simmons --- .../staging/lustre/include/linux/libcfs/libcfs.h | 15 ----- .../staging/lustre/include/linux/lnet/lib-lnet.h | 16 +++++ .../staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c | 2 +- .../staging/lustre/lnet/klnds/socklnd/socklnd.c | 11 ++-- .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 6 +- .../lustre/lnet/klnds/socklnd/socklnd_lib-linux.c | 15 ++--- .../lustre/lnet/klnds/socklnd/socklnd_proto.c | 43 ++++++------- drivers/staging/lustre/lnet/lnet/acceptor.c | 43 ++++++------- drivers/staging/lustre/lnet/lnet/config.c | 21 +++---- drivers/staging/lustre/lnet/lnet/lib-socket.c | 66 +++++++++---------- 10 files changed, 110 insertions(+), 128 deletions(-) diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index 854ba6a..f54bab6 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -88,21 +88,6 @@ static inline int __is_po2(unsigned long long val) int libcfs_arch_init(void); void libcfs_arch_cleanup(void); -/* libcfs tcpip */ -int libcfs_ipif_query(char *name, int *up, __u32 *ip, __u32 *mask); -int libcfs_ipif_enumerate(char ***names); -void libcfs_ipif_free_enumeration(char **names, int n); -int libcfs_sock_listen(struct socket **sockp, __u32 ip, int port, int backlog); -int libcfs_sock_accept(struct socket **newsockp, struct socket *sock); -int libcfs_sock_connect(struct socket **sockp, int *fatal, - __u32 local_ip, int local_port, - __u32 peer_ip, int peer_port); -int libcfs_sock_setbuf(struct socket *socket, int txbufsize, int rxbufsize); -int libcfs_sock_getbuf(struct socket *socket, int *txbufsize, int *rxbufsize); -int libcfs_sock_getaddr(struct socket *socket, int remote, __u32 *ip, int *port); -int libcfs_sock_write(struct socket *sock, void *buffer, int nob, int timeout); -int libcfs_sock_read(struct socket *sock, void *buffer, int nob, int timeout); - /* need both kernel and user-land acceptor */ #define LNET_ACCEPTOR_MIN_RESERVED_PORT 512 #define LNET_ACCEPTOR_MAX_RESERVED_PORT 1023 diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index 0038d29..5175588 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -846,6 +846,22 @@ int lnet_acceptor_port(void); int lnet_acceptor_start(void); void lnet_acceptor_stop(void); +int lnet_ipif_query(char *name, int *up, __u32 *ip, __u32 *mask); +int lnet_ipif_enumerate(char ***names); +void lnet_ipif_free_enumeration(char **names, int n); +int lnet_sock_setbuf(struct socket *socket, int txbufsize, int rxbufsize); +int lnet_sock_getbuf(struct socket *socket, int *txbufsize, int *rxbufsize); +int lnet_sock_getaddr(struct socket *socket, bool remote, __u32 *ip, int *port); +int lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout); +int lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout); + +int lnet_sock_listen(struct socket **sockp, __u32 ip, int port, int backlog); +int lnet_sock_accept(struct socket **newsockp, struct socket *sock); +int lnet_sock_connect(struct socket **sockp, int *fatal, + __u32 local_ip, int local_port, + __u32 peer_ip, int peer_port); +void libcfs_sock_release(struct socket *sock); + void lnet_get_tunables(void); int lnet_peers_start_down(void); int lnet_peer_buffer_credits(lnet_ni_t *ni); diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index 3bad441..be4de56 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -2620,7 +2620,7 @@ static kib_dev_t *kiblnd_create_dev(char *ifname) int up; int rc; - rc = libcfs_ipif_query(ifname, &up, &ip, &netmask); + rc = lnet_ipif_query(ifname, &up, &ip, &netmask); if (rc != 0) { CERROR("Can't query IPoIB interface %s: %d\n", ifname, rc); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c index e642752..a27dddf 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c @@ -968,7 +968,7 @@ ksocknal_accept(lnet_ni_t *ni, struct socket *sock) __u32 peer_ip; int peer_port; - rc = libcfs_sock_getaddr(sock, 1, &peer_ip, &peer_port); + rc = lnet_sock_getaddr(sock, 1, &peer_ip, &peer_port); LASSERT(rc == 0); /* we succeeded before */ LIBCFS_ALLOC(cr, sizeof(*cr)); @@ -2594,7 +2594,7 @@ ksocknal_enumerate_interfaces(ksock_net_t *net) int rc; int n; - n = libcfs_ipif_enumerate(&names); + n = lnet_ipif_enumerate(&names); if (n <= 0) { CERROR("Can't enumerate interfaces: %d\n", n); return n; @@ -2608,7 +2608,7 @@ ksocknal_enumerate_interfaces(ksock_net_t *net) if (!strcmp(names[i], "lo")) /* skip the loopback IF */ continue; - rc = libcfs_ipif_query(names[i], &up, &ip, &mask); + rc = lnet_ipif_query(names[i], &up, &ip, &mask); if (rc != 0) { CWARN("Can't get interface %s info: %d\n", names[i], rc); @@ -2634,7 +2634,7 @@ ksocknal_enumerate_interfaces(ksock_net_t *net) j++; } - libcfs_ipif_free_enumeration(names, n); + lnet_ipif_free_enumeration(names, n); if (j == 0) CERROR("Can't find any usable interfaces\n"); @@ -2796,8 +2796,7 @@ ksocknal_startup(lnet_ni_t *ni) if (ni->ni_interfaces[i] == NULL) break; - rc = libcfs_ipif_query( - ni->ni_interfaces[i], &up, + rc = lnet_ipif_query(ni->ni_interfaces[i], &up, &net->ksnn_interfaces[i].ksni_ipaddr, &net->ksnn_interfaces[i].ksni_netmask); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index fa7ad88..352f03e 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -1707,7 +1707,7 @@ ksocknal_recv_hello (lnet_ni_t *ni, ksock_conn_t *conn, timeout = active ? *ksocknal_tunables.ksnd_timeout : lnet_acceptor_timeout(); - rc = libcfs_sock_read(sock, &hello->kshm_magic, sizeof (hello->kshm_magic), timeout); + rc = lnet_sock_read(sock, &hello->kshm_magic, sizeof (hello->kshm_magic), timeout); if (rc != 0) { CERROR("Error %d reading HELLO from %pI4h\n", rc, &conn->ksnc_ipaddr); @@ -1726,8 +1726,8 @@ ksocknal_recv_hello (lnet_ni_t *ni, ksock_conn_t *conn, return -EPROTO; } - rc = libcfs_sock_read(sock, &hello->kshm_version, - sizeof(hello->kshm_version), timeout); + rc = lnet_sock_read(sock, &hello->kshm_version, + sizeof(hello->kshm_version), timeout); if (rc != 0) { CERROR("Error %d reading HELLO from %pI4h\n", rc, &conn->ksnc_ipaddr); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c index f5e8ab0..589f0d6 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.c @@ -39,9 +39,8 @@ int ksocknal_lib_get_conn_addrs(ksock_conn_t *conn) { - int rc = libcfs_sock_getaddr(conn->ksnc_sock, 1, - &conn->ksnc_ipaddr, - &conn->ksnc_port); + int rc = lnet_sock_getaddr(conn->ksnc_sock, 1, &conn->ksnc_ipaddr, + &conn->ksnc_port); /* Didn't need the {get,put}connsock dance to deref ksnc_sock... */ LASSERT(!conn->ksnc_closing); @@ -51,8 +50,7 @@ ksocknal_lib_get_conn_addrs(ksock_conn_t *conn) return rc; } - rc = libcfs_sock_getaddr(conn->ksnc_sock, 0, - &conn->ksnc_myipaddr, NULL); + rc = lnet_sock_getaddr(conn->ksnc_sock, 0, &conn->ksnc_myipaddr, NULL); if (rc != 0) { CERROR("Error %d getting sock local IP\n", rc); return rc; @@ -436,7 +434,7 @@ ksocknal_lib_get_conn_tunables(ksock_conn_t *conn, int *txmem, int *rxmem, int * return -ESHUTDOWN; } - rc = libcfs_sock_getbuf(sock, txmem, rxmem); + rc = lnet_sock_getbuf(sock, txmem, rxmem); if (rc == 0) { len = sizeof(*nagle); rc = kernel_getsockopt(sock, SOL_TCP, TCP_NODELAY, @@ -498,9 +496,8 @@ ksocknal_lib_setup_sock(struct socket *sock) } } - rc = libcfs_sock_setbuf(sock, - *ksocknal_tunables.ksnd_tx_buffer_size, - *ksocknal_tunables.ksnd_rx_buffer_size); + rc = lnet_sock_setbuf(sock, *ksocknal_tunables.ksnd_tx_buffer_size, + *ksocknal_tunables.ksnd_rx_buffer_size); if (rc != 0) { CERROR("Can't set buffer tx %d, rx %d buffers: %d\n", *ksocknal_tunables.ksnd_tx_buffer_size, diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c index 8596581..48197eb 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c @@ -495,9 +495,7 @@ ksocknal_send_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello) hdr->msg.hello.type = cpu_to_le32 (hello->kshm_ctype); hdr->msg.hello.incarnation = cpu_to_le64 (hello->kshm_src_incarnation); - rc = libcfs_sock_write(sock, hdr, sizeof(*hdr), - lnet_acceptor_timeout()); - + rc = lnet_sock_write(sock, hdr, sizeof(*hdr), lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO hdr to %pI4h/%d\n", rc, &conn->ksnc_ipaddr, conn->ksnc_port); @@ -511,9 +509,9 @@ ksocknal_send_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello) hello->kshm_ips[i] = __cpu_to_le32 (hello->kshm_ips[i]); } - rc = libcfs_sock_write(sock, hello->kshm_ips, - hello->kshm_nips * sizeof(__u32), - lnet_acceptor_timeout()); + rc = lnet_sock_write(sock, hello->kshm_ips, + hello->kshm_nips * sizeof(__u32), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO payload (%d) to %pI4h/%d\n", rc, hello->kshm_nips, @@ -544,9 +542,8 @@ ksocknal_send_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello) LNET_UNLOCK(); } - rc = libcfs_sock_write(sock, hello, offsetof(ksock_hello_msg_t, kshm_ips), - lnet_acceptor_timeout()); - + rc = lnet_sock_write(sock, hello, offsetof(ksock_hello_msg_t, kshm_ips), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO hdr to %pI4h/%d\n", rc, &conn->ksnc_ipaddr, conn->ksnc_port); @@ -556,9 +553,9 @@ ksocknal_send_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello) if (hello->kshm_nips == 0) return 0; - rc = libcfs_sock_write(sock, hello->kshm_ips, - hello->kshm_nips * sizeof(__u32), - lnet_acceptor_timeout()); + rc = lnet_sock_write(sock, hello->kshm_ips, + hello->kshm_nips * sizeof(__u32), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO payload (%d) to %pI4h/%d\n", rc, hello->kshm_nips, @@ -583,9 +580,9 @@ ksocknal_recv_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello, return -ENOMEM; } - rc = libcfs_sock_read(sock, &hdr->src_nid, - sizeof(*hdr) - offsetof(lnet_hdr_t, src_nid), - timeout); + rc = lnet_sock_read(sock, &hdr->src_nid, + sizeof(*hdr) - offsetof(lnet_hdr_t, src_nid), + timeout); if (rc != 0) { CERROR("Error %d reading rest of HELLO hdr from %pI4h\n", rc, &conn->ksnc_ipaddr); @@ -619,8 +616,8 @@ ksocknal_recv_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello, if (hello->kshm_nips == 0) goto out; - rc = libcfs_sock_read(sock, hello->kshm_ips, - hello->kshm_nips * sizeof(__u32), timeout); + rc = lnet_sock_read(sock, hello->kshm_ips, + hello->kshm_nips * sizeof(__u32), timeout); if (rc != 0) { CERROR("Error %d reading IPs from ip %pI4h\n", rc, &conn->ksnc_ipaddr); @@ -656,10 +653,10 @@ ksocknal_recv_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello, int timeout else conn->ksnc_flip = 1; - rc = libcfs_sock_read(sock, &hello->kshm_src_nid, - offsetof(ksock_hello_msg_t, kshm_ips) - - offsetof(ksock_hello_msg_t, kshm_src_nid), - timeout); + rc = lnet_sock_read(sock, &hello->kshm_src_nid, + offsetof(ksock_hello_msg_t, kshm_ips) - + offsetof(ksock_hello_msg_t, kshm_src_nid), + timeout); if (rc != 0) { CERROR("Error %d reading HELLO from %pI4h\n", rc, &conn->ksnc_ipaddr); @@ -687,8 +684,8 @@ ksocknal_recv_hello_v2(ksock_conn_t *conn, ksock_hello_msg_t *hello, int timeout if (hello->kshm_nips == 0) return 0; - rc = libcfs_sock_read(sock, hello->kshm_ips, - hello->kshm_nips * sizeof(__u32), timeout); + rc = lnet_sock_read(sock, hello->kshm_ips, + hello->kshm_nips * sizeof(__u32), timeout); if (rc != 0) { CERROR("Error %d reading IPs from ip %pI4h\n", rc, &conn->ksnc_ipaddr); diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 8c6726a..d323899 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -155,9 +155,8 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, --port) { /* Iterate through reserved ports. */ - rc = libcfs_sock_connect(&sock, &fatal, - local_ip, port, - peer_ip, peer_port); + rc = lnet_sock_connect(&sock, &fatal, local_ip, port, peer_ip, + peer_port); if (rc != 0) { if (fatal) goto failed; @@ -184,8 +183,7 @@ lnet_connect(struct socket **sockp, lnet_nid_t peer_nid, lnet_net_unlock(LNET_LOCK_EX); } - rc = libcfs_sock_write(sock, &cr, sizeof(cr), - accept_timeout); + rc = lnet_sock_write(sock, &cr, sizeof(cr), accept_timeout); if (rc != 0) goto failed_sock; @@ -220,7 +218,7 @@ lnet_accept(struct socket *sock, __u32 magic) LASSERT(sizeof(cr) <= 16); /* not too big for the stack */ - rc = libcfs_sock_getaddr(sock, 1, &peer_ip, &peer_port); + rc = lnet_sock_getaddr(sock, 1, &peer_ip, &peer_port); LASSERT(rc == 0); /* we succeeded before */ if (!lnet_accept_magic(magic, LNET_PROTO_ACCEPTOR_MAGIC)) { @@ -234,8 +232,8 @@ lnet_accept(struct socket *sock, __u32 magic) memset(&cr, 0, sizeof(cr)); cr.acr_magic = LNET_PROTO_ACCEPTOR_MAGIC; cr.acr_version = LNET_PROTO_ACCEPTOR_VERSION; - rc = libcfs_sock_write(sock, &cr, sizeof(cr), - accept_timeout); + rc = lnet_sock_write(sock, &cr, sizeof(cr), + accept_timeout); if (rc != 0) CERROR("Error sending magic+version in response to LNET magic from %pI4h: %d\n", @@ -257,9 +255,8 @@ lnet_accept(struct socket *sock, __u32 magic) flip = (magic != LNET_PROTO_ACCEPTOR_MAGIC); - rc = libcfs_sock_read(sock, &cr.acr_version, - sizeof(cr.acr_version), - accept_timeout); + rc = lnet_sock_read(sock, &cr.acr_version, sizeof(cr.acr_version), + accept_timeout); if (rc != 0) { CERROR("Error %d reading connection request version from %pI4h\n", rc, &peer_ip); @@ -280,19 +277,17 @@ lnet_accept(struct socket *sock, __u32 magic) cr.acr_magic = LNET_PROTO_ACCEPTOR_MAGIC; cr.acr_version = LNET_PROTO_ACCEPTOR_VERSION; - rc = libcfs_sock_write(sock, &cr, sizeof(cr), - accept_timeout); - + rc = lnet_sock_write(sock, &cr, sizeof(cr), accept_timeout); if (rc != 0) CERROR("Error sending magic+version in response to version %d from %pI4h: %d\n", peer_version, &peer_ip, rc); return -EPROTO; } - rc = libcfs_sock_read(sock, &cr.acr_nid, - sizeof(cr) - - offsetof(lnet_acceptor_connreq_t, acr_nid), - accept_timeout); + rc = lnet_sock_read(sock, &cr.acr_nid, + sizeof(cr) - + offsetof(lnet_acceptor_connreq_t, acr_nid), + accept_timeout); if (rc != 0) { CERROR("Error %d reading connection request from %pI4h\n", rc, &peer_ip); @@ -343,8 +338,8 @@ lnet_acceptor(void *arg) cfs_block_allsigs(); - rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock, - 0, accept_port, accept_backlog); + rc = lnet_sock_listen(&lnet_acceptor_state.pta_sock, 0, accept_port, + accept_backlog); if (rc != 0) { if (rc == -EADDRINUSE) LCONSOLE_ERROR_MSG(0x122, "Can't start acceptor on port %d: port already in use\n", @@ -367,7 +362,7 @@ lnet_acceptor(void *arg) while (!lnet_acceptor_state.pta_shutdown) { - rc = libcfs_sock_accept(&newsock, lnet_acceptor_state.pta_sock); + rc = lnet_sock_accept(&newsock, lnet_acceptor_state.pta_sock); if (rc != 0) { if (rc != -EAGAIN) { CWARN("Accept error %d: pausing...\n", rc); @@ -383,7 +378,7 @@ lnet_acceptor(void *arg) break; } - rc = libcfs_sock_getaddr(newsock, 1, &peer_ip, &peer_port); + rc = lnet_sock_getaddr(newsock, 1, &peer_ip, &peer_port); if (rc != 0) { CERROR("Can't determine new connection's address\n"); goto failed; @@ -395,8 +390,8 @@ lnet_acceptor(void *arg) goto failed; } - rc = libcfs_sock_read(newsock, &magic, sizeof(magic), - accept_timeout); + rc = lnet_sock_read(newsock, &magic, sizeof(magic), + accept_timeout); if (rc != 0) { CERROR("Error %d reading connection request from %pI4h\n", rc, &peer_ip); diff --git a/drivers/staging/lustre/lnet/lnet/config.c b/drivers/staging/lustre/lnet/lnet/config.c index 2dc4c4a..d8c8f2e 100644 --- a/drivers/staging/lustre/lnet/lnet/config.c +++ b/drivers/staging/lustre/lnet/lnet/config.c @@ -1118,7 +1118,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) __u32 *ipaddrs2; int nip; char **ifnames; - int nif = libcfs_ipif_enumerate(&ifnames); + int nif = lnet_ipif_enumerate(&ifnames); int i; int rc; @@ -1128,7 +1128,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) LIBCFS_ALLOC(ipaddrs, nif * sizeof(*ipaddrs)); if (ipaddrs == NULL) { CERROR("Can't allocate ipaddrs[%d]\n", nif); - libcfs_ipif_free_enumeration(ifnames, nif); + lnet_ipif_free_enumeration(ifnames, nif); return -ENOMEM; } @@ -1136,8 +1136,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) if (!strcmp(ifnames[i], "lo")) continue; - rc = libcfs_ipif_query(ifnames[i], &up, - &ipaddrs[nip], &netmask); + rc = lnet_ipif_query(ifnames[i], &up, &ipaddrs[nip], &netmask); if (rc != 0) { CWARN("Can't query interface %s: %d\n", ifnames[i], rc); @@ -1153,7 +1152,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) nip++; } - libcfs_ipif_free_enumeration(ifnames, nif); + lnet_ipif_free_enumeration(ifnames, nif); if (nip == nif) { *ipaddrsp = ipaddrs; @@ -1237,8 +1236,7 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) return -EPERM; } - rc = libcfs_ipif_query(ni->ni_interfaces[0], - &up, &ip, &netmask); + rc = lnet_ipif_query(ni->ni_interfaces[0], &up, &ip, &netmask); if (rc != 0) { CERROR("Net %s can't query interface %s: %d\n", libcfs_net2str(net), ni->ni_interfaces[0], rc); @@ -1255,7 +1253,7 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) return 0; } - n = libcfs_ipif_enumerate(&names); + n = lnet_ipif_enumerate(&names); if (n <= 0) { CERROR("Net %s can't enumerate interfaces: %d\n", libcfs_net2str(net), n); @@ -1266,8 +1264,7 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) if (!strcmp(names[i], "lo")) /* skip the loopback IF */ continue; - rc = libcfs_ipif_query(names[i], &up, &ip, &netmask); - + rc = lnet_ipif_query(names[i], &up, &ip, &netmask); if (rc != 0) { CWARN("Net %s can't query interface %s: %d\n", libcfs_net2str(net), names[i], rc); @@ -1280,13 +1277,13 @@ lnet_set_ip_niaddr(lnet_ni_t *ni) continue; } - libcfs_ipif_free_enumeration(names, n); + lnet_ipif_free_enumeration(names, n); ni->ni_nid = LNET_MKNID(net, ip); return 0; } CERROR("Net %s can't find any interfaces\n", libcfs_net2str(net)); - libcfs_ipif_free_enumeration(names, n); + lnet_ipif_free_enumeration(names, n); return -ENOENT; } EXPORT_SYMBOL(lnet_set_ip_niaddr); diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c index bb8d9c2..2e87168 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c @@ -45,7 +45,7 @@ #include static int -libcfs_sock_ioctl(int cmd, unsigned long arg) +lnet_sock_ioctl(int cmd, unsigned long arg) { mm_segment_t oldmm = get_fs(); struct socket *sock; @@ -76,7 +76,7 @@ out: } int -libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) +lnet_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) { struct ifreq ifr; int nob; @@ -92,8 +92,7 @@ libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) CLASSERT (sizeof(ifr.ifr_name) >= IFNAMSIZ); strcpy(ifr.ifr_name, name); - rc = libcfs_sock_ioctl(SIOCGIFFLAGS, (unsigned long)&ifr); - + rc = lnet_sock_ioctl(SIOCGIFFLAGS, (unsigned long)&ifr); if (rc != 0) { CERROR("Can't get flags for interface %s\n", name); return rc; @@ -110,8 +109,7 @@ libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) strcpy(ifr.ifr_name, name); ifr.ifr_addr.sa_family = AF_INET; - rc = libcfs_sock_ioctl(SIOCGIFADDR, (unsigned long)&ifr); - + rc = lnet_sock_ioctl(SIOCGIFADDR, (unsigned long)&ifr); if (rc != 0) { CERROR("Can't get IP address for interface %s\n", name); return rc; @@ -122,8 +120,7 @@ libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) strcpy(ifr.ifr_name, name); ifr.ifr_addr.sa_family = AF_INET; - rc = libcfs_sock_ioctl(SIOCGIFNETMASK, (unsigned long)&ifr); - + rc = lnet_sock_ioctl(SIOCGIFNETMASK, (unsigned long)&ifr); if (rc != 0) { CERROR("Can't get netmask for interface %s\n", name); return rc; @@ -135,10 +132,10 @@ libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask) return 0; } -EXPORT_SYMBOL(libcfs_ipif_query); +EXPORT_SYMBOL(lnet_ipif_query); int -libcfs_ipif_enumerate (char ***namesp) +lnet_ipif_enumerate (char ***namesp) { /* Allocate and fill in 'names', returning # interfaces/error */ char **names; @@ -172,8 +169,7 @@ libcfs_ipif_enumerate (char ***namesp) ifc.ifc_buf = (char *)ifr; ifc.ifc_len = nalloc * sizeof(*ifr); - rc = libcfs_sock_ioctl(SIOCGIFCONF, (unsigned long)&ifc); - + rc = lnet_sock_ioctl(SIOCGIFCONF, (unsigned long)&ifc); if (rc < 0) { CERROR ("Error %d enumerating interfaces\n", rc); goto out1; @@ -226,17 +222,17 @@ libcfs_ipif_enumerate (char ***namesp) out2: if (rc < 0) - libcfs_ipif_free_enumeration(names, nfound); + lnet_ipif_free_enumeration(names, nfound); out1: LIBCFS_FREE(ifr, nalloc * sizeof(*ifr)); out0: return rc; } -EXPORT_SYMBOL(libcfs_ipif_enumerate); +EXPORT_SYMBOL(lnet_ipif_enumerate); void -libcfs_ipif_free_enumeration (char **names, int n) +lnet_ipif_free_enumeration (char **names, int n) { int i; @@ -248,10 +244,10 @@ libcfs_ipif_free_enumeration (char **names, int n) LIBCFS_FREE(names, n * sizeof(*names)); } -EXPORT_SYMBOL(libcfs_ipif_free_enumeration); +EXPORT_SYMBOL(lnet_ipif_free_enumeration); int -libcfs_sock_write (struct socket *sock, void *buffer, int nob, int timeout) +lnet_sock_write (struct socket *sock, void *buffer, int nob, int timeout) { int rc; long ticks = timeout * HZ; @@ -310,10 +306,10 @@ libcfs_sock_write (struct socket *sock, void *buffer, int nob, int timeout) return 0; } -EXPORT_SYMBOL(libcfs_sock_write); +EXPORT_SYMBOL(lnet_sock_write); int -libcfs_sock_read (struct socket *sock, void *buffer, int nob, int timeout) +lnet_sock_read (struct socket *sock, void *buffer, int nob, int timeout) { int rc; long ticks = timeout * HZ; @@ -366,10 +362,10 @@ libcfs_sock_read (struct socket *sock, void *buffer, int nob, int timeout) } } -EXPORT_SYMBOL(libcfs_sock_read); +EXPORT_SYMBOL(lnet_sock_read); static int -libcfs_sock_create (struct socket **sockp, int *fatal, +lnet_sock_create (struct socket **sockp, int *fatal, __u32 local_ip, int local_port) { struct sockaddr_in locaddr; @@ -424,7 +420,7 @@ libcfs_sock_create (struct socket **sockp, int *fatal, } int -libcfs_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) +lnet_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) { int option; int rc; @@ -454,10 +450,10 @@ libcfs_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) return 0; } -EXPORT_SYMBOL(libcfs_sock_setbuf); +EXPORT_SYMBOL(lnet_sock_setbuf); int -libcfs_sock_getaddr (struct socket *sock, int remote, __u32 *ip, int *port) +lnet_sock_getaddr (struct socket *sock, bool remote, __u32 *ip, int *port) { struct sockaddr_in sin; int len = sizeof (sin); @@ -480,10 +476,10 @@ libcfs_sock_getaddr (struct socket *sock, int remote, __u32 *ip, int *port) return 0; } -EXPORT_SYMBOL(libcfs_sock_getaddr); +EXPORT_SYMBOL(lnet_sock_getaddr); int -libcfs_sock_getbuf (struct socket *sock, int *txbufsize, int *rxbufsize) +lnet_sock_getbuf (struct socket *sock, int *txbufsize, int *rxbufsize) { if (txbufsize != NULL) { @@ -497,16 +493,16 @@ libcfs_sock_getbuf (struct socket *sock, int *txbufsize, int *rxbufsize) return 0; } -EXPORT_SYMBOL(libcfs_sock_getbuf); +EXPORT_SYMBOL(lnet_sock_getbuf); int -libcfs_sock_listen (struct socket **sockp, +lnet_sock_listen (struct socket **sockp, __u32 local_ip, int local_port, int backlog) { int fatal; int rc; - rc = libcfs_sock_create(sockp, &fatal, local_ip, local_port); + rc = lnet_sock_create(sockp, &fatal, local_ip, local_port); if (rc != 0) { if (!fatal) CERROR("Can't create socket: port %d already in use\n", @@ -523,10 +519,10 @@ libcfs_sock_listen (struct socket **sockp, return rc; } -EXPORT_SYMBOL(libcfs_sock_listen); +EXPORT_SYMBOL(lnet_sock_listen); int -libcfs_sock_accept (struct socket **newsockp, struct socket *sock) +lnet_sock_accept (struct socket **newsockp, struct socket *sock) { wait_queue_t wait; struct socket *newsock; @@ -566,17 +562,17 @@ libcfs_sock_accept (struct socket **newsockp, struct socket *sock) return rc; } -EXPORT_SYMBOL(libcfs_sock_accept); +EXPORT_SYMBOL(lnet_sock_accept); int -libcfs_sock_connect (struct socket **sockp, int *fatal, +lnet_sock_connect (struct socket **sockp, int *fatal, __u32 local_ip, int local_port, __u32 peer_ip, int peer_port) { struct sockaddr_in srvaddr; int rc; - rc = libcfs_sock_create(sockp, fatal, local_ip, local_port); + rc = lnet_sock_create(sockp, fatal, local_ip, local_port); if (rc != 0) return rc; @@ -605,4 +601,4 @@ libcfs_sock_connect (struct socket **sockp, int *fatal, return rc; } -EXPORT_SYMBOL(libcfs_sock_connect); +EXPORT_SYMBOL(lnet_sock_connect); -- 1.7.1 From jsimmons at infradead.org Fri May 22 18:32:32 2015 From: jsimmons at infradead.org (James Simmons) Date: Fri, 22 May 2015 14:32:32 -0400 Subject: [lustre-devel] [PATCH 6/6] staging:lustre: Update license and copyright for lib-socket.c In-Reply-To: References: Message-ID: <1432319552-10479-7-git-send-email-jsimmons@infradead.org> Point to the right place for GNU license. Update Intel copyright. Signed-off-by: James Simmons --- drivers/staging/lustre/lnet/lnet/lib-socket.c | 10 +++------- 1 files changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c index f0b187d..2f8443c 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,11 +23,11 @@ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2015 Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. + * Lustre is a trademark of Seagate, Inc. */ #define DEBUG_SUBSYSTEM S_LNET -- 1.7.1 From hannac at iu.edu Fri May 22 18:50:47 2015 From: hannac at iu.edu (Chris Hanna) Date: Fri, 22 May 2015 14:50:47 -0400 Subject: [lustre-devel] [PATCH] staging: lustre: osc: clean up whitespace and align function parameters Message-ID: <1432320647-14543-1-git-send-email-hannac@iu.edu> Minor changes to remove excessive whitespace and improve readability of functions. Signed-off-by: Chris Hanna --- drivers/staging/lustre/lustre/osc/lproc_osc.c | 56 +++--- drivers/staging/lustre/lustre/osc/osc_cache.c | 112 ++++++------ drivers/staging/lustre/lustre/osc/osc_io.c | 116 +++++++------- drivers/staging/lustre/lustre/osc/osc_lock.c | 134 ++++++++-------- drivers/staging/lustre/lustre/osc/osc_object.c | 18 +- drivers/staging/lustre/lustre/osc/osc_page.c | 44 +++--- drivers/staging/lustre/lustre/osc/osc_quota.c | 14 +- drivers/staging/lustre/lustre/osc/osc_request.c | 205 +++++++++++------------ 8 files changed, 349 insertions(+), 350 deletions(-) diff --git a/drivers/staging/lustre/lustre/osc/lproc_osc.c b/drivers/staging/lustre/lustre/osc/lproc_osc.c index 15a6620..ee4eade 100644 --- a/drivers/staging/lustre/lustre/osc/lproc_osc.c +++ b/drivers/staging/lustre/lustre/osc/lproc_osc.c @@ -54,8 +54,8 @@ static int osc_active_seq_show(struct seq_file *m, void *v) } static ssize_t osc_active_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *dev = ((struct seq_file *)file->private_data)->private; int val, rc; @@ -89,8 +89,8 @@ static int osc_max_rpcs_in_flight_seq_show(struct seq_file *m, void *v) } static ssize_t osc_max_rpcs_in_flight_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *dev = ((struct seq_file *)file->private_data)->private; struct client_obd *cli = &dev->u.cli; @@ -133,8 +133,8 @@ static int osc_max_dirty_mb_seq_show(struct seq_file *m, void *v) } static ssize_t osc_max_dirty_mb_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *dev = ((struct seq_file *)file->private_data)->private; struct client_obd *cli = &dev->u.cli; @@ -236,13 +236,13 @@ static int osc_cur_grant_bytes_seq_show(struct seq_file *m, void *v) } static ssize_t osc_cur_grant_bytes_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *obd = ((struct seq_file *)file->private_data)->private; struct client_obd *cli = &obd->u.cli; - int rc; - __u64 val; + int rc; + __u64 val; if (obd == NULL) return 0; @@ -293,8 +293,8 @@ static int osc_grant_shrink_interval_seq_show(struct seq_file *m, void *v) } static ssize_t osc_grant_shrink_interval_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *obd = ((struct seq_file *)file->private_data)->private; int val, rc; @@ -327,8 +327,8 @@ static int osc_checksum_seq_show(struct seq_file *m, void *v) } static ssize_t osc_checksum_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *obd = ((struct seq_file *)file->private_data)->private; int val, rc; @@ -368,8 +368,8 @@ static int osc_checksum_type_seq_show(struct seq_file *m, void *v) } static ssize_t osc_checksum_type_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *obd = ((struct seq_file *)file->private_data)->private; int i; @@ -409,8 +409,8 @@ static int osc_resend_count_seq_show(struct seq_file *m, void *v) } static ssize_t osc_resend_count_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *obd = ((struct seq_file *)file->private_data)->private; int val, rc; @@ -438,8 +438,8 @@ static int osc_contention_seconds_seq_show(struct seq_file *m, void *v) } static ssize_t osc_contention_seconds_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *obd = ((struct seq_file *)file->private_data)->private; struct osc_device *od = obd2osc_dev(obd); @@ -459,8 +459,8 @@ static int osc_lockless_truncate_seq_show(struct seq_file *m, void *v) } static ssize_t osc_lockless_truncate_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *obd = ((struct seq_file *)file->private_data)->private; struct osc_device *od = obd2osc_dev(obd); @@ -485,8 +485,8 @@ static int osc_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *v) } static ssize_t osc_obd_max_pages_per_rpc_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) + const char __user *buffer, + size_t count, loff_t *off) { struct obd_device *dev = ((struct seq_file *)file->private_data)->private; struct client_obd *cli = &dev->u.cli; @@ -679,8 +679,8 @@ static int osc_rpc_stats_seq_show(struct seq_file *seq, void *v) #undef pct static ssize_t osc_rpc_stats_seq_write(struct file *file, - const char __user *buf, - size_t len, loff_t *off) + const char __user *buf, + size_t len, loff_t *off) { struct seq_file *seq = file->private_data; struct obd_device *dev = seq->private; @@ -718,8 +718,8 @@ static int osc_stats_seq_show(struct seq_file *seq, void *v) } static ssize_t osc_stats_seq_write(struct file *file, - const char __user *buf, - size_t len, loff_t *off) + const char __user *buf, + size_t len, loff_t *off) { struct seq_file *seq = file->private_data; struct obd_device *dev = seq->private; diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c b/drivers/staging/lustre/lustre/osc/osc_cache.c index d44b3d4..54a6409 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cache.c +++ b/drivers/staging/lustre/lustre/osc/osc_cache.c @@ -112,8 +112,8 @@ static const char *oes_strings[] = { /* ----- extent part 0 ----- */ \ __ext, EXTPARA(__ext), \ /* ----- part 1 ----- */ \ - atomic_read(&__ext->oe_refc), \ - atomic_read(&__ext->oe_users), \ + atomic_read(&__ext->oe_refc), \ + atomic_read(&__ext->oe_users), \ list_empty_marker(&__ext->oe_link), \ oes_strings[__ext->oe_state], ext_flags(__ext, __buf), \ __ext->oe_obj, \ @@ -297,12 +297,12 @@ out: #define sanity_check_nolock(ext) \ osc_extent_sanity_check0(ext, __func__, __LINE__) -#define sanity_check(ext) ({ \ - int __res; \ +#define sanity_check(ext) ({ \ + int __res; \ osc_object_lock((ext)->oe_obj); \ - __res = sanity_check_nolock(ext); \ - osc_object_unlock((ext)->oe_obj); \ - __res; \ + __res = sanity_check_nolock(ext); \ + osc_object_unlock((ext)->oe_obj); \ + __res; \ }) @@ -624,18 +624,18 @@ struct osc_extent *osc_extent_find(const struct lu_env *env, { struct client_obd *cli = osc_cli(obj); - struct cl_lock *lock; + struct cl_lock *lock; struct osc_extent *cur; struct osc_extent *ext; struct osc_extent *conflict = NULL; struct osc_extent *found = NULL; - pgoff_t chunk; - pgoff_t max_end; - int max_pages; /* max_pages_per_rpc */ - int chunksize; - int ppc_bits; /* pages per chunk bits */ - int chunk_mask; - int rc; + pgoff_t chunk; + pgoff_t max_end; + int max_pages; /* max_pages_per_rpc */ + int chunksize; + int ppc_bits; /* pages per chunk bits */ + int chunk_mask; + int rc; cur = osc_extent_alloc(obj); if (cur == NULL) @@ -943,21 +943,21 @@ static int osc_extent_wait(const struct lu_env *env, struct osc_extent *ext, * @size, then partial truncate happens. */ static int osc_extent_truncate(struct osc_extent *ext, pgoff_t trunc_index, - bool partial) + bool partial) { - struct cl_env_nest nest; - struct lu_env *env; - struct cl_io *io; - struct osc_object *obj = ext->oe_obj; - struct client_obd *cli = osc_cli(obj); + struct cl_env_nest nest; + struct lu_env *env; + struct cl_io *io; + struct osc_object *obj = ext->oe_obj; + struct client_obd *cli = osc_cli(obj); struct osc_async_page *oap; struct osc_async_page *tmp; - int pages_in_chunk = 0; - int ppc_bits = cli->cl_chunkbits - PAGE_CACHE_SHIFT; - __u64 trunc_chunk = trunc_index >> ppc_bits; - int grants = 0; - int nr_pages = 0; - int rc = 0; + int pages_in_chunk = 0; + int ppc_bits = cli->cl_chunkbits - PAGE_CACHE_SHIFT; + __u64 trunc_chunk = trunc_index >> ppc_bits; + int grants = 0; + int nr_pages = 0; + int rc = 0; LASSERT(sanity_check(ext) == 0); EASSERT(ext->oe_state == OES_TRUNC, ext); @@ -1022,7 +1022,7 @@ static int osc_extent_truncate(struct osc_extent *ext, pgoff_t trunc_index, grants = ext->oe_grants; ext->oe_grants = 0; } else { /* calculate how many grants we can free */ - int chunks = (ext->oe_end >> ppc_bits) - trunc_chunk; + int chunks = (ext->oe_end >> ppc_bits) - trunc_chunk; pgoff_t last_index; @@ -2049,7 +2049,7 @@ osc_send_read_rpc(const struct lu_env *env, struct client_obd *cli, #define list_to_obj(list, item) ({ \ struct list_head *__tmp = (list)->next; \ - list_del_init(__tmp); \ + list_del_init(__tmp); \ list_entry(__tmp, struct osc_object, oo_##item); \ }) @@ -2224,16 +2224,16 @@ int osc_queue_async_io(const struct lu_env *env, struct cl_io *io, struct osc_page *ops) { struct osc_io *oio = osc_env_io(env); - struct osc_extent *ext = NULL; + struct osc_extent *ext = NULL; struct osc_async_page *oap = &ops->ops_oap; - struct client_obd *cli = oap->oap_cli; - struct osc_object *osc = oap->oap_obj; + struct client_obd *cli = oap->oap_cli; + struct osc_object *osc = oap->oap_obj; pgoff_t index; - int grants = 0; - int brw_flags = OBD_BRW_ASYNC; - int cmd = OBD_BRW_WRITE; - int need_release = 0; - int rc = 0; + int grants = 0; + int brw_flags = OBD_BRW_ASYNC; + int cmd = OBD_BRW_WRITE; + int need_release = 0; + int rc = 0; if (oap->oap_magic != OAP_MAGIC) return -EINVAL; @@ -2386,7 +2386,7 @@ int osc_teardown_async_page(const struct lu_env *env, struct osc_object *obj, struct osc_page *ops) { struct osc_async_page *oap = &ops->ops_oap; - struct osc_extent *ext = NULL; + struct osc_extent *ext = NULL; int rc = 0; LASSERT(oap->oap_magic == OAP_MAGIC); @@ -2425,10 +2425,10 @@ int osc_teardown_async_page(const struct lu_env *env, int osc_flush_async_page(const struct lu_env *env, struct cl_io *io, struct osc_page *ops) { - struct osc_extent *ext = NULL; - struct osc_object *obj = cl2osc(ops->ops_cl.cpl_obj); - struct cl_page *cp = ops->ops_cl.cpl_page; - pgoff_t index = cp->cp_index; + struct osc_extent *ext = NULL; + struct osc_object *obj = cl2osc(ops->ops_cl.cpl_obj); + struct cl_page *cp = ops->ops_cl.cpl_page; + pgoff_t index = cp->cp_index; struct osc_async_page *oap = &ops->ops_oap; bool unplug = false; int rc = 0; @@ -2507,14 +2507,14 @@ out: int osc_cancel_async_page(const struct lu_env *env, struct osc_page *ops) { struct osc_async_page *oap = &ops->ops_oap; - struct osc_object *obj = oap->oap_obj; - struct client_obd *cli = osc_cli(obj); - struct osc_extent *ext; - struct osc_extent *found = NULL; - struct list_head *plist; + struct osc_object *obj = oap->oap_obj; + struct client_obd *cli = osc_cli(obj); + struct osc_extent *ext; + struct osc_extent *found = NULL; + struct list_head *plist; pgoff_t index = oap2cl_page(oap)->cp_index; - int rc = -EBUSY; - int cmd; + int rc = -EBUSY; + int cmd; LASSERT(!oap->oap_interrupted); oap->oap_interrupted = 1; @@ -2564,13 +2564,13 @@ int osc_cancel_async_page(const struct lu_env *env, struct osc_page *ops) int osc_queue_sync_pages(const struct lu_env *env, struct osc_object *obj, struct list_head *list, int cmd, int brw_flags) { - struct client_obd *cli = osc_cli(obj); - struct osc_extent *ext; + struct client_obd *cli = osc_cli(obj); + struct osc_extent *ext; struct osc_async_page *oap, *tmp; - int page_count = 0; - int mppr = cli->cl_max_pages_per_rpc; - pgoff_t start = CL_PAGE_EOF; - pgoff_t end = 0; + int page_count = 0; + int mppr = cli->cl_max_pages_per_rpc; + pgoff_t start = CL_PAGE_EOF; + pgoff_t end = 0; list_for_each_entry(oap, list, oap_pending_item) { struct cl_page *cp = oap2cl_page(oap); @@ -2785,7 +2785,7 @@ int osc_cache_wait_range(const struct lu_env *env, struct osc_object *obj, { struct osc_extent *ext; pgoff_t index = start; - int result = 0; + int result = 0; again: osc_object_lock(obj); diff --git a/drivers/staging/lustre/lustre/osc/osc_io.c b/drivers/staging/lustre/lustre/osc/osc_io.c index 3c7300b..5368a91 100644 --- a/drivers/staging/lustre/lustre/osc/osc_io.c +++ b/drivers/staging/lustre/lustre/osc/osc_io.c @@ -100,16 +100,16 @@ static int osc_io_submit(const struct lu_env *env, const struct cl_io_slice *ios, enum cl_req_type crt, struct cl_2queue *queue) { - struct cl_page *page; - struct cl_page *tmp; + struct cl_page *page; + struct cl_page *tmp; struct client_obd *cli = NULL; struct osc_object *osc = NULL; /* to keep gcc happy */ - struct osc_page *opg; - struct cl_io *io; + struct osc_page *opg; + struct cl_io *io; LIST_HEAD(list); - struct cl_page_list *qin = &queue->c2_qin; - struct cl_page_list *qout = &queue->c2_qout; + struct cl_page_list *qin = &queue->c2_qin; + struct cl_page_list *qout = &queue->c2_qout; int queued = 0; int result = 0; int cmd; @@ -189,8 +189,8 @@ static int osc_io_submit(const struct lu_env *env, static void osc_page_touch_at(const struct lu_env *env, struct cl_object *obj, pgoff_t idx, unsigned to) { - struct lov_oinfo *loi = cl2osc(obj)->oo_oinfo; - struct cl_attr *attr = &osc_env_info(env)->oti_attr; + struct lov_oinfo *loi = cl2osc(obj)->oo_oinfo; + struct cl_attr *attr = &osc_env_info(env)->oti_attr; int valid; __u64 kms; @@ -233,8 +233,8 @@ static void osc_page_touch_at(const struct lu_env *env, static void osc_page_touch(const struct lu_env *env, struct osc_page *opage, unsigned to) { - struct cl_page *page = opage->ops_cl.cpl_page; - struct cl_object *obj = opage->ops_cl.cpl_obj; + struct cl_page *page = opage->ops_cl.cpl_page; + struct cl_object *obj = opage->ops_cl.cpl_obj; osc_page_touch_at(env, obj, page->cp_index, to); } @@ -260,7 +260,7 @@ static int osc_io_prepare_write(const struct lu_env *env, { struct osc_device *dev = lu2osc_dev(slice->cpl_obj->co_lu.lo_dev); struct obd_import *imp = class_exp2cliimp(dev->od_exp); - struct osc_io *oio = cl2osc_io(env, ios); + struct osc_io *oio = cl2osc_io(env, ios); int result = 0; /* @@ -284,9 +284,9 @@ static int osc_io_commit_write(const struct lu_env *env, const struct cl_page_slice *slice, unsigned from, unsigned to) { - struct osc_io *oio = cl2osc_io(env, ios); - struct osc_page *opg = cl2osc_page(slice); - struct osc_object *obj = cl2osc(opg->ops_cl.cpl_obj); + struct osc_io *oio = cl2osc_io(env, ios); + struct osc_page *opg = cl2osc_page(slice); + struct osc_object *obj = cl2osc(opg->ops_cl.cpl_obj); struct osc_async_page *oap = &opg->ops_oap; LASSERT(to > 0); @@ -311,7 +311,7 @@ static int osc_io_commit_write(const struct lu_env *env, static int osc_io_fault_start(const struct lu_env *env, const struct cl_io_slice *ios) { - struct cl_io *io; + struct cl_io *io; struct cl_fault_io *fio; io = ios->cis_io; @@ -375,11 +375,11 @@ static void osc_trunc_check(const struct lu_env *env, struct cl_io *io, struct osc_io *oio, __u64 size) { struct cl_object *clob; - int partial; + int partial; pgoff_t start; - clob = oio->oi_cl.cis_obj; - start = cl_index(clob, size); + clob = oio->oi_cl.cis_obj; + start = cl_index(clob, size); partial = cl_offset(clob, start) < size; /* @@ -392,17 +392,17 @@ static void osc_trunc_check(const struct lu_env *env, struct cl_io *io, static int osc_io_setattr_start(const struct lu_env *env, const struct cl_io_slice *slice) { - struct cl_io *io = slice->cis_io; - struct osc_io *oio = cl2osc_io(env, slice); - struct cl_object *obj = slice->cis_obj; - struct lov_oinfo *loi = cl2osc(obj)->oo_oinfo; - struct cl_attr *attr = &osc_env_info(env)->oti_attr; - struct obdo *oa = &oio->oi_oa; + struct cl_io *io = slice->cis_io; + struct osc_io *oio = cl2osc_io(env, slice); + struct cl_object *obj = slice->cis_obj; + struct lov_oinfo *loi = cl2osc(obj)->oo_oinfo; + struct cl_attr *attr = &osc_env_info(env)->oti_attr; + struct obdo *oa = &oio->oi_oa; struct osc_async_cbargs *cbargs = &oio->oi_cbarg; - __u64 size = io->u.ci_setattr.sa_attr.lvb_size; - unsigned int ia_valid = io->u.ci_setattr.sa_valid; - int result = 0; - struct obd_info oinfo = { { { 0 } } }; + __u64 size = io->u.ci_setattr.sa_attr.lvb_size; + unsigned int ia_valid = io->u.ci_setattr.sa_valid; + int result = 0; + struct obd_info oinfo = { { { 0 } } }; /* truncate cache dirty pages first */ if (cl_io_is_trunc(io)) @@ -477,8 +477,8 @@ static int osc_io_setattr_start(const struct lu_env *env, static void osc_io_setattr_end(const struct lu_env *env, const struct cl_io_slice *slice) { - struct cl_io *io = slice->cis_io; - struct osc_io *oio = cl2osc_io(env, slice); + struct cl_io *io = slice->cis_io; + struct osc_io *oio = cl2osc_io(env, slice); struct cl_object *obj = slice->cis_obj; struct osc_async_cbargs *cbargs = &oio->oi_cbarg; int result = 0; @@ -512,8 +512,8 @@ static void osc_io_setattr_end(const struct lu_env *env, static int osc_io_read_start(const struct lu_env *env, const struct cl_io_slice *slice) { - struct cl_object *obj = slice->cis_obj; - struct cl_attr *attr = &osc_env_info(env)->oti_attr; + struct cl_object *obj = slice->cis_obj; + struct cl_attr *attr = &osc_env_info(env)->oti_attr; int rc = 0; if (!slice->cis_io->ci_noatime) { @@ -528,8 +528,8 @@ static int osc_io_read_start(const struct lu_env *env, static int osc_io_write_start(const struct lu_env *env, const struct cl_io_slice *slice) { - struct cl_object *obj = slice->cis_obj; - struct cl_attr *attr = &osc_env_info(env)->oti_attr; + struct cl_object *obj = slice->cis_obj; + struct cl_attr *attr = &osc_env_info(env)->oti_attr; int rc = 0; OBD_FAIL_TIMEOUT(OBD_FAIL_OSC_DELAY_SETTIME, 1); @@ -544,10 +544,10 @@ static int osc_io_write_start(const struct lu_env *env, static int osc_fsync_ost(const struct lu_env *env, struct osc_object *obj, struct cl_fsync_io *fio) { - struct osc_io *oio = osc_env_io(env); - struct obdo *oa = &oio->oi_oa; - struct obd_info *oinfo = &oio->oi_info; - struct lov_oinfo *loi = obj->oo_oinfo; + struct osc_io *oio = osc_env_io(env); + struct obdo *oa = &oio->oi_oa; + struct obd_info *oinfo = &oio->oi_info; + struct lov_oinfo *loi = obj->oo_oinfo; struct osc_async_cbargs *cbargs = &oio->oi_cbarg; int rc = 0; @@ -575,13 +575,13 @@ static int osc_fsync_ost(const struct lu_env *env, struct osc_object *obj, static int osc_io_fsync_start(const struct lu_env *env, const struct cl_io_slice *slice) { - struct cl_io *io = slice->cis_io; + struct cl_io *io = slice->cis_io; struct cl_fsync_io *fio = &io->u.ci_fsync; - struct cl_object *obj = slice->cis_obj; - struct osc_object *osc = cl2osc(obj); - pgoff_t start = cl_index(obj, fio->fi_start); - pgoff_t end = cl_index(obj, fio->fi_end); - int result = 0; + struct cl_object *obj = slice->cis_obj; + struct osc_object *osc = cl2osc(obj); + pgoff_t start = cl_index(obj, fio->fi_start); + pgoff_t end = cl_index(obj, fio->fi_end); + int result = 0; if (fio->fi_end == OBD_OBJECT_EOF) end = CL_PAGE_EOF; @@ -615,15 +615,15 @@ static void osc_io_fsync_end(const struct lu_env *env, const struct cl_io_slice *slice) { struct cl_fsync_io *fio = &slice->cis_io->u.ci_fsync; - struct cl_object *obj = slice->cis_obj; + struct cl_object *obj = slice->cis_obj; pgoff_t start = cl_index(obj, fio->fi_start); - pgoff_t end = cl_index(obj, fio->fi_end); + pgoff_t end = cl_index(obj, fio->fi_end); int result = 0; if (fio->fi_mode == CL_FSYNC_LOCAL) { result = osc_cache_wait_range(env, cl2osc(obj), start, end); } else if (fio->fi_mode == CL_FSYNC_ALL) { - struct osc_io *oio = cl2osc_io(env, slice); + struct osc_io *oio = cl2osc_io(env, slice); struct osc_async_cbargs *cbargs = &oio->oi_cbarg; wait_for_completion(&cbargs->opc_sync); @@ -717,17 +717,17 @@ static void osc_req_attr_set(const struct lu_env *env, struct cl_req_attr *attr, u64 flags) { struct lov_oinfo *oinfo; - struct cl_req *clerq; - struct cl_page *apage; /* _some_ page in @clerq */ - struct cl_lock *lock; /* _some_ lock protecting @apage */ - struct osc_lock *olck; - struct osc_page *opg; - struct obdo *oa; - struct ost_lvb *lvb; - - oinfo = cl2osc(obj)->oo_oinfo; - lvb = &oinfo->loi_lvb; - oa = attr->cra_oa; + struct cl_req *clerq; + struct cl_page *apage; /* _some_ page in @clerq */ + struct cl_lock *lock; /* _some_ lock protecting @apage */ + struct osc_lock *olck; + struct osc_page *opg; + struct obdo *oa; + struct ost_lvb *lvb; + + oinfo = cl2osc(obj)->oo_oinfo; + lvb = &oinfo->loi_lvb; + oa = attr->cra_oa; if ((flags & OBD_MD_FLMTIME) != 0) { oa->o_mtime = lvb->lvb_mtime; diff --git a/drivers/staging/lustre/lustre/osc/osc_lock.c b/drivers/staging/lustre/lustre/osc/osc_lock.c index 350ad49..9d851ad 100644 --- a/drivers/staging/lustre/lustre/osc/osc_lock.c +++ b/drivers/staging/lustre/lustre/osc/osc_lock.c @@ -89,9 +89,9 @@ static struct ldlm_lock *osc_handle_ptr(struct lustre_handle *handle) */ static int osc_lock_invariant(struct osc_lock *ols) { - struct ldlm_lock *lock = osc_handle_ptr(&ols->ols_handle); - struct ldlm_lock *olock = ols->ols_lock; - int handle_used = lustre_handle_is_used(&ols->ols_handle); + struct ldlm_lock *lock = osc_handle_ptr(&ols->ols_handle); + struct ldlm_lock *olock = ols->ols_lock; + int handle_used = lustre_handle_is_used(&ols->ols_handle); if (ergo(osc_lock_is_lockless(ols), ols->ols_locklessable && ols->ols_lock == NULL)) @@ -237,7 +237,7 @@ static int osc_lock_unuse(const struct lu_env *env, static void osc_lock_fini(const struct lu_env *env, struct cl_lock_slice *slice) { - struct osc_lock *ols = cl2osc_lock(slice); + struct osc_lock *ols = cl2osc_lock(slice); LINVRNT(osc_lock_invariant(ols)); /* @@ -337,19 +337,19 @@ static void osc_ast_data_put(const struct lu_env *env, struct osc_lock *olck) static void osc_lock_lvb_update(const struct lu_env *env, struct osc_lock *olck, int rc) { - struct ost_lvb *lvb; - struct cl_object *obj; - struct lov_oinfo *oinfo; - struct cl_attr *attr; - unsigned valid; + struct ost_lvb *lvb; + struct cl_object *obj; + struct lov_oinfo *oinfo; + struct cl_attr *attr; + unsigned valid; if (!(olck->ols_flags & LDLM_FL_LVB_READY)) return; - lvb = &olck->ols_lvb; - obj = olck->ols_cl.cls_obj; + lvb = &olck->ols_lvb; + obj = olck->ols_cl.cls_obj; oinfo = cl2osc(obj)->oo_oinfo; - attr = &osc_env_info(env)->oti_attr; + attr = &osc_env_info(env)->oti_attr; valid = CAT_BLOCKS | CAT_ATIME | CAT_CTIME | CAT_MTIME | CAT_SIZE; cl_lvb2attr(attr, lvb); @@ -401,8 +401,8 @@ static void osc_lock_lvb_update(const struct lu_env *env, struct osc_lock *olck, static void osc_lock_granted(const struct lu_env *env, struct osc_lock *olck, struct ldlm_lock *dlmlock, int rc) { - struct ldlm_extent *ext; - struct cl_lock *lock; + struct ldlm_extent *ext; + struct cl_lock *lock; struct cl_lock_descr *descr; LASSERT(dlmlock->l_granted_mode == dlmlock->l_req_mode); @@ -414,10 +414,10 @@ static void osc_lock_granted(const struct lu_env *env, struct osc_lock *olck, descr->cld_obj = lock->cll_descr.cld_obj; /* XXX check that ->l_granted_mode is valid. */ - descr->cld_mode = osc_ldlm2cl_lock(dlmlock->l_granted_mode); + descr->cld_mode = osc_ldlm2cl_lock(dlmlock->l_granted_mode); descr->cld_start = cl_index(descr->cld_obj, ext->start); - descr->cld_end = cl_index(descr->cld_obj, ext->end); - descr->cld_gid = ext->gid; + descr->cld_end = cl_index(descr->cld_obj, ext->end); + descr->cld_gid = ext->gid; /* * tell upper layers the extent of the lock that was actually * granted @@ -482,11 +482,11 @@ static void osc_lock_upcall0(const struct lu_env *env, struct osc_lock *olck) */ static int osc_lock_upcall(void *cookie, int errcode) { - struct osc_lock *olck = cookie; - struct cl_lock_slice *slice = &olck->ols_cl; - struct cl_lock *lock = slice->cls_lock; - struct lu_env *env; - struct cl_env_nest nest; + struct osc_lock *olck = cookie; + struct cl_lock_slice *slice = &olck->ols_cl; + struct cl_lock *lock = slice->cls_lock; + struct lu_env *env; + struct cl_env_nest nest; env = cl_env_nested_get(&nest); if (!IS_ERR(env)) { @@ -626,7 +626,7 @@ static int osc_dlm_blocking_ast0(const struct lu_env *env, void *data, int flag) { struct osc_lock *olck; - struct cl_lock *lock; + struct cl_lock *lock; int result; int cancel; @@ -733,9 +733,9 @@ static int osc_ldlm_blocking_ast(struct ldlm_lock *dlmlock, struct ldlm_lock_desc *new, void *data, int flag) { - struct lu_env *env; + struct lu_env *env; struct cl_env_nest nest; - int result; + int result; /* * This can be called in the context of outer IO, e.g., @@ -774,9 +774,9 @@ static int osc_ldlm_completion_ast(struct ldlm_lock *dlmlock, __u64 flags, void *data) { struct cl_env_nest nest; - struct lu_env *env; - struct osc_lock *olck; - struct cl_lock *lock; + struct lu_env *env; + struct osc_lock *olck; + struct cl_lock *lock; int result; int dlmrc; @@ -830,15 +830,15 @@ static int osc_ldlm_completion_ast(struct ldlm_lock *dlmlock, static int osc_ldlm_glimpse_ast(struct ldlm_lock *dlmlock, void *data) { - struct ptlrpc_request *req = data; + struct ptlrpc_request *req = data; struct osc_lock *olck; - struct cl_lock *lock; - struct cl_object *obj; - struct cl_env_nest nest; - struct lu_env *env; - struct ost_lvb *lvb; - struct req_capsule *cap; - int result; + struct cl_lock *lock; + struct cl_object *obj; + struct cl_env_nest nest; + struct lu_env *env; + struct ost_lvb *lvb; + struct req_capsule *cap; + int result; LASSERT(lustre_msg_get_opc(req->rq_reqmsg) == LDLM_GL_CALLBACK); @@ -916,11 +916,11 @@ static void osc_lock_build_einfo(const struct lu_env *env, */ mode = CLM_READ; - einfo->ei_type = LDLM_EXTENT; - einfo->ei_mode = osc_cl_lock2ldlm(mode); - einfo->ei_cb_bl = osc_ldlm_blocking_ast; - einfo->ei_cb_cp = osc_ldlm_completion_ast; - einfo->ei_cb_gl = osc_ldlm_glimpse_ast; + einfo->ei_type = LDLM_EXTENT; + einfo->ei_mode = osc_cl_lock2ldlm(mode); + einfo->ei_cb_bl = osc_ldlm_blocking_ast; + einfo->ei_cb_cp = osc_ldlm_completion_ast; + einfo->ei_cb_gl = osc_ldlm_glimpse_ast; einfo->ei_cbdata = lock; /* value to be put into ->l_ast_data */ } @@ -948,9 +948,9 @@ static void osc_lock_to_lockless(const struct lu_env *env, ols->ols_locklessable = 1; slice->cls_ops = &osc_lock_lockless_ops; } else { - struct osc_io *oio = osc_env_io(env); - struct cl_io *io = oio->oi_cl.cis_io; - struct cl_object *obj = slice->cls_obj; + struct osc_io *oio = osc_env_io(env); + struct cl_io *io = oio->oi_cl.cis_io; + struct cl_object *obj = slice->cls_obj; struct osc_object *oob = cl2osc(obj); const struct osc_device *osd = lu2osc_dev(obj->co_lu.lo_dev); struct obd_connect_data *ocd; @@ -1006,13 +1006,13 @@ static int osc_lock_compatible(const struct osc_lock *qing, static int osc_lock_enqueue_wait(const struct lu_env *env, const struct osc_lock *olck) { - struct cl_lock *lock = olck->ols_cl.cls_lock; - struct cl_lock_descr *descr = &lock->cll_descr; - struct cl_object_header *hdr = cl_object_header(descr->cld_obj); - struct cl_lock *scan; - struct cl_lock *conflict = NULL; - int lockless = osc_lock_is_lockless(olck); - int rc = 0; + struct cl_lock *lock = olck->ols_cl.cls_lock; + struct cl_lock_descr *descr = &lock->cll_descr; + struct cl_object_header *hdr = cl_object_header(descr->cld_obj); + struct cl_lock *scan; + struct cl_lock *conflict = NULL; + int lockless = osc_lock_is_lockless(olck); + int rc = 0; LASSERT(cl_lock_is_mutexed(lock)); @@ -1102,8 +1102,8 @@ static int osc_lock_enqueue(const struct lu_env *env, const struct cl_lock_slice *slice, struct cl_io *unused, __u32 enqflags) { - struct osc_lock *ols = cl2osc_lock(slice); - struct cl_lock *lock = ols->ols_cl.cls_lock; + struct osc_lock *ols = cl2osc_lock(slice); + struct cl_lock *lock = ols->ols_cl.cls_lock; int result; LASSERT(cl_lock_is_mutexed(lock)); @@ -1116,10 +1116,10 @@ static int osc_lock_enqueue(const struct lu_env *env, result = osc_lock_enqueue_wait(env, ols); if (result == 0) { if (!osc_lock_is_lockless(ols)) { - struct osc_object *obj = cl2osc(slice->cls_obj); - struct osc_thread_info *info = osc_env_info(env); - struct ldlm_res_id *resname = &info->oti_resname; - ldlm_policy_data_t *policy = &info->oti_policy; + struct osc_object *obj = cl2osc(slice->cls_obj); + struct osc_thread_info *info = osc_env_info(env); + struct ldlm_res_id *resname = &info->oti_resname; + ldlm_policy_data_t *policy = &info->oti_policy; struct ldlm_enqueue_info *einfo = &ols->ols_einfo; /* lock will be passed as upcall cookie, @@ -1164,7 +1164,7 @@ static int osc_lock_wait(const struct lu_env *env, const struct cl_lock_slice *slice) { struct osc_lock *olck = cl2osc_lock(slice); - struct cl_lock *lock = olck->ols_cl.cls_lock; + struct cl_lock *lock = olck->ols_cl.cls_lock; LINVRNT(osc_lock_invariant(olck)); @@ -1245,14 +1245,14 @@ static int osc_lock_use(const struct lu_env *env, static int osc_lock_flush(struct osc_lock *ols, int discard) { - struct cl_lock *lock = ols->ols_cl.cls_lock; - struct cl_env_nest nest; - struct lu_env *env; + struct cl_lock *lock = ols->ols_cl.cls_lock; + struct cl_env_nest nest; + struct lu_env *env; int result = 0; env = cl_env_nested_get(&nest); if (!IS_ERR(env)) { - struct osc_object *obj = cl2osc(ols->ols_cl.cls_obj); + struct osc_object *obj = cl2osc(ols->ols_cl.cls_obj); struct cl_lock_descr *descr = &lock->cll_descr; int rc = 0; @@ -1298,11 +1298,11 @@ static int osc_lock_flush(struct osc_lock *ols, int discard) static void osc_lock_cancel(const struct lu_env *env, const struct cl_lock_slice *slice) { - struct cl_lock *lock = slice->cls_lock; - struct osc_lock *olck = cl2osc_lock(slice); + struct cl_lock *lock = slice->cls_lock; + struct osc_lock *olck = cl2osc_lock(slice); struct ldlm_lock *dlmlock = olck->ols_lock; - int result = 0; - int discard; + int result = 0; + int discard; LASSERT(cl_lock_is_mutexed(lock)); LINVRNT(osc_lock_invariant(olck)); @@ -1591,7 +1591,7 @@ int osc_lock_init(const struct lu_env *env, int osc_dlm_lock_pageref(struct ldlm_lock *dlm) { struct osc_lock *olock; - int rc = 0; + int rc = 0; spin_lock(&osc_ast_guard); olock = dlm->l_ast_data; diff --git a/drivers/staging/lustre/lustre/osc/osc_object.c b/drivers/staging/lustre/lustre/osc/osc_object.c index 92c202f..c628a25 100644 --- a/drivers/staging/lustre/lustre/osc/osc_object.c +++ b/drivers/staging/lustre/lustre/osc/osc_object.c @@ -72,7 +72,7 @@ static struct osc_object *lu2osc(const struct lu_object *obj) static int osc_object_init(const struct lu_env *env, struct lu_object *obj, const struct lu_object_conf *conf) { - struct osc_object *osc = lu2osc(obj); + struct osc_object *osc = lu2osc(obj); const struct cl_object_conf *cconf = lu2cl_conf(conf); int i; @@ -136,9 +136,9 @@ int osc_lvb_print(const struct lu_env *env, void *cookie, static int osc_object_print(const struct lu_env *env, void *cookie, lu_printer_t p, const struct lu_object *obj) { - struct osc_object *osc = lu2osc(obj); - struct lov_oinfo *oinfo = osc->oo_oinfo; - struct osc_async_rc *ar = &oinfo->loi_ar; + struct osc_object *osc = lu2osc(obj); + struct lov_oinfo *oinfo = osc->oo_oinfo; + struct osc_async_rc *ar = &oinfo->loi_ar; (*p)(env, cookie, "id: " DOSTID " idx: %d gen: %d kms_valid: %u kms %llu rc: %d force_sync: %d min_xid: %llu ", POSTID(&oinfo->loi_oi), oinfo->loi_ost_idx, @@ -163,7 +163,7 @@ int osc_attr_set(const struct lu_env *env, struct cl_object *obj, const struct cl_attr *attr, unsigned valid) { struct lov_oinfo *oinfo = cl2osc(obj)->oo_oinfo; - struct ost_lvb *lvb = &oinfo->loi_lvb; + struct ost_lvb *lvb = &oinfo->loi_lvb; if (valid & CAT_SIZE) lvb->lvb_size = attr->cat_size; @@ -188,7 +188,7 @@ static int osc_object_glimpse(const struct lu_env *env, { struct lov_oinfo *oinfo = cl2osc(obj)->oo_oinfo; - lvb->lvb_size = oinfo->loi_kms; + lvb->lvb_size = oinfo->loi_kms; lvb->lvb_blocks = oinfo->loi_lvb.lvb_blocks; return 0; } @@ -208,9 +208,9 @@ void osc_object_clear_contended(struct osc_object *obj) int osc_object_is_contended(struct osc_object *obj) { - struct osc_device *dev = lu2osc_dev(obj->oo_cl.co_lu.lo_dev); + struct osc_device *dev = lu2osc_dev(obj->oo_cl.co_lu.lo_dev); int osc_contention_time = dev->od_contention_time; - unsigned long cur_time = cfs_time_current(); + unsigned long cur_time = cfs_time_current(); unsigned long retry_time; if (OBD_FAIL_CHECK(OBD_FAIL_OSC_OBJECT_CONTENTION)) @@ -255,7 +255,7 @@ struct lu_object *osc_object_alloc(const struct lu_env *env, struct lu_device *dev) { struct osc_object *osc; - struct lu_object *obj; + struct lu_object *obj; OBD_SLAB_ALLOC_PTR_GFP(osc, osc_object_kmem, GFP_NOFS); if (osc != NULL) { diff --git a/drivers/staging/lustre/lustre/osc/osc_page.c b/drivers/staging/lustre/lustre/osc/osc_page.c index 76ba58b..4077904 100644 --- a/drivers/staging/lustre/lustre/osc/osc_page.c +++ b/drivers/staging/lustre/lustre/osc/osc_page.c @@ -216,7 +216,7 @@ static int osc_page_cache_add(const struct lu_env *env, const struct cl_page_slice *slice, struct cl_io *io) { - struct osc_io *oio = osc_env_io(env); + struct osc_io *oio = osc_env_io(env); struct osc_page *opg = cl2osc_page(slice); int result; @@ -255,7 +255,7 @@ static int osc_page_addref_lock(const struct lu_env *env, struct cl_lock *lock) { struct osc_lock *olock; - int rc; + int rc; LASSERT(opg->ops_lock == NULL); @@ -274,7 +274,7 @@ static int osc_page_addref_lock(const struct lu_env *env, static void osc_page_putref_lock(const struct lu_env *env, struct osc_page *opg) { - struct cl_lock *lock = opg->ops_lock; + struct cl_lock *lock = opg->ops_lock; struct osc_lock *olock; LASSERT(lock != NULL); @@ -291,7 +291,7 @@ static int osc_page_is_under_lock(const struct lu_env *env, struct cl_io *unused) { struct cl_lock *lock; - int result = -ENODATA; + int result = -ENODATA; lock = cl_lock_at_page(env, slice->cpl_obj, slice->cpl_page, NULL, 1, 0); @@ -317,7 +317,7 @@ static void osc_page_completion_read(const struct lu_env *env, const struct cl_page_slice *slice, int ioret) { - struct osc_page *opg = cl2osc_page(slice); + struct osc_page *opg = cl2osc_page(slice); struct osc_object *obj = cl2osc(opg->ops_cl.cpl_obj); if (likely(opg->ops_lock)) @@ -329,7 +329,7 @@ static void osc_page_completion_write(const struct lu_env *env, const struct cl_page_slice *slice, int ioret) { - struct osc_page *opg = cl2osc_page(slice); + struct osc_page *opg = cl2osc_page(slice); struct osc_object *obj = cl2osc(slice->cpl_obj); osc_lru_add(osc_cli(obj), opg); @@ -364,10 +364,10 @@ static int osc_page_print(const struct lu_env *env, const struct cl_page_slice *slice, void *cookie, lu_printer_t printer) { - struct osc_page *opg = cl2osc_page(slice); + struct osc_page *opg = cl2osc_page(slice); struct osc_async_page *oap = &opg->ops_oap; - struct osc_object *obj = cl2osc(slice->cpl_obj); - struct client_obd *cli = &osc_export(obj)->exp_obd->u.cli; + struct osc_object *obj = cl2osc(slice->cpl_obj); + struct client_obd *cli = &osc_export(obj)->exp_obd->u.cli; return (*printer)(env, cookie, LUSTRE_OSC_NAME "-page@%p: 1< %#x %d %u %s %s > 2< %llu %u %u %#x %#x | %p %p %p > 3< %s %p %d %lu %d > 4< %d %d %d %lu %s | %s %s %s %s > 5< %s %s %s %s | %d %s | %d %s %s>\n", opg, @@ -408,7 +408,7 @@ static int osc_page_print(const struct lu_env *env, static void osc_page_delete(const struct lu_env *env, const struct cl_page_slice *slice) { - struct osc_page *opg = cl2osc_page(slice); + struct osc_page *opg = cl2osc_page(slice); struct osc_object *obj = cl2osc(opg->ops_cl.cpl_obj); int rc; @@ -437,7 +437,7 @@ static void osc_page_delete(const struct lu_env *env, void osc_page_clip(const struct lu_env *env, const struct cl_page_slice *slice, int from, int to) { - struct osc_page *opg = cl2osc_page(slice); + struct osc_page *opg = cl2osc_page(slice); struct osc_async_page *oap = &opg->ops_oap; LINVRNT(osc_page_protected(env, opg, CLM_READ, 0)); @@ -478,8 +478,8 @@ static int osc_page_flush(const struct lu_env *env, } static const struct cl_page_operations osc_page_ops = { - .cpo_fini = osc_page_fini, - .cpo_print = osc_page_print, + .cpo_fini = osc_page_fini, + .cpo_print = osc_page_print, .cpo_delete = osc_page_delete, .cpo_is_under_lock = osc_page_is_under_lock, .cpo_disown = osc_page_disown, @@ -493,20 +493,20 @@ static const struct cl_page_operations osc_page_ops = { .cpo_completion = osc_page_completion_write } }, - .cpo_clip = osc_page_clip, - .cpo_cancel = osc_page_cancel, - .cpo_flush = osc_page_flush + .cpo_clip = osc_page_clip, + .cpo_cancel = osc_page_cancel, + .cpo_flush = osc_page_flush }; int osc_page_init(const struct lu_env *env, struct cl_object *obj, struct cl_page *page, struct page *vmpage) { struct osc_object *osc = cl2osc(obj); - struct osc_page *opg = cl_object_page_slice(obj, page); + struct osc_page *opg = cl_object_page_slice(obj, page); int result; opg->ops_from = 0; - opg->ops_to = PAGE_CACHE_SIZE; + opg->ops_to = PAGE_CACHE_SIZE; result = osc_prep_async_page(osc, opg, vmpage, cl_offset(obj, page->cp_index)); @@ -540,7 +540,7 @@ void osc_page_submit(const struct lu_env *env, struct osc_page *opg, enum cl_req_type crt, int brw_flags) { struct osc_async_page *oap = &opg->ops_oap; - struct osc_object *obj = oap->oap_obj; + struct osc_object *obj = oap->oap_obj; LINVRNT(osc_page_protected(env, opg, crt == CRT_WRITE ? CLM_WRITE : CLM_READ, 1)); @@ -550,9 +550,9 @@ void osc_page_submit(const struct lu_env *env, struct osc_page *opg, LASSERT(oap->oap_async_flags & ASYNC_READY); LASSERT(oap->oap_async_flags & ASYNC_COUNT_STABLE); - oap->oap_cmd = crt == CRT_WRITE ? OBD_BRW_WRITE : OBD_BRW_READ; - oap->oap_page_off = opg->ops_from; - oap->oap_count = opg->ops_to - opg->ops_from; + oap->oap_cmd = crt == CRT_WRITE ? OBD_BRW_WRITE : OBD_BRW_READ; + oap->oap_page_off = opg->ops_from; + oap->oap_count = opg->ops_to - opg->ops_from; oap->oap_brw_flags = OBD_BRW_SYNC | brw_flags; if (!client_is_remote(osc_export(obj)) && diff --git a/drivers/staging/lustre/lustre/osc/osc_quota.c b/drivers/staging/lustre/lustre/osc/osc_quota.c index 6690f14..2ff253f 100644 --- a/drivers/staging/lustre/lustre/osc/osc_quota.c +++ b/drivers/staging/lustre/lustre/osc/osc_quota.c @@ -232,7 +232,7 @@ int osc_quota_setup(struct obd_device *obd) int osc_quota_cleanup(struct obd_device *obd) { - struct client_obd *cli = &obd->u.cli; + struct client_obd *cli = &obd->u.cli; int type; for (type = 0; type < MAXQUOTAS; type++) @@ -245,8 +245,8 @@ int osc_quotactl(struct obd_device *unused, struct obd_export *exp, struct obd_quotactl *oqctl) { struct ptlrpc_request *req; - struct obd_quotactl *oqc; - int rc; + struct obd_quotactl *oqc; + int rc; req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp), &RQF_OST_QUOTACTL, LUSTRE_OST_VERSION, @@ -285,10 +285,10 @@ int osc_quotactl(struct obd_device *unused, struct obd_export *exp, int osc_quotacheck(struct obd_device *unused, struct obd_export *exp, struct obd_quotactl *oqctl) { - struct client_obd *cli = &exp->exp_obd->u.cli; - struct ptlrpc_request *req; - struct obd_quotactl *body; - int rc; + struct client_obd *cli = &exp->exp_obd->u.cli; + struct ptlrpc_request *req; + struct obd_quotactl *body; + int rc; req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp), &RQF_OST_QUOTACHECK, LUSTRE_OST_VERSION, diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index ded184e..f5d8b10 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -54,44 +54,44 @@ #include "osc_cl_internal.h" struct osc_brw_async_args { - struct obdo *aa_oa; - int aa_requested_nob; - int aa_nio_count; - u32 aa_page_count; - int aa_resends; - struct brw_page **aa_ppga; + struct obdo *aa_oa; + int aa_requested_nob; + int aa_nio_count; + u32 aa_page_count; + int aa_resends; + struct brw_page **aa_ppga; struct client_obd *aa_cli; - struct list_head aa_oaps; - struct list_head aa_exts; - struct obd_capa *aa_ocapa; - struct cl_req *aa_clerq; + struct list_head aa_oaps; + struct list_head aa_exts; + struct obd_capa *aa_ocapa; + struct cl_req *aa_clerq; }; struct osc_async_args { - struct obd_info *aa_oi; + struct obd_info *aa_oi; }; struct osc_setattr_args { - struct obdo *sa_oa; + struct obdo *sa_oa; obd_enqueue_update_f sa_upcall; - void *sa_cookie; + void *sa_cookie; }; struct osc_fsync_args { - struct obd_info *fa_oi; + struct obd_info *fa_oi; obd_enqueue_update_f fa_upcall; - void *fa_cookie; + void *fa_cookie; }; struct osc_enqueue_args { - struct obd_export *oa_exp; - __u64 *oa_flags; - obd_enqueue_update_f oa_upcall; - void *oa_cookie; - struct ost_lvb *oa_lvb; - struct lustre_handle *oa_lockh; + struct obd_export *oa_exp; + __u64 *oa_flags; + obd_enqueue_update_f oa_upcall; + void *oa_cookie; + struct ost_lvb *oa_lvb; + struct lustre_handle *oa_lockh; struct ldlm_enqueue_info *oa_ei; - unsigned int oa_agl:1; + unsigned int oa_agl:1; }; static void osc_release_ppga(struct brw_page **ppga, u32 count); @@ -403,9 +403,9 @@ int osc_setattr_async_base(struct obd_export *exp, struct obd_info *oinfo, obd_enqueue_update_f upcall, void *cookie, struct ptlrpc_request_set *rqset) { - struct ptlrpc_request *req; + struct ptlrpc_request *req; struct osc_setattr_args *sa; - int rc; + int rc; req = ptlrpc_request_alloc(class_exp2cliimp(exp), &RQF_OST_SETATTR); if (req == NULL) @@ -460,9 +460,9 @@ int osc_real_create(struct obd_export *exp, struct obdo *oa, struct lov_stripe_md **ea, struct obd_trans_info *oti) { struct ptlrpc_request *req; - struct ost_body *body; + struct ost_body *body; struct lov_stripe_md *lsm; - int rc; + int rc; LASSERT(oa); LASSERT(ea); @@ -548,10 +548,10 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo, obd_enqueue_update_f upcall, void *cookie, struct ptlrpc_request_set *rqset) { - struct ptlrpc_request *req; + struct ptlrpc_request *req; struct osc_setattr_args *sa; - struct ost_body *body; - int rc; + struct ost_body *body; + int rc; req = ptlrpc_request_alloc(class_exp2cliimp(exp), &RQF_OST_PUNCH); if (req == NULL) @@ -577,7 +577,7 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo, req->rq_interpret_reply = (ptlrpc_interpterer_t)osc_setattr_interpret; CLASSERT (sizeof(*sa) <= sizeof(req->rq_async_args)); sa = ptlrpc_req_async_args(req); - sa->sa_oa = oinfo->oi_oa; + sa->sa_oa = oinfo->oi_oa; sa->sa_upcall = upcall; sa->sa_cookie = cookie; if (rqset == PTLRPCD_SET) @@ -616,9 +616,9 @@ int osc_sync_base(struct obd_export *exp, struct obd_info *oinfo, struct ptlrpc_request_set *rqset) { struct ptlrpc_request *req; - struct ost_body *body; + struct ost_body *body; struct osc_fsync_args *fa; - int rc; + int rc; req = ptlrpc_request_alloc(class_exp2cliimp(exp), &RQF_OST_SYNC); if (req == NULL) @@ -757,9 +757,9 @@ static int osc_destroy(const struct lu_env *env, struct obd_export *exp, struct obd_trans_info *oti, struct obd_export *md_export, void *capa) { - struct client_obd *cli = &exp->exp_obd->u.cli; + struct client_obd *cli = &exp->exp_obd->u.cli; struct ptlrpc_request *req; - struct ost_body *body; + struct ost_body *body; LIST_HEAD(cancels); int rc, count; @@ -947,7 +947,7 @@ static int osc_shrink_grant(struct client_obd *cli) int osc_shrink_grant_to_target(struct client_obd *cli, __u64 target_bytes) { - int rc = 0; + int rc = 0; struct ost_body *body; client_obd_list_lock(&cli->cl_loi_list_lock); @@ -1131,8 +1131,8 @@ static int check_write_rcs(struct ptlrpc_request *req, int requested_nob, int niocount, u32 page_count, struct brw_page **pga) { - int i; - __u32 *remote_rcs; + int i; + __u32 *remote_rcs; remote_rcs = req_capsule_server_sized_get(&req->rq_pill, &RMF_RCS, sizeof(*remote_rcs) * @@ -1185,12 +1185,12 @@ static u32 osc_checksum_bulk(int nob, u32 pg_count, struct brw_page **pga, int opc, cksum_type_t cksum_type) { - __u32 cksum; - int i = 0; - struct cfs_crypto_hash_desc *hdesc; - unsigned int bufsize; - int err; - unsigned char cfs_alg = cksum_obd2cfs(cksum_type); + __u32 cksum; + int i = 0; + struct cfs_crypto_hash_desc *hdesc; + unsigned int bufsize; + int err; + unsigned char cfs_alg = cksum_obd2cfs(cksum_type); LASSERT(pg_count > 0); @@ -1250,14 +1250,14 @@ static int osc_brw_prep_request(int cmd, struct client_obd *cli, struct obd_capa *ocapa, int reserve, int resend) { - struct ptlrpc_request *req; + struct ptlrpc_request *req; struct ptlrpc_bulk_desc *desc; - struct ost_body *body; - struct obd_ioobj *ioobj; - struct niobuf_remote *niobuf; + struct ost_body *body; + struct obd_ioobj *ioobj; + struct niobuf_remote *niobuf; int niocount, i, requested_nob, opc, rc; struct osc_brw_async_args *aa; - struct req_capsule *pill; + struct req_capsule *pill; struct brw_page *pg_prev; if (OBD_FAIL_CHECK(OBD_FAIL_OSC_BRW_PREP_REQ)) @@ -1359,8 +1359,8 @@ static int osc_brw_prep_request(int cmd, struct client_obd *cli, niobuf->len += pg->count; } else { niobuf->offset = pg->off; - niobuf->len = pg->count; - niobuf->flags = pg->flag; + niobuf->len = pg->count; + niobuf->flags = pg->flag; } pg_prev = pg; } @@ -1581,9 +1581,9 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) if (body->oa.o_valid & OBD_MD_FLCKSUM) { static int cksum_counter; - __u32 server_cksum = body->oa.o_cksum; - char *via; - char *router; + __u32 server_cksum = body->oa.o_cksum; + char *via; + char *router; cksum_type_t cksum_type; cksum_type = cksum_type_unpack(body->oa.o_valid &OBD_MD_FLFLAGS? @@ -1758,7 +1758,7 @@ static int brw_interpret(const struct lu_env *env, struct osc_brw_async_args *aa = data; struct osc_extent *ext; struct osc_extent *tmp; - struct cl_object *obj = NULL; + struct cl_object *obj = NULL; struct client_obd *cli = aa->aa_cli; rc = osc_brw_fini_request(req, rc); @@ -1862,26 +1862,25 @@ static int brw_interpret(const struct lu_env *env, int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, struct list_head *ext_list, int cmd, pdl_policy_t pol) { - struct ptlrpc_request *req = NULL; - struct osc_extent *ext; - struct brw_page **pga = NULL; - struct osc_brw_async_args *aa = NULL; - struct obdo *oa = NULL; - struct osc_async_page *oap; - struct osc_async_page *tmp; - struct cl_req *clerq = NULL; - enum cl_req_type crt = (cmd & OBD_BRW_WRITE) ? CRT_WRITE : - CRT_READ; - struct ldlm_lock *lock = NULL; - struct cl_req_attr *crattr = NULL; - u64 starting_offset = OBD_OBJECT_EOF; - u64 ending_offset = 0; - int mpflag = 0; - int mem_tight = 0; - int page_count = 0; - int i; - int rc; - struct ost_body *body; + struct ptlrpc_request *req = NULL; + struct osc_extent *ext; + struct brw_page **pga = NULL; + struct osc_brw_async_args *aa = NULL; + struct obdo *oa = NULL; + struct osc_async_page *oap; + struct osc_async_page *tmp; + struct cl_req *clerq = NULL; + enum cl_req_type crt = (cmd & OBD_BRW_WRITE) ? CRT_WRITE : CRT_READ; + struct ldlm_lock *lock = NULL; + struct cl_req_attr *crattr = NULL; + u64 starting_offset = OBD_OBJECT_EOF; + u64 ending_offset = 0; + int mpflag = 0; + int mem_tight = 0; + int page_count = 0; + int i; + int rc; + struct ost_body *body; LIST_HEAD(rpc_list); LASSERT(!list_empty(ext_list)); @@ -2362,12 +2361,12 @@ int osc_enqueue_base(struct obd_export *exp, struct ldlm_res_id *res_id, aa = ptlrpc_req_async_args(req); aa->oa_ei = einfo; aa->oa_exp = exp; - aa->oa_flags = flags; + aa->oa_flags = flags; aa->oa_upcall = upcall; aa->oa_cookie = cookie; - aa->oa_lvb = lvb; - aa->oa_lockh = lockh; - aa->oa_agl = !!agl; + aa->oa_lvb = lvb; + aa->oa_lockh = lockh; + aa->oa_agl = !!agl; req->rq_interpret_reply = (ptlrpc_interpterer_t)osc_enqueue_interpret; @@ -2480,10 +2479,10 @@ static int osc_statfs_async(struct obd_export *exp, struct obd_info *oinfo, __u64 max_age, struct ptlrpc_request_set *rqset) { - struct obd_device *obd = class_exp2obd(exp); + struct obd_device *obd = class_exp2obd(exp); struct ptlrpc_request *req; struct osc_async_args *aa; - int rc; + int rc; /* We could possibly pass max_age in the request (as an absolute * timestamp or a "seconds.usec ago") so the target can avoid doing @@ -2522,10 +2521,10 @@ static int osc_statfs_async(struct obd_export *exp, static int osc_statfs(const struct lu_env *env, struct obd_export *exp, struct obd_statfs *osfs, __u64 max_age, __u32 flags) { - struct obd_device *obd = class_exp2obd(exp); - struct obd_statfs *msfs; + struct obd_device *obd = class_exp2obd(exp); + struct obd_statfs *msfs; struct ptlrpc_request *req; - struct obd_import *imp = NULL; + struct obd_import *imp = NULL; int rc; /*Since the request might also come from lprocfs, so we need @@ -2749,9 +2748,9 @@ static int osc_get_info(const struct lu_env *env, struct obd_export *exp, return 0; } else if (KEY_IS(KEY_LAST_ID)) { struct ptlrpc_request *req; - u64 *reply; - char *tmp; - int rc; + u64 *reply; + char *tmp; + int rc; req = ptlrpc_request_alloc(class_exp2cliimp(exp), &RQF_OST_GET_INFO_LAST_ID); @@ -2788,14 +2787,14 @@ static int osc_get_info(const struct lu_env *env, struct obd_export *exp, } else if (KEY_IS(KEY_FIEMAP)) { struct ll_fiemap_info_key *fm_key = (struct ll_fiemap_info_key *)key; - struct ldlm_res_id res_id; - ldlm_policy_data_t policy; - struct lustre_handle lockh; - ldlm_mode_t mode = 0; - struct ptlrpc_request *req; - struct ll_user_fiemap *reply; - char *tmp; - int rc; + struct ldlm_res_id res_id; + ldlm_policy_data_t policy; + struct lustre_handle lockh; + ldlm_mode_t mode = 0; + struct ptlrpc_request *req; + struct ll_user_fiemap *reply; + char *tmp; + int rc; if (!(fm_key->fiemap.fm_flags & FIEMAP_FLAG_SYNC)) goto skip_locking; @@ -2881,10 +2880,10 @@ static int osc_set_info_async(const struct lu_env *env, struct obd_export *exp, void *val, struct ptlrpc_request_set *set) { struct ptlrpc_request *req; - struct obd_device *obd = exp->exp_obd; - struct obd_import *imp = class_exp2cliimp(exp); - char *tmp; - int rc; + struct obd_device *obd = exp->exp_obd; + struct obd_import *imp = class_exp2cliimp(exp); + char *tmp; + int rc; OBD_FAIL_TIMEOUT(OBD_FAIL_OSC_SHUTDOWN, 10); @@ -3071,8 +3070,8 @@ static int osc_import_event(struct obd_device *obd, } case IMP_EVENT_INVALIDATE: { struct ldlm_namespace *ns = obd->obd_namespace; - struct lu_env *env; - int refcheck; + struct lu_env *env; + int refcheck; env = cl_env_get(&refcheck); if (!IS_ERR(env)) { @@ -3159,9 +3158,9 @@ static int brw_queue_work(const struct lu_env *env, void *data) int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) { struct lprocfs_static_vars lvars = { NULL }; - struct client_obd *cli = &obd->u.cli; - void *handler; - int rc; + struct client_obd *cli = &obd->u.cli; + void *handler; + int rc; rc = ptlrpcd_addref(); if (rc) -- 1.7.1 From shuey at purdue.edu Fri May 22 22:48:26 2015 From: shuey at purdue.edu (Michael Shuey) Date: Fri, 22 May 2015 18:48:26 -0400 Subject: [lustre-devel] [PATCH v4 00/13] staging: lustre: lnet: code cleanups In-Reply-To: <20150522092142.GJ4150@mwanda> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <20150522092142.GJ4150@mwanda> Message-ID: I can definitely clean up the issues you (and others) have raised, and will work on breaking up the larger changes into smaller, topic-based sets as well. I could use some instruction on how to proceed, though... I presume in this case I should've flagged this series as an RFC, and started to advertise a merge-able patch when most of the feedback was resolved (and not added additional cleanups to the series already under review). What do I do with the cleanups in the present case - re-label them as an RFC, repost all patches for comment (including the things added in what I've labelled v4), and send a final patch series when all comments are resolved? Or break them up into the previous PATCH v3 set, which had no comments, plus a second series tagged RFC (at least until I've got a sense of appropriate cleanup and granularity)? Also, in the future, at what point is it safe to assume a set of patches will be merged? And how do I indicate dependencies between series of patches? This last is fairly important to me, given the overlaps with some of James' work; we're beginning to coordinate via email, but I'd like to find out the general expectation here (and hopefully avoid this sort of faux pas going forward). Many thanks for your continued feedback and advice, Dan. -- Mike Shuey On Fri, May 22, 2015 at 5:21 AM, Dan Carpenter wrote: > On Thu, May 21, 2015 at 03:50:23PM -0400, Mike Shuey wrote: > > This patch series cleans up code in staging/lustre/lnet - mostly spacing > > and dead function cleanup. Should apply against linux-next 20150518. > > Why are you sending a v4 of this? We don't actually enjoy reviewing the > same patchset over and over... > > Update: I have investigated and it is because you add a few new patches > to this set which were not in the original. Just assume that the > original patchset will be merge and send the additional patches as a new > set. > > Also since no one replied to the v3 patchset and Greg has a 5000 patches > in between v3 and v4 he will not seen v4 until days after he has applied > v3 so it causes confusion. > > Also you sent a v5 of this patchset but without a v5 label... > > regards, > dan carpenter > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From simmonsja at ornl.gov Fri May 22 15:08:44 2015 From: simmonsja at ornl.gov (Simmons, James A.) Date: Fri, 22 May 2015 15:08:44 +0000 Subject: [lustre-devel] [PATCH 1/3] staging:lustre: remove tcpip abstraction from libcfs In-Reply-To: <20150522111536.GA19434@mwanda> References: <1432248378-28912-2-git-send-email-jsimmons@infradead.org> <20150522111536.GA19434@mwanda> Message-ID: <4ebf8ca4e2dd466c8ff68291b6670515@EXCHCS32.ornl.gov> >This patch does a lot of stuff all at once and it is hard to review. It >could easily be broken into patches which are easy to review. I have more very large patches. With breaking them up that means you are going to see hundreds of patches coming from me. >Ok in this next section we move functions around and rename them but >also introduce some bad changes in the new function. Thanks for pointing out these bugs. We are still carrying these bugs in the OpenSFS branch. Once you approve these changes I will sync up lib-socket.c in the OpenSFS branch. P.S Does the 3rd patch look okay to you? From julia.lawall at lip6.fr Fri May 22 05:06:47 2015 From: julia.lawall at lip6.fr (Julia Lawall) Date: Fri, 22 May 2015 07:06:47 +0200 (CEST) Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> Message-ID: On Thu, 21 May 2015, Michael Shuey wrote: > That's a task (of many) I've been putting on the back burner until the code > is cleaner.  It's also a HUGE change, since there are debug macros > everywhere, and they all check a #define'd mask to see if they should fire, > and the behavior is likely governed by parts of the lustre user land tools > as well. > > Suggestions are welcome.  Do other parts of the linux kernel define complex > debugging macros like these, or is this a lustre-ism?  Any suggestions on > how to handle this more in line with existing drivers? Once you decide what to do, you can use Coccinelle to make the changes for you. So you shouldn't be put off by the number of code sites to change. The normal functions are pr_err, pr_warn, etc. Perhaps you can follow Joe's suggestions if you really need something more complicated. julia > > -- > Mike Shuey > > On Thu, May 21, 2015 at 5:29 PM, Julia Lawall wrote: > > > > > > > > On Thu, 21 May 2015, Joe Perches wrote: > > > > > On Thu, 2015-05-21 at 15:50 -0400, Mike Shuey wrote: > > > > Fix many checkpatch.pl warnings. > > > [] > > > > diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c > b/drivers/staging/lustre/lnet/lnet/acceptor.c > > > [] > > > > @@ -99,38 +99,42 @@ lnet_connect_console_error(int rc, lnet_nid_t > peer_nid, > > > >     switch (rc) { > > > >     /* "normal" errors */ > > > >     case -ECONNREFUSED: > > > > -           CNETERR("Connection to %s at host %pI4h on port %d was > refused: check that Lustre is running on that node.\n", > > > > -                   libcfs_nid2str(peer_nid), > > > > -                   &peer_ip, peer_port); > > > > +           CNETERR( > > > > +                   "Connection to %s at host %pI4h on port %d was > refused: check that Lustre is running on that node.\n", > > > > +                   libcfs_nid2str(peer_nid), &peer_ip, peer_port); > > > > > > These are not improvements and checkpatch messages aren't dicta. > > > > > > Please don't convert code unless the conversion makes it better > > > for a human reader. > > > > > > These don't. > > > > I haven't looked into it, but perhaps there is a standard kernel printing > > function that these could be converted to directly? > > > > julia > > From joe at perches.com Fri May 22 15:24:34 2015 From: joe at perches.com (Joe Perches) Date: Fri, 22 May 2015 08:24:34 -0700 Subject: [lustre-devel] [PATCH 2/3] staging:lustre: remove kernel defines in userland headers In-Reply-To: References: <1432248378-28912-3-git-send-email-jsimmons@infradead.org> <20150522130019.GN4150@mwanda> Message-ID: <1432308274.29657.15.camel@perches.com> On Fri, 2015-05-22 at 15:12 +0000, Simmons, James A. wrote: > >> typedef struct lnet_peer { > >> - struct list_head lp_hashlist; /* chain on peer hash */ > >> - struct list_head lp_txq; /* messages blocking for tx credits */ > >> - struct list_head lp_rtrq; /* messages blocking for router credits */ > >> - struct list_head lp_rtr_list; /* chain on router list */ > >> - int lp_txcredits; /* # tx credits available */ > >> - int lp_mintxcredits; /* low water mark */ > >> - int lp_rtrcredits; /* # router credits */ > >> - int lp_minrtrcredits; /* low water mark */ > >> - unsigned int lp_alive:1; /* alive/dead? */ > >> - unsigned int lp_notify:1; /* notification outstanding? */ > >> - unsigned int lp_notifylnd:1; /* outstanding notification for LND? */ > >> - unsigned int lp_notifying:1; /* some thread is handling notification */ > >> - unsigned int lp_ping_notsent; /* SEND event outstanding from ping */ > >> - int lp_alive_count; /* # times router went dead<->alive */ > >> - long lp_txqnob; /* bytes queued for sending */ > >> - unsigned long lp_timestamp; /* time of last aliveness news */ > >> - unsigned long lp_ping_timestamp; /* time of last ping attempt */ > >> - unsigned long lp_ping_deadline; /* != 0 if ping reply expected */ > >> - unsigned long lp_last_alive; /* when I was last alive */ > >> - unsigned long lp_last_query; /* when lp_ni was queried last time */ > >> - lnet_ni_t *lp_ni; /* interface peer is on */ > >> - lnet_nid_t lp_nid; /* peer's NID */ > >> - int lp_refcount; /* # refs */ > >> - int lp_cpt; /* CPT this peer attached on */ > >> + /* chain on peer hash */ > >> + struct list_head lp_hashlist; > >> + /* messages blocking for tx credits */ > >> + struct list_head lp_txq; > >> + /* messages blocking for router credits */ > >> + struct list_head lp_rtrq; > >> + /* chain on router list */ > >> + struct list_head lp_rtr_list; > >> + /* # tx credits available */ > >> + int lp_txcredits; > >> + /* low water mark */ > >> + int lp_mintxcredits; > >> + /* # router credits */ > >> + int lp_rtrcredits; > >> + /* low water mark */ > >> + int lp_minrtrcredits; > >> + /* alive/dead? */ > >> + unsigned int lp_alive:1; > >> + /* notification outstanding? */ > >> + unsigned int lp_notify:1; > >> + /* outstanding notification for LND? */ > >> + unsigned int lp_notifylnd:1; > > > >This new block of declarations is uglier than the original. Don't make > >things uglier. > > Might be ugly but it makes checkpatch.pl happy. So it is a choice between > making checkpatch.pl happy about staying in the 80 character limit or looking > nice and chekpatch.pl being unhappy. I would choose looking nice every time. checkpatch is stupid. Please don't let it control you. Maybe it'd be better to add another --ignore type just for comments that extend longer than the maximum line length to checkpatch. From vitaly.fertman at seagate.com Wed May 20 18:06:45 2015 From: vitaly.fertman at seagate.com (Vitaly Fertman) Date: Wed, 20 May 2015 21:06:45 +0300 Subject: [lustre-devel] lustre design docs Message-ID: <69BD0579-A188-4012-8926-3F55CF5E1BF9@seagate.com> Hi All, there was an idea to publish existing design docs on opensfs wiki. is centralised design repository interesting at all? currently the existing designs are not in the wiki format, mostly pdf, so this is not an ideal doc repository we want to have: not changeable, not maintainable, could be outdated, etc, but could be published very quickly. however, this is not the final step but just a beginning. at the same time, we may get some benefits immediately: - all the docs are gathered in one centralised place, faster doc search; - the fully documented product (although maybe not very up-to-date initially) — attractive for many readers, especially newbies; - a quick jump to unknown code having a design, faster than reading the source code; after that, having these docs already published, next steps could be: - docs to be split on those which are to be maintained and left untouched; - a procedure of converting to be maintained docs to wiki format could be organised; - a procedure of updating converted docs to be organised; etc. would be valuable? thoughts? — Vitaly From simmonsja at ornl.gov Fri May 22 15:12:02 2015 From: simmonsja at ornl.gov (Simmons, James A.) Date: Fri, 22 May 2015 15:12:02 +0000 Subject: [lustre-devel] [PATCH 2/3] staging:lustre: remove kernel defines in userland headers In-Reply-To: <20150522130019.GN4150@mwanda> References: <1432248378-28912-3-git-send-email-jsimmons@infradead.org> <20150522130019.GN4150@mwanda> Message-ID: >> typedef struct lnet_peer { >> - struct list_head lp_hashlist; /* chain on peer hash */ >> - struct list_head lp_txq; /* messages blocking for tx credits */ >> - struct list_head lp_rtrq; /* messages blocking for router credits */ >> - struct list_head lp_rtr_list; /* chain on router list */ >> - int lp_txcredits; /* # tx credits available */ >> - int lp_mintxcredits; /* low water mark */ >> - int lp_rtrcredits; /* # router credits */ >> - int lp_minrtrcredits; /* low water mark */ >> - unsigned int lp_alive:1; /* alive/dead? */ >> - unsigned int lp_notify:1; /* notification outstanding? */ >> - unsigned int lp_notifylnd:1; /* outstanding notification for LND? */ >> - unsigned int lp_notifying:1; /* some thread is handling notification */ >> - unsigned int lp_ping_notsent; /* SEND event outstanding from ping */ >> - int lp_alive_count; /* # times router went dead<->alive */ >> - long lp_txqnob; /* bytes queued for sending */ >> - unsigned long lp_timestamp; /* time of last aliveness news */ >> - unsigned long lp_ping_timestamp; /* time of last ping attempt */ >> - unsigned long lp_ping_deadline; /* != 0 if ping reply expected */ >> - unsigned long lp_last_alive; /* when I was last alive */ >> - unsigned long lp_last_query; /* when lp_ni was queried last time */ >> - lnet_ni_t *lp_ni; /* interface peer is on */ >> - lnet_nid_t lp_nid; /* peer's NID */ >> - int lp_refcount; /* # refs */ >> - int lp_cpt; /* CPT this peer attached on */ >> + /* chain on peer hash */ >> + struct list_head lp_hashlist; >> + /* messages blocking for tx credits */ >> + struct list_head lp_txq; >> + /* messages blocking for router credits */ >> + struct list_head lp_rtrq; >> + /* chain on router list */ >> + struct list_head lp_rtr_list; >> + /* # tx credits available */ >> + int lp_txcredits; >> + /* low water mark */ >> + int lp_mintxcredits; >> + /* # router credits */ >> + int lp_rtrcredits; >> + /* low water mark */ >> + int lp_minrtrcredits; >> + /* alive/dead? */ >> + unsigned int lp_alive:1; >> + /* notification outstanding? */ >> + unsigned int lp_notify:1; >> + /* outstanding notification for LND? */ >> + unsigned int lp_notifylnd:1; > >This new block of declarations is uglier than the original. Don't make >things uglier. Might be ugly but it makes checkpatch.pl happy. So it is a choice between making checkpatch.pl happy about staying in the 80 character limit or looking nice and chekpatch.pl being unhappy. From oleg.drokin at intel.com Fri May 22 21:16:24 2015 From: oleg.drokin at intel.com (Drokin, Oleg) Date: Fri, 22 May 2015 21:16:24 +0000 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <1432309337.29657.16.camel@perches.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> <1432309337.29657.16.camel@perches.com> Message-ID: <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> On May 22, 2015, at 11:42 AM, Joe Perches wrote: > On Fri, 2015-05-22 at 08:08 +0000, Drokin, Oleg wrote: >> On May 22, 2015, at 1:06 AM, Julia Lawall wrote: >> >>> On Thu, 21 May 2015, Michael Shuey wrote: >>> >>>> That's a task (of many) I've been putting on the back burner until the code >>>> is cleaner. It's also a HUGE change, since there are debug macros >>>> everywhere, and they all check a #define'd mask to see if they should fire, >>>> and the behavior is likely governed by parts of the lustre user land tools >>>> as well. >>>> >>>> Suggestions are welcome. Do other parts of the linux kernel define complex >>>> debugging macros like these, or is this a lustre-ism? Any suggestions on >>>> how to handle this more in line with existing drivers? >>> >>> Once you decide what to do, you can use Coccinelle to make the changes for >>> you. So you shouldn't be put off by the number of code sites to change. >>> >>> The normal functions are pr_err, pr_warn, etc. Perhaps you can follow >>> Joe's suggestions if you really need something more complicated. >> >> Ideally leaving CERROR/CDEBUG in Lustre would be desirable from my perspective. > > My issue with CERROR is the name is little misleading. > It's actually a debugging message. > #define CERROR(format, ...) CDEBUG_LIMIT(D_ERROR, format, ## __VA_ARGS__) Except it's not a debugging message. There is a clear distinction. CERROR is something that get's printed on the console, because it's believed to be serious error (At least that's how the theory for it's usage goes). It also gets rate-limited so that the console does not get overflown. (but the debug buffer gets the full version). (there's also LCONSOLE that always get's printed, but it does not get the prefixes like line numbers and stuff). CDEBUG on the other hand is a debugging message (of which ERROR messages are sort of a subset (D_ERROR mask)). You can fine-tune those to be noops or to go into console or to debug buffer only. Most of those are doing nothing because they are off in the default debug mask, until actually enabled. That CERROR usees CDEBUG underneath is just to share some common infrastructure. > I think it'd be clearer as > lustre_debug(ERROR, ... > even if the name and use style is a little longer. I wonder what is more clear about that in your opinion ve lustre_error/lustre_debug? Bye, Oleg From gregkh at linuxfoundation.org Fri May 22 21:40:15 2015 From: gregkh at linuxfoundation.org (Greg Kroah-Hartman) Date: Fri, 22 May 2015 14:40:15 -0700 Subject: [lustre-devel] [PATCH 1/3] staging:lustre: remove tcpip abstraction from libcfs In-Reply-To: <4ebf8ca4e2dd466c8ff68291b6670515@EXCHCS32.ornl.gov> References: <1432248378-28912-2-git-send-email-jsimmons@infradead.org> <20150522111536.GA19434@mwanda> <4ebf8ca4e2dd466c8ff68291b6670515@EXCHCS32.ornl.gov> Message-ID: <20150522214015.GB26817@kroah.com> On Fri, May 22, 2015 at 03:08:44PM +0000, Simmons, James A. wrote: > >This patch does a lot of stuff all at once and it is hard to review. It > >could easily be broken into patches which are easy to review. > > I have more very large patches. With breaking them up that means you are > going to see hundreds of patches coming from me. hundreds of patches are not a problem at all for me, please do it that way as what you sent is almost impossible to properly review. thanks, greg k-h From joe at perches.com Fri May 22 15:42:17 2015 From: joe at perches.com (Joe Perches) Date: Fri, 22 May 2015 08:42:17 -0700 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> Message-ID: <1432309337.29657.16.camel@perches.com> On Fri, 2015-05-22 at 08:08 +0000, Drokin, Oleg wrote: > On May 22, 2015, at 1:06 AM, Julia Lawall wrote: > > > On Thu, 21 May 2015, Michael Shuey wrote: > > > >> That's a task (of many) I've been putting on the back burner until the code > >> is cleaner. It's also a HUGE change, since there are debug macros > >> everywhere, and they all check a #define'd mask to see if they should fire, > >> and the behavior is likely governed by parts of the lustre user land tools > >> as well. > >> > >> Suggestions are welcome. Do other parts of the linux kernel define complex > >> debugging macros like these, or is this a lustre-ism? Any suggestions on > >> how to handle this more in line with existing drivers? > > > > Once you decide what to do, you can use Coccinelle to make the changes for > > you. So you shouldn't be put off by the number of code sites to change. > > > > The normal functions are pr_err, pr_warn, etc. Perhaps you can follow > > Joe's suggestions if you really need something more complicated. > > Ideally leaving CERROR/CDEBUG in Lustre would be desirable from my perspective. My issue with CERROR is the name is little misleading. It's actually a debugging message. #define CERROR(format, ...) CDEBUG_LIMIT(D_ERROR, format, ## __VA_ARGS__) I think it'd be clearer as lustre_debug(ERROR, ... even if the name and use style is a little longer. > It allows you fine grained control about what to collect and what to output > into a (quite finite) kernel buffer (and over a quite slow serial console) > and at the same time if you need more info, there's a buffer you can fetch > separately that can grow much bigger and there's even a way to run a special > daemon to scrub the buffer eagerly so none of it is lost. From joe at perches.com Fri May 22 02:46:18 2015 From: joe at perches.com (Joe Perches) Date: Thu, 21 May 2015 19:46:18 -0700 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> Message-ID: <1432262778.20840.79.camel@perches.com> On Thu, 2015-05-21 at 18:04 -0400, Michael Shuey wrote: > That's a task (of many) I've been putting on the back burner until the code > is cleaner. It's also a HUGE change, since there are debug macros > everywhere, and they all check a #define'd mask to see if they should fire, > and the behavior is likely governed by parts of the lustre user land tools > as well. > > Suggestions are welcome. Do other parts of the linux kernel define complex > debugging macros like these, or is this a lustre-ism? Any suggestions on > how to handle this more in line with existing drivers? Yes, many other bits of code use custom debugging macros. A good general form is to add a either a generic level or bitmask macro and use a single entry like: my_dbg([optional_ptr,] , fmt, ...) so that can be tested against some variable set by MODULE_PARM_DESC controls. So, CNETERR(...) might be lustre_dbg(ptr, NETERR, fmt, ...) though I don't know what use the ptr might have. From oleg.drokin at intel.com Fri May 22 08:08:44 2015 From: oleg.drokin at intel.com (Drokin, Oleg) Date: Fri, 22 May 2015 08:08:44 +0000 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> Message-ID: <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> On May 22, 2015, at 1:06 AM, Julia Lawall wrote: > On Thu, 21 May 2015, Michael Shuey wrote: > >> That's a task (of many) I've been putting on the back burner until the code >> is cleaner. It's also a HUGE change, since there are debug macros >> everywhere, and they all check a #define'd mask to see if they should fire, >> and the behavior is likely governed by parts of the lustre user land tools >> as well. >> >> Suggestions are welcome. Do other parts of the linux kernel define complex >> debugging macros like these, or is this a lustre-ism? Any suggestions on >> how to handle this more in line with existing drivers? > > Once you decide what to do, you can use Coccinelle to make the changes for > you. So you shouldn't be put off by the number of code sites to change. > > The normal functions are pr_err, pr_warn, etc. Perhaps you can follow > Joe's suggestions if you really need something more complicated. Ideally leaving CERROR/CDEBUG in Lustre would be desirable from my perspective. It allows you fine grained control about what to collect and what to output into a (quite finite) kernel buffer (and over a quite slow serial console) and at the same time if you need more info, there's a buffer you can fetch separately that can grow much bigger and there's even a way to run a special daemon to scrub the buffer eagerly so none of it is lost. Bye, Oleg From joe at perches.com Fri May 22 23:57:10 2015 From: joe at perches.com (Joe Perches) Date: Fri, 22 May 2015 16:57:10 -0700 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> <1432309337.29657.16.camel@perches.com> <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> Message-ID: <1432339030.29657.20.camel@perches.com> On Fri, 2015-05-22 at 21:16 +0000, Drokin, Oleg wrote: > On May 22, 2015, at 11:42 AM, Joe Perches wrote: > > > On Fri, 2015-05-22 at 08:08 +0000, Drokin, Oleg wrote: > >> On May 22, 2015, at 1:06 AM, Julia Lawall wrote: > >> > >>> On Thu, 21 May 2015, Michael Shuey wrote: > >>> > >>>> That's a task (of many) I've been putting on the back burner until the code > >>>> is cleaner. It's also a HUGE change, since there are debug macros > >>>> everywhere, and they all check a #define'd mask to see if they should fire, > >>>> and the behavior is likely governed by parts of the lustre user land tools > >>>> as well. > >>>> > >>>> Suggestions are welcome. Do other parts of the linux kernel define complex > >>>> debugging macros like these, or is this a lustre-ism? Any suggestions on > >>>> how to handle this more in line with existing drivers? > >>> > >>> Once you decide what to do, you can use Coccinelle to make the changes for > >>> you. So you shouldn't be put off by the number of code sites to change. > >>> > >>> The normal functions are pr_err, pr_warn, etc. Perhaps you can follow > >>> Joe's suggestions if you really need something more complicated. > >> > >> Ideally leaving CERROR/CDEBUG in Lustre would be desirable from my perspective. > > > > My issue with CERROR is the name is little misleading. > > It's actually a debugging message. > > #define CERROR(format, ...) CDEBUG_LIMIT(D_ERROR, format, ## __VA_ARGS__) > > Except it's not a debugging message. > There is a clear distinction. Not really. If the first reading sjows that the mechanism it goes through is called CDEBUG, a reasonable expectation should be that it's a debugging message. > CERROR is something that get's printed on the console, because it's believed > to be serious error (At least that's how the theory for it's usage goes). > It also gets rate-limited so that the console does not get overflown. > (but the debug buffer gets the full version). > (there's also LCONSOLE that always get's printed, but it does not get the > prefixes like line numbers and stuff). > > CDEBUG on the other hand is a debugging message (of which ERROR messages are > sort of a subset (D_ERROR mask)). You can fine-tune those to be noops or > to go into console or to debug buffer only. Most of those are doing nothing > because they are off in the default debug mask, until actually enabled. > > That CERROR usees CDEBUG underneath is just to share some common infrastructure. > > > I think it'd be clearer as > > lustre_debug(ERROR, ... > > even if the name and use style is a little longer. > > I wonder what is more clear about that in your opinion ve > lustre_error/lustre_debug? The fact that you have to explain this shows that it's at least misleading unless you completely understand the code. It'd be more intelligible if this CERROR became lustre_err and the actual debugging uses were lustre_dbg Perhaps it needs a better explanation somewhere not in the code but in some external documentation. I haven't looked. From joe at perches.com Sat May 23 00:18:05 2015 From: joe at perches.com (Joe Perches) Date: Fri, 22 May 2015 17:18:05 -0700 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <863F0D66-99B1-4658-8A99-E3A843E0E8FC@intel.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> <1432309337.29657.16.camel@perches.com> <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> <1432339030.29657.20.camel@perches.com> <863F0D66-99B1-4658-8A99-E3A843E0E8FC@intel.com> Message-ID: <1432340285.29657.26.camel@perches.com> On Sat, 2015-05-23 at 00:07 +0000, Drokin, Oleg wrote: > On May 22, 2015, at 7:57 PM, Joe Perches wrote: > > On Fri, 2015-05-22 at 21:16 +0000, Drokin, Oleg wrote: > >> On May 22, 2015, at 11:42 AM, Joe Perches wrote: > >>> On Fri, 2015-05-22 at 08:08 +0000, Drokin, Oleg wrote: > >>>> On May 22, 2015, at 1:06 AM, Julia Lawall wrote: > >>>>> On Thu, 21 May 2015, Michael Shuey wrote: > >>>>> > >>>>>> That's a task (of many) I've been putting on the back burner until the code > >>>>>> is cleaner. It's also a HUGE change, since there are debug macros > >>>>>> everywhere, and they all check a #define'd mask to see if they should fire, > >>>>>> and the behavior is likely governed by parts of the lustre user land tools > >>>>>> as well. > >>>>>> > >>>>>> Suggestions are welcome. Do other parts of the linux kernel define complex > >>>>>> debugging macros like these, or is this a lustre-ism? Any suggestions on > >>>>>> how to handle this more in line with existing drivers? > >>>>> > >>>>> Once you decide what to do, you can use Coccinelle to make the changes for > >>>>> you. So you shouldn't be put off by the number of code sites to change. > >>>>> > >>>>> The normal functions are pr_err, pr_warn, etc. Perhaps you can follow > >>>>> Joe's suggestions if you really need something more complicated. > >>>> > >>>> Ideally leaving CERROR/CDEBUG in Lustre would be desirable from my perspective. > >>> > >>> My issue with CERROR is the name is little misleading. > >>> It's actually a debugging message. > >>> #define CERROR(format, ...) CDEBUG_LIMIT(D_ERROR, format, ## __VA_ARGS__) > >> > >> Except it's not a debugging message. > >> There is a clear distinction. > > > > Not really. If the first reading shows that the mechanism it > > goes through is called CDEBUG, a reasonable expectation should > > be that it's a debugging message. > > Well, various pr_err/pr_dbg for example, go through printk in the end too. > Do that make them the same? No, because each is labeled with the KERN_ that it uses. [] > >> I wonder what is more clear about that in your opinion ve > >> lustre_error/lustre_debug? > > > > The fact that you have to explain this shows that it's > > at least misleading unless you completely understand the > > code. > > Or you know, you might take the function name at the face value > and assume that CERROR means it's an error and CDEBUG means it's a debug message? Maybe, but I think that it'd be better if the mechanism it uses was more plainly named something like lustre_log. From oleg.drokin at intel.com Sat May 23 00:25:29 2015 From: oleg.drokin at intel.com (Drokin, Oleg) Date: Sat, 23 May 2015 00:25:29 +0000 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <1432340285.29657.26.camel@perches.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> <1432309337.29657.16.camel@perches.com> <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> <1432339030.29657.20.camel@perches.com> <863F0D66-99B1-4658-8A99-E3A843E0E8FC@intel.com> <1432340285.29657.26.camel@perches.com> Message-ID: <467D21EA-E5E8-4F16-AABD-31D79062FFF9@intel.com> On May 22, 2015, at 8:18 PM, Joe Perches wrote: >>>> I wonder what is more clear about that in your opinion ve >>>> lustre_error/lustre_debug? >>> >>> The fact that you have to explain this shows that it's >>> at least misleading unless you completely understand the >>> code. >> >> Or you know, you might take the function name at the face value >> and assume that CERROR means it's an error and CDEBUG means it's a debug message? > > Maybe, but I think that it'd be better if the mechanism > it uses was more plainly named something like lustre_log. While the idea seems good, the biggest obstacle here is such that there's already a thing called lustre log (llog for short too) - it's kind of a distributed journal of operations. Its there a different synonym, I wonder? From oleg.drokin at intel.com Sat May 23 00:07:42 2015 From: oleg.drokin at intel.com (Drokin, Oleg) Date: Sat, 23 May 2015 00:07:42 +0000 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <1432339030.29657.20.camel@perches.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> <1432309337.29657.16.camel@perches.com> <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> <1432339030.29657.20.camel@perches.com> Message-ID: <863F0D66-99B1-4658-8A99-E3A843E0E8FC@intel.com> On May 22, 2015, at 7:57 PM, Joe Perches wrote: > On Fri, 2015-05-22 at 21:16 +0000, Drokin, Oleg wrote: >> On May 22, 2015, at 11:42 AM, Joe Perches wrote: >> >>> On Fri, 2015-05-22 at 08:08 +0000, Drokin, Oleg wrote: >>>> On May 22, 2015, at 1:06 AM, Julia Lawall wrote: >>>> >>>>> On Thu, 21 May 2015, Michael Shuey wrote: >>>>> >>>>>> That's a task (of many) I've been putting on the back burner until the code >>>>>> is cleaner. It's also a HUGE change, since there are debug macros >>>>>> everywhere, and they all check a #define'd mask to see if they should fire, >>>>>> and the behavior is likely governed by parts of the lustre user land tools >>>>>> as well. >>>>>> >>>>>> Suggestions are welcome. Do other parts of the linux kernel define complex >>>>>> debugging macros like these, or is this a lustre-ism? Any suggestions on >>>>>> how to handle this more in line with existing drivers? >>>>> >>>>> Once you decide what to do, you can use Coccinelle to make the changes for >>>>> you. So you shouldn't be put off by the number of code sites to change. >>>>> >>>>> The normal functions are pr_err, pr_warn, etc. Perhaps you can follow >>>>> Joe's suggestions if you really need something more complicated. >>>> >>>> Ideally leaving CERROR/CDEBUG in Lustre would be desirable from my perspective. >>> >>> My issue with CERROR is the name is little misleading. >>> It's actually a debugging message. >>> #define CERROR(format, ...) CDEBUG_LIMIT(D_ERROR, format, ## __VA_ARGS__) >> >> Except it's not a debugging message. >> There is a clear distinction. > > Not really. If the first reading sjows that the mechanism it > goes through is called CDEBUG, a reasonable expectation should > be that it's a debugging message. Well, various pr_err/pr_dbg for example, go through printk in the end too. Do that make them the same? > >> CERROR is something that get's printed on the console, because it's believed >> to be serious error (At least that's how the theory for it's usage goes). >> It also gets rate-limited so that the console does not get overflown. >> (but the debug buffer gets the full version). >> (there's also LCONSOLE that always get's printed, but it does not get the >> prefixes like line numbers and stuff). >> >> CDEBUG on the other hand is a debugging message (of which ERROR messages are >> sort of a subset (D_ERROR mask)). You can fine-tune those to be noops or >> to go into console or to debug buffer only. Most of those are doing nothing >> because they are off in the default debug mask, until actually enabled. >> >> That CERROR usees CDEBUG underneath is just to share some common infrastructure. >> >>> I think it'd be clearer as >>> lustre_debug(ERROR, ... >>> even if the name and use style is a little longer. >> >> I wonder what is more clear about that in your opinion ve >> lustre_error/lustre_debug? > > The fact that you have to explain this shows that it's > at least misleading unless you completely understand the > code. Or you know, you might take the function name at the face value and assume that CERROR means it's an error and CDEBUG means it's a debug message? > It'd be more intelligible if this CERROR became lustre_err > and the actual debugging uses were lustre_dbg But the actual underlying call is hidden by the macro anyway and you never get to see it. You see CDEBUG/CERROR and how is that different from lustre_debug/lustre_err? > Perhaps it needs a better explanation somewhere not in the > code but in some external documentation. I haven't looked. > From joe at perches.com Sat May 23 00:36:30 2015 From: joe at perches.com (Joe Perches) Date: Fri, 22 May 2015 17:36:30 -0700 Subject: [lustre-devel] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <467D21EA-E5E8-4F16-AABD-31D79062FFF9@intel.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> <1432309337.29657.16.camel@perches.com> <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> <1432339030.29657.20.camel@perches.com> <863F0D66-99B1-4658-8A99-E3A843E0E8FC@intel.com> <1432340285.29657.26.camel@perches.com> <467D21EA-E5E8-4F16-AABD-31D79062FFF9@intel.com> Message-ID: <1432341390.29657.29.camel@perches.com> On Sat, 2015-05-23 at 00:25 +0000, Drokin, Oleg wrote: > On May 22, 2015, at 8:18 PM, Joe Perches wrote: > >>>> I wonder what is more clear about that in your opinion ve > >>>> lustre_error/lustre_debug? > >>> > >>> The fact that you have to explain this shows that it's > >>> at least misleading unless you completely understand the > >>> code. > >> > >> Or you know, you might take the function name at the face value > >> and assume that CERROR means it's an error and CDEBUG means it's a debug message? > > > > Maybe, but I think that it'd be better if the mechanism > > it uses was more plainly named something like lustre_log. > > While the idea seems good, the biggest obstacle here is such that > there's already a thing called lustre log (llog for short too) - > it's kind of a distributed journal of operations. > > Its there a different synonym, I wonder? Maybe: lustre_printk, lustre_logmsg, lustre_output From paf at cray.com Sat May 23 03:13:42 2015 From: paf at cray.com (Patrick Farrell) Date: Sat, 23 May 2015 03:13:42 +0000 Subject: [lustre-devel] [HPDD-discuss] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes In-Reply-To: <1432341390.29657.29.camel@perches.com> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <1432237849-53947-11-git-send-email-shuey@purdue.edu> <1432242004.20840.68.camel@perches.com> <15C0AFDB-CA69-40E5-B65E-C559A5B5CE47@intel.com> <1432309337.29657.16.camel@perches.com> <05DE4AF3-20A6-40F6-BAC6-79C140E490AF@intel.com> <1432339030.29657.20.camel@perches.com> <863F0D66-99B1-4658-8A99-E3A843E0E8FC@intel.com> <1432340285.29657.26.camel@perches.com> <467D21EA-E5E8-4F16-AABD-31D79062FFF9@intel.com>, <1432341390.29657.29.camel@perches.com> Message-ID: Since it is not actually doing a printk - at least, not necessarily - I like lustre_logmsg. lustre_output seems too vague. - Patrick ________________________________________ From: HPDD-discuss [hpdd-discuss-bounces at lists.01.org] on behalf of Joe Perches [joe at perches.com] Sent: Friday, May 22, 2015 7:36 PM To: Drokin, Oleg Cc: ; ; ; ; Julia Lawall; ; Subject: Re: [HPDD-discuss] [PATCH v4 10/13] staging: lustre: lnet: lnet: checkpatch.pl fixes On Sat, 2015-05-23 at 00:25 +0000, Drokin, Oleg wrote: > On May 22, 2015, at 8:18 PM, Joe Perches wrote: > >>>> I wonder what is more clear about that in your opinion ve > >>>> lustre_error/lustre_debug? > >>> > >>> The fact that you have to explain this shows that it's > >>> at least misleading unless you completely understand the > >>> code. > >> > >> Or you know, you might take the function name at the face value > >> and assume that CERROR means it's an error and CDEBUG means it's a debug message? > > > > Maybe, but I think that it'd be better if the mechanism > > it uses was more plainly named something like lustre_log. > > While the idea seems good, the biggest obstacle here is such that > there's already a thing called lustre log (llog for short too) - > it's kind of a distributed journal of operations. > > Its there a different synonym, I wonder? Maybe: lustre_printk, lustre_logmsg, lustre_output _______________________________________________ HPDD-discuss mailing list HPDD-discuss at lists.01.org https://lists.01.org/mailman/listinfo/hpdd-discuss From dan.carpenter at oracle.com Sat May 23 10:14:28 2015 From: dan.carpenter at oracle.com (Dan Carpenter) Date: Sat, 23 May 2015 13:14:28 +0300 Subject: [lustre-devel] [PATCH v4 00/13] staging: lustre: lnet: code cleanups In-Reply-To: References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <20150522092142.GJ4150@mwanda> Message-ID: <20150523101428.GX22558@mwanda> We would have applied the v3 patchset but now I don't know because we're up to v5. We can't apply v5 because there are problems with it. No one responded to v3 so Greg still might apply it or he might find these email threads too scrambled and delete everything and ask for a resend. It's pretty messed up so just wait for Greg to get to it before sending more patches? Basically you should only send patches which you assume will be applied. If no one responds after 3 days then probably that means everyone from the peanut gallery (Me, Sudip, Joe, the lustre devs), we don't have an issue. Then Greg does the last review (2-3 weeks later perhaps). But if it makes it past all the other reviews then generally Greg also will be ok with it. Greg applies patches in first come, first applied order. If they don't apply then you have to redo it. He doesn't invest a lot of time into figuring out why. So you have to coordinate with the other devs, it's up to you how you do that. regards, dan carpenter From shuey at purdue.edu Sat May 23 12:09:54 2015 From: shuey at purdue.edu (Michael Shuey) Date: Sat, 23 May 2015 08:09:54 -0400 Subject: [lustre-devel] [PATCH v4 00/13] staging: lustre: lnet: code cleanups In-Reply-To: <20150523101428.GX22558@mwanda> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <20150522092142.GJ4150@mwanda> <20150523101428.GX22558@mwanda> Message-ID: Hm, that's unfortunate - but my own fault for lack of proper etiquette. I'll give this a week or two to settle, and build up patches against other parts of lustre in the meantime. BTW, you keep mentioning a v5 that I sent. Where is that, exactly? The last round of patches I sent I've kept labeled as "PATCH v4", and I only hit git send-email once. Could you forward me something from this v5 series, so I could see if anything is amiss on my end? -- Mike Shuey On Sat, May 23, 2015 at 6:14 AM, Dan Carpenter wrote: > We would have applied the v3 patchset but now I don't know because we're > up to v5. We can't apply v5 because there are problems with it. No > one responded to v3 so Greg still might apply it or he might find these > email threads too scrambled and delete everything and ask for a resend. > > It's pretty messed up so just wait for Greg to get to it before sending > more patches? > > Basically you should only send patches which you assume will be applied. > If no one responds after 3 days then probably that means everyone from > the peanut gallery (Me, Sudip, Joe, the lustre devs), we don't have an > issue. Then Greg does the last review (2-3 weeks later perhaps). But > if it makes it past all the other reviews then generally Greg also will > be ok with it. > > Greg applies patches in first come, first applied order. If they don't > apply then you have to redo it. He doesn't invest a lot of time into > figuring out why. So you have to coordinate with the other devs, it's > up to you how you do that. > > regards, > dan carpenter > From shuey at purdue.edu Sat May 23 14:05:27 2015 From: shuey at purdue.edu (Michael Shuey) Date: Sat, 23 May 2015 10:05:27 -0400 Subject: [lustre-devel] [PATCH v4 00/13] staging: lustre: lnet: code cleanups In-Reply-To: <20150523123904.GA12407@sudip-PC> References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <20150522092142.GJ4150@mwanda> <20150523101428.GX22558@mwanda> <20150523123904.GA12407@sudip-PC> Message-ID: Ah - that explains it. I added additional files to the series, but simply re-applied the original round of patches. They would've not been tagged as v4, while the patches pertaining to the newly-modified files had v4 in the subject. I'll be more thorough in future patch revisions. Thanks for the explanation. -- Mike Shuey On Sat, May 23, 2015 at 8:39 AM, Sudip Mukherjee wrote: > On Sat, May 23, 2015 at 08:09:54AM -0400, Michael Shuey wrote: >> BTW, you keep mentioning a v5 that I sent. Where is that, exactly? >> The last round of patches I sent I've kept labeled as "PATCH v4", and >> I only hit git send-email once. Could you forward me something from >> this v5 series, so I could see if anything is amiss on my end? > > I think it was not a v5. But what happened is in your series some > of the patches were marked as v4 and some were not having any version > so it appeared like a fresh series again. Like 1/13,2/13,3/13 has v4 > but the others donot have a version. > > regards > sudip From dan.carpenter at oracle.com Mon May 25 09:37:38 2015 From: dan.carpenter at oracle.com (Dan Carpenter) Date: Mon, 25 May 2015 12:37:38 +0300 Subject: [lustre-devel] [PATCH 5/6] staging:lustre: style cleanups for lib-socket.c In-Reply-To: <1432319552-10479-6-git-send-email-jsimmons@infradead.org> References: <1432319552-10479-6-git-send-email-jsimmons@infradead.org> Message-ID: <20150525093737.GS4150@mwanda> On Fri, May 22, 2015 at 02:32:31PM -0400, James Simmons wrote: > @@ -167,13 +164,14 @@ lnet_ipif_enumerate (char ***namesp) > if (nalloc * sizeof(*ifr) > PAGE_CACHE_SIZE) { > toobig = 1; > nalloc = PAGE_CACHE_SIZE/sizeof(*ifr); > - CWARN("Too many interfaces: only enumerating first %d\n", > - nalloc); > + CWARN("Too many interfaces: only enumerating " > + "first %d\n", nalloc); > } Don't split string literals, it makes them hard to grep for. regards, dan carpenter From rmohr at utk.edu Tue May 26 15:08:44 2015 From: rmohr at utk.edu (Mohr Jr, Richard Frank (Rick Mohr)) Date: Tue, 26 May 2015 15:08:44 +0000 Subject: [lustre-devel] lustre design docs In-Reply-To: <69BD0579-A188-4012-8926-3F55CF5E1BF9@seagate.com> References: <69BD0579-A188-4012-8926-3F55CF5E1BF9@seagate.com> Message-ID: <0B18B94D-6B1C-44F8-B98A-0BB0DD095FEA@utk.edu> > On May 20, 2015, at 2:06 PM, Vitaly Fertman wrote: > > there was an idea to publish existing design docs on opensfs wiki. > is centralised design repository interesting at all? I think that is a good idea. Consolidating the design docs in a single location (or at least links that point to them) would certainly make it easier to track them down. -- Rick Mohr Senior HPC System Administrator National Institute for Computational Sciences http://www.nics.tennessee.edu From dan.carpenter at oracle.com Wed May 27 15:24:31 2015 From: dan.carpenter at oracle.com (Dan Carpenter) Date: Wed, 27 May 2015 18:24:31 +0300 Subject: [lustre-devel] [PATCH 5/6] staging:lustre: style cleanups for lib-socket.c In-Reply-To: References: <1432319552-10479-6-git-send-email-jsimmons@infradead.org> <20150525093737.GS4150@mwanda> Message-ID: <20150527152431.GS11588@mwanda> On Wed, May 27, 2015 at 03:01:37PM +0000, Simmons, James A. wrote: > >>On Fri, May 22, 2015 at 02:32:31PM -0400, James Simmons wrote: > >> @@ -167,13 +164,14 @@ lnet_ipif_enumerate (char ***namesp) > >> if (nalloc * sizeof(*ifr) > PAGE_CACHE_SIZE) { > >> toobig = 1; > >> nalloc = PAGE_CACHE_SIZE/sizeof(*ifr); > >> - CWARN("Too many interfaces: only enumerating first %d\n", > >> - nalloc); > >> + CWARN("Too many interfaces: only enumerating " > >> + "first %d\n", nalloc); > >> } > > > >Don't split string literals, it makes them hard to grep for. > > Will fix. The CWARN will go over 80 characters but from the recent emails that is more acceptable. > If this is the only problem then this patch set it ready. Normally the right thing to do here would be to send a fixed [patch 5/6 v2] using the --in-reply-to option so that it appears as a reply to the original [patch 5/6]. > I have more patch series that are dependent > on this first one. Should I push the other patch series with a note that it is dependent on the tcpip > cleanup or wait until it is merged? Also how does one find out when the patch has been merged? You will get an email when these are merged. This is the only issue, I had. No one else has complained so that means no one else has any objections. Greg hasn't merged it yet and he might find a problem with it, but it seems like a straight forward patchset so that's unlikely. The only issue is that this patchset was sent in a confusing way. It doesn't have a v2 tag and it was tacked on to the old thread. Greg tends to not waste time being confused and just deletes the whole thread when that happens. The notes that "This depends on XXX being applied." are kind of nice but no one spends a lot of time worrying about that stuff. Greg just applies the patches in the order that they hit his inbox and they either apply or he tells people to update and resend. So send your follow on patches. If everything applies then good. If not then you can resend, which is a few commands in git and not a big deal. regards, dan carpenter From sudipm.mukherjee at gmail.com Sat May 23 12:39:04 2015 From: sudipm.mukherjee at gmail.com (Sudip Mukherjee) Date: Sat, 23 May 2015 18:09:04 +0530 Subject: [lustre-devel] [PATCH v4 00/13] staging: lustre: lnet: code cleanups In-Reply-To: References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <20150522092142.GJ4150@mwanda> <20150523101428.GX22558@mwanda> Message-ID: <20150523123904.GA12407@sudip-PC> On Sat, May 23, 2015 at 08:09:54AM -0400, Michael Shuey wrote: > BTW, you keep mentioning a v5 that I sent. Where is that, exactly? > The last round of patches I sent I've kept labeled as "PATCH v4", and > I only hit git send-email once. Could you forward me something from > this v5 series, so I could see if anything is amiss on my end? I think it was not a v5. But what happened is in your series some of the patches were marked as v4 and some were not having any version so it appeared like a fresh series again. Like 1/13,2/13,3/13 has v4 but the others donot have a version. regards sudip From simmonsja at ornl.gov Wed May 27 15:01:37 2015 From: simmonsja at ornl.gov (Simmons, James A.) Date: Wed, 27 May 2015 15:01:37 +0000 Subject: [lustre-devel] [PATCH 5/6] staging:lustre: style cleanups for lib-socket.c In-Reply-To: <20150525093737.GS4150@mwanda> References: <1432319552-10479-6-git-send-email-jsimmons@infradead.org> <20150525093737.GS4150@mwanda> Message-ID: >>On Fri, May 22, 2015 at 02:32:31PM -0400, James Simmons wrote: >> @@ -167,13 +164,14 @@ lnet_ipif_enumerate (char ***namesp) >> if (nalloc * sizeof(*ifr) > PAGE_CACHE_SIZE) { >> toobig = 1; >> nalloc = PAGE_CACHE_SIZE/sizeof(*ifr); >> - CWARN("Too many interfaces: only enumerating first %d\n", >> - nalloc); >> + CWARN("Too many interfaces: only enumerating " >> + "first %d\n", nalloc); >> } > >Don't split string literals, it makes them hard to grep for. Will fix. The CWARN will go over 80 characters but from the recent emails that is more acceptable. If this is the only problem then this patch set it ready. I have more patch series that are dependent on this first one. Should I push the other patch series with a note that it is dependent on the tcpip cleanup or wait until it is merged? Also how does one find out when the patch has been merged? From paf at cray.com Wed May 27 20:03:52 2015 From: paf at cray.com (Patrick Farrell) Date: Wed, 27 May 2015 20:03:52 +0000 Subject: [lustre-devel] Possible minor bug Message-ID: While doing some other work, I noticed something I believe is a potential problem in the server side quota code. Specifically, in qmt_glimpse_lock: While the resource lock (a spin lock) is held, it does OBD_ALLOC_PTR(work); Since allocations can sleep, doesn't this allocation need to be atomic? So, following the current Lustre convention, it should be: LIBCFS_ALLOC_ATOMIC(work, sizeof(struct ldlm_glimpse_work)); I have seen no actual bugs from this, but I hit a hang while modifying the equivalent code in ofd_intent_policy for lock ahead, and I think the same hang is theoretically possible here. My understanding is that, in general, doing allocations while holding a spin lock is not recommended. I'm hoping for other input before I go further - Am I right that this is something which needs fixing? If so, I'll open an LU and submit a patch. Thanks, - Patrick -------------- next part -------------- An HTML attachment was scrubbed... URL: From andreas.dilger at intel.com Wed May 27 20:55:27 2015 From: andreas.dilger at intel.com (Dilger, Andreas) Date: Wed, 27 May 2015 20:55:27 +0000 Subject: [lustre-devel] Possible minor bug Message-ID: On 2015/05/27, 2:03 PM, "Patrick Farrell" > wrote: While doing some other work, I noticed something I believe is a potential problem in the server side quota code. Specifically, in qmt_glimpse_lock: While the resource lock (a spin lock) is held, it does OBD_ALLOC_PTR(work); Since allocations can sleep, doesn't this allocation need to be atomic? So, following the current Lustre convention, it should be: LIBCFS_ALLOC_ATOMIC(work, sizeof(struct ldlm_glimpse_work)); You could also use OBD_ALLOC_GFP(work, sizeof(*work), GFP_ATOMIC), which is equivalent, but at least keeps the same paradigm of other allocations in this code. I have seen no actual bugs from this, but I hit a hang while modifying the equivalent code in ofd_intent_policy for lock ahead, and I think the same hang is theoretically possible here. My understanding is that, in general, doing allocations while holding a spin lock is not recommended. Not only not recommended, but not allowed for GFP_NOFS allocations. Probably if you had CONFIG_DEBUG_SPINLOCK or similar enabled, you would get a warning here due to __might_sleep() in the allocation path. I'm hoping for other input before I go further - Am I right that this is something which needs fixing? If so, I'll open an LU and submit a patch. Yes, please do. Cheers, Andreas From simmonsja at ornl.gov Wed May 27 21:04:01 2015 From: simmonsja at ornl.gov (Simmons, James A.) Date: Wed, 27 May 2015 21:04:01 +0000 Subject: [lustre-devel] [PATCH 5/6] staging:lustre: style cleanups for lib-socket.c In-Reply-To: <20150527152431.GS11588@mwanda> References: <1432319552-10479-6-git-send-email-jsimmons@infradead.org> <20150525093737.GS4150@mwanda> <20150527152431.GS11588@mwanda> Message-ID: <2b6ea004c72c457aae6affe1a5d7e001@EXCHCS32.ornl.gov> >> > >> >Don't split string literals, it makes them hard to grep for. >> >> Will fix. The CWARN will go over 80 characters but from the recent emails that is more acceptable. >> If this is the only problem then this patch set it ready. > >Normally the right thing to do here would be to send a fixed >[patch 5/6 v2] using the --in-reply-to option so that it appears as a >reply to the original [patch 5/6]. Made a note of that for future reference. >> I have more patch series that are dependent >> on this first one. Should I push the other patch series with a note that it is dependent on the tcpip >> cleanup or wait until it is merged? Also how does one find out when the patch has been merged? > >You will get an email when these are merged. > >This is the only issue, I had. No one else has complained so that means >no one else has any objections. Greg hasn't merged it yet and he might >find a problem with it, but it seems like a straight forward patchset >so that's unlikely. Ugh. I was off by one for the number of patches so I need to send a new batch. >The only issue is that this patchset was sent in a confusing way. It >doesn't have a v2 tag and it was tacked on to the old thread. Greg >tends to not waste time being confused and just deletes the whole thread >when that happens. Forgot to change the patch tag number. I will send a new batch with v2 so it is a new thread. From paf at cray.com Wed May 27 21:15:36 2015 From: paf at cray.com (Patrick Farrell) Date: Wed, 27 May 2015 21:15:36 +0000 Subject: [lustre-devel] Possible minor bug In-Reply-To: References: Message-ID: Ok, thanks. Here's the LU: https://jira.hpdd.intel.com/browse/LU-6656 ________________________________________ From: Dilger, Andreas [andreas.dilger at intel.com] Sent: Wednesday, May 27, 2015 3:55 PM To: Patrick Farrell Cc: lustre-devel at lists.lustre.org Subject: Re: [lustre-devel] Possible minor bug On 2015/05/27, 2:03 PM, "Patrick Farrell" > wrote: While doing some other work, I noticed something I believe is a potential problem in the server side quota code. Specifically, in qmt_glimpse_lock: While the resource lock (a spin lock) is held, it does OBD_ALLOC_PTR(work); Since allocations can sleep, doesn't this allocation need to be atomic? So, following the current Lustre convention, it should be: LIBCFS_ALLOC_ATOMIC(work, sizeof(struct ldlm_glimpse_work)); You could also use OBD_ALLOC_GFP(work, sizeof(*work), GFP_ATOMIC), which is equivalent, but at least keeps the same paradigm of other allocations in this code. I have seen no actual bugs from this, but I hit a hang while modifying the equivalent code in ofd_intent_policy for lock ahead, and I think the same hang is theoretically possible here. My understanding is that, in general, doing allocations while holding a spin lock is not recommended. Not only not recommended, but not allowed for GFP_NOFS allocations. Probably if you had CONFIG_DEBUG_SPINLOCK or similar enabled, you would get a warning here due to __might_sleep() in the allocation path. I'm hoping for other input before I go further - Am I right that this is something which needs fixing? If so, I'll open an LU and submit a patch. Yes, please do. Cheers, Andreas From gregkh at linuxfoundation.org Sun May 31 02:24:56 2015 From: gregkh at linuxfoundation.org (Greg KH) Date: Sun, 31 May 2015 11:24:56 +0900 Subject: [lustre-devel] [PATCH v4 00/13] staging: lustre: lnet: code cleanups In-Reply-To: References: <1432237849-53947-1-git-send-email-shuey@purdue.edu> <20150522092142.GJ4150@mwanda> <20150523101428.GX22558@mwanda> <20150523123904.GA12407@sudip-PC> Message-ID: <20150531022456.GA30873@kroah.com> A: No. Q: Should I include quotations after my reply? http://daringfireball.net/2007/07/on_top On Sat, May 23, 2015 at 10:05:27AM -0400, Michael Shuey wrote: > Ah - that explains it. I added additional files to the series, but > simply re-applied the original round of patches. They would've not > been tagged as v4, while the patches pertaining to the newly-modified > files had v4 in the subject. The way you sent these is a mess, I can't sort by subject and apply them properly. Either put the v4 at the front, for all patches, like this: [PATCH v4 01/13] or at the end of the number: [PATCH 01/13 v4] so I can sort them. Please fix up and resend this series, I've dropped it from my queue. thanks, greg k-h From gregkh at linuxfoundation.org Sun May 31 02:26:31 2015 From: gregkh at linuxfoundation.org (Greg KH) Date: Sun, 31 May 2015 11:26:31 +0900 Subject: [lustre-devel] [PATCH] staging: lustre: osc: clean up whitespace and align function parameters In-Reply-To: <1432320647-14543-1-git-send-email-hannac@iu.edu> References: <1432320647-14543-1-git-send-email-hannac@iu.edu> Message-ID: <20150531022631.GA30988@kroah.com> On Fri, May 22, 2015 at 02:50:47PM -0400, Chris Hanna wrote: > Minor changes to remove excessive whitespace and improve > readability of functions. > > Signed-off-by: Chris Hanna > --- > drivers/staging/lustre/lustre/osc/lproc_osc.c | 56 +++--- > drivers/staging/lustre/lustre/osc/osc_cache.c | 112 ++++++------ > drivers/staging/lustre/lustre/osc/osc_io.c | 116 +++++++------- > drivers/staging/lustre/lustre/osc/osc_lock.c | 134 ++++++++-------- > drivers/staging/lustre/lustre/osc/osc_object.c | 18 +- > drivers/staging/lustre/lustre/osc/osc_page.c | 44 +++--- > drivers/staging/lustre/lustre/osc/osc_quota.c | 14 +- > drivers/staging/lustre/lustre/osc/osc_request.c | 205 +++++++++++------------ > 8 files changed, 349 insertions(+), 350 deletions(-) Doesn't apply to my tree :(