Bureaucracy haters, go away. I love forums. I love lines. I love wait times. I only listen to hold music. Don't come in person, the forum is online. The forum online is gonna tell you to call. Ooh, sorry, we're not here right now. Our hours are 2 a.m. on Mondays and Tuesdays. You are caller, 8 billion in line. Yes! I'm a big credit score guy.  Bureaucracy shows us mere men the way. There's a thin line between humanity and savagery. And that line is mountains of paperwork. Do you know how many crimes people would commit if they didn't have to fill out all that paperwork afterwards? Sorry, wrong department.  Thank you. What if you weren't meant to cancel that subscription? 60% of the US GDP is based on subscriptions that are really hard to cancel.  You wanna solve a starve? No, no. Then stay on hold. Listen to the music. Absolutely the love of God. Complete the brief feedback survey after the call.


You're watching FJTN, the Federal Judicial Television Network. The Federal Judicial Center presents Supreme Court 1998-99, The Term and Review, an FJTN program for judges, staff attorneys, and law clerks. Now from the television studios of the Federal Judicial Center in Washington, D.C., your moderator, Russell Wheeler. Hello, and welcome to the Federal Judicial Center's annual review of the just completed term of the United States Supreme Court. The Court adjourned on June 23, the earliest adjournment date in several decades, and continued its recent trend of deciding a relatively few number of cases, seventy-five this term. We'll review forty-five of the seventy-five cases, plus one Purcurium decision, with help from our board, our Judicial Education Committees, Senator Director Ria Zobel, and of course our faculty. We've selected cases we think will show up in the pleadings, briefs, and motions submitted to you. We've also prepared somewhat longer analyses of two developments, the block of cases arising under the 1990 Americans with Disabilities Act, and what is now the trilogy of decisions on the federal trial judges' gatekeeping role with respect to expert testimony. Our review is in three parts, each about forty minutes long. Your written materials have summaries of the cases we'll discuss, in the order we'll discuss them, and brief bios of the law professors who will be describing and commenting on the cases. They are well qualified not only to summarize the Court's work, but also to provide different perspectives on this term's holdings. With that, let's turn to four cases involving the First and Fourteenth Amendment. Joining us to discuss them are Tracy Macklin of Boston University School of Law, Susanna Sherry of the University of Minnesota Law School, and Jordan Steiker of the University of Texas School of Law. Susanna, this was not a big term for First Amendment cases, we had an important commercial speech case involving broadcasters in New Orleans who were filed suit against the federal enforcement of a ban on advertising casino gambling, and the Court agreed with them. Yes, it did. This was a good news, bad news, sort of a case for First Amendment law. The good news is they didn't change any prior doctrine. The bad news is they didn't clarify any prior doctrine either, so the commercial speech areas in some disarray. In this case, federal law prohibited the advertising of casinos, even in states where the casinos themselves were legal, but the ban was riddled with exceptions. There were exceptions for tribal casinos and state-run casinos and lotteries and charitable casinos and on and on. And given all those exceptions, the Court decided that it didn't even meet the minimal central Hudson test, that is, it did not materially advance a substantial government purpose. Susanna, what about Posadas? The Court there had said that the greater power to abolish casino gambling altogether included the lesser power to regulate this kind of commercial speech. Does that survive this? It probably not. There was some doubt about whether Posadas was good law even before this case, and I think this case makes it clear that it's not because Justice Stevens wrote, and this was for a majority of eight Justices, he wrote that the power to prohibit or regulate particular conduct does not necessarily include the power to prohibit or regulate speech about that conduct, which rejects, I think, the Posadas principle that you mentioned. So Posadas is gone. I think it probably is. Jordan, there was another case that had a First Amendment implication, but it grew out of the application of the new immigration statute with the jurisdictional question. Did you describe that for us first? Yeah, the jurisdictional question in this case was really whether or not you could challenge prior to a final order actions that were going on in deportation proceedings. And the Court basically said that there are very limited number of collateral challenges to deportation proceedings, things like the decision to conduct surveillance or to open investigation. But generally speaking, you have to wait to a final order. But the Arab American Committee also objected on First Amendment grounds to this action by the INS. A very interesting part of this case was that the respondents in this case, who had won below, had argued that they were targeted for deportation because of their political views. And they argued that selective enforcement violated the First Amendment. And they suggested that the statute should be read not to limit this kind of challenge because it would leave them without an effective constitutional remedy. The Court swept this aside and basically said that aliens who were unlawfully in this country generally have no right to allege selective enforcement as a defense. So there's little leeway available to aliens as far as you can see. I think that's right. Thanks, Jordan. Susanna, you'll recall this case of Sains v. Rowe, obviously, which caused a big stir in the legal community anyway because the privileges and immunities cause, privileges or immunities cause of the 14th Amendment, as one justice said, was unearthed from its tomb, came back from the slaughterhouse. This was a case that involved a California restriction on benefits that new residents could receive, and it's one in a long line of cases. Could you tell us what the Court decided? Well, the Court did strike down California's limit on welfare by 7-2 vote. California had limited new residents to the welfare that they would have received in their old state for the first year that they were in California. And the Court said that that was unconstitutional under the privileges or immunities clause. They were very careful, however, to distinguish some of the earlier cases in the line, cases imposing residency requirements for such things as divorces and in-state tuition. What the Court said is those are portable benefits, benefits that the newcomer could take and run with as Chief Justice Rankwist put it. But the Chief Justice said he thought trial judges are going to have a tough time applying this portability, unportability test to benefits that states provide. I think that he is correct, that it's going to be very difficult. The Court didn't give much guidance in distinguishing between in-state tuition and welfare, for example, and I think that other than the things that they explicitly distinguished, there are going to be a lot of challenges to various residency requirements now. Well, we'll be watching that. Susanna, do you really think this case should be reviewed as a significant revival of the 14th Amendment's privileges or immunities clause? I think it has to be significant. It's the first time that the Court cited the privileges or immunities clause since the Slaughterhouse case in 1873, and so I think they're giving the green light to lower courts to use the clause. Although, again, they did not exactly tell us what was in the clause. Well, we'll watch what happens. The other 14th Amendment case, Tracy, is a reapportionment, a redistricting case which, in a sense, tells us will be more of these after the census. This case, though, involved, of course, it involved the 12th District of North Carolina, which is no newcomer to the Court, but more particularly what the Three-Judge District Court did in terms of the summary judgment motion they granted. Right. Well, the Supreme Court made it clear that summary judgment is not the typical way to go on redistricting cases, and also that the configuration of the district itself should not be the sole criteria that the district does look at. Instead, the district courts should look at the totality of the circumstances. As you mentioned, this involved the 12th District down in North Carolina, and the plaintiffs that claimed that the 12th had been an impermissible racial gerrymander. Now, Justice Thomas, writing for the Court, found that the legislative motivation is a factual question for the district Court to decide, and in this case that involved whether it was a political question or whether they were operating for political reasons or for racial reasons. Now, Justice Thomas conceded that the evidence tended to show that this was drawn in a racial manner, that they had race on the mind. On the other hand, he pointed out that some of the state's evidence also suggests that race was not involved. So, Justice Thomas made clear that the district Court should not look to a summary judgment motion here, and instead hear all the evidence in front of it before deciding. OK, thanks very much, Tracy. Thanks to you, Suzanne, and thank you, Jordan. In a moment we'll return and take up some civil rights cases. The Court decided some important cases under sections 1983 and 1985 of Title 42, under Title 7 and 9 of the 1964 Civil Rights Act as amended, and under the Individuals with Disabilities Education Act. With us to discuss eight of them are Evan Sen Lee of the University of California, Hastings College of the Law, Catherine Urbana of the College of William and Mary, Marshall With School of Law, and John Yu of the University of California at Berkeley, Bolt Hall School of Law. Kathy, let's start with Wilson V. Lane, which has two components. There's a Fourth Amendment violation because of a media ride-along. We'll get to that in the next part of the program. But there was also, the Court also had to decide whether the officers who committed this Fourth Amendment violation nevertheless had qualified immunity from suit. Could you describe why the Court said they did? Yes, the Court decided, 8-1, that the officers had qualified immunity in this case. That issue in the case was the police officers bringing the media along with them to execute an arrest warrant. And the question for the qualified immunity defense, which is an affirmative defense, was the law clearly established at the time the officers acted? And could a reasonable police officer have believed that his actions were lawful in bringing the media along with him? And what the Supreme Court said in looking at this case is that in deciding the qualified immunity issue, that it was not open and shut, it also noticed, a second factor that it notices, that in looking at the particular jurisdiction, because there are actually two media cases in the Supreme Court's docket, is that there was no controlling decision within that jurisdiction. And a third factor that it noted is that the U.S. Marshals in this case actually had a policy of allowing the media to ride along. A factor, by the way, that the Court says was only relevant because the law was so unclear at this time. And something that would suggest that Stevens to consider an exception in his dissent. Oh, very vehemently so. Let's talk about another case involving qualified immunity. And an assistant district attorney in Los Angeles, Khan, had Gabbard, an attorney, searched while Gabbard's client was being investigated, interrogated by the grand jury. The Court didn't take too long to decide this case. No, it didn't, because the claim involved a substantive due process claim under the 14th Amendment. Well, as you said, what happened in this case is the criminal defense attorney sued the prosecutor. Why? Because the prosecutor had the attorney searched at the exact time that the attorney's client, who was going to testify before the grand jury. And so with the attorney claimed and suing the prosecutor, it was, well, this violated my right, my liberty right under the substantive due process clause of the 14th Amendment. The Supreme Court said no violation. It did, however, leave open the issue of whether the timing of the search violated the 4th Amendment. Left open did not decide. That's correct. Thanks, Kathy. John, another case we'll take up from California also, more complicated. I think City of Monterey versus Del Monte Dunes. This involved whether there was a taking for 5th Amendment purposes and also the role of the jury in deciding the 1983 aspect of it. You take us through this case briefly and tell us what the court decided. Sure. Here you can see why so many takings cases are coming out of the state of California. Here the landowner wanted to build a condominium, went to the local zoning board several times with different plans each time they were rejected, asked for more conditions. So eventually the landowner sued. And in this case, they sued under Section 1983 for what we call inverse condemnation claim, seeking a declaration of taking and compensatory damages. The court here held five to four justice candy writing that a jury gets to make the determination whether a taking has occurred because under Section 1983 there's a tort-like claim being made here. Well, John, you say that a jury is the one to decide whether a taking has occurred. Does that also mean that it's the jury that decides whether the government's proffered justification for the regulation is valid because that seems like an odd thing for a jury to decide? That's exactly what the court did here, and it is very unusual. The court here said that the jury gets to make the determination not just whether a taking occurred but whether the government has a substantial interest in behind its land use regulation, which is very unusual because you'll notice, say for example, in First Amendment law, any time a government interest comes up it's the court that gets to make that finding as a matter of law. Here the court says this is a mixed question of fact and law that gets made by a jury. Just going to affect the dynamics, you think, of litigation against planning boards by developers? Yes, this is another one in a string of pro-property rights decisions by the court, and this definitely shifts more of the balance towards landowners, and so I would think more landowners will bring more suits because having a jury trial gives them more chances of winning. OK, thanks very much, John. Kathy Haddle v. Garrison. This was a case not under 1983 of Title 42, but 1985, another codified version of a reconstruction or a statute. This did protect the judicial process. What do the kind of injury do the plaintiff have to show in a 1985 case, says the court in this case? In this case, it was a very short opinion. The Supreme Court said the plaintiff and alleging a Section 1988-85 claim, which is a claim saying is that a conspiracy deprived me from my opportunity to testify before trial is that you don't have to show a deprivation of a constitutional property interest. What the plaintiff had lost in this particular case was an at-will job, which we would not say is a property interest, but the loss was as a result of attending grand jury proceedings and being willing to testify at trial. Now, the court did leave open two issues. It did not decide whether intimidation under the statute means the force or the threat of force, and it also did not decide the second issue whether only litigants can bring these claims rather than just witnesses. Presumably you may see that in future litigation. Thanks very much. Evan, I want to turn to Title VII cases. The major case is a suit by Carol Colstad, who was an attorney with the American Dental Association who alleged discrimination in a promotion. What did the court say she had to show? She saw punitive damages under Title VII. What did she have to show to get them? Well, basically here, the court took the opportunity to set forth a pretty comprehensive set of rules governing when punitive damages are available under Title VII. You recall that the statute makes punitive damages available in situations of malice or reckless indifference. And what the court said in this case was that means that's a subjective test. The question is whether there was a conscious awareness or a conscious appreciation of the risk that Title VII rights were being violated. The court in so holding actually set aside or rejected the DC Circuit's attempt to superimpose a stricter test, which would have been egregious misconduct. Evan, practically speaking, how is this going to affect the availability of punitive damages? I actually think that this is going to be restrictive, but I have to explain that answer. The court did reject the egregious misconduct test. But in doing so, it innovated an equally or perhaps even more strong limitation on punitive damages. As we know in these cases, it's important to hold the employer in, because that's the deep pocket. Now, there are a number of different ways that you might do that, but the most far-reaching theory would be agency, the idea that because the employee was acting in the course and scope of employment, that that binds the employer to the misdeed, if you will. Well, Justice O'Connor made it clear in this opinion that punitive damages aren't to be awarded on an agency theory as long as the defendant can show that it made good faith efforts to comply with Title VII. So even though agency theory is pretty far-reaching, nonetheless, the court has created an affirmative defense here for situations where the employer can show good faith efforts to comply with Title VII. And somewhat of a barrier, I presume, for plaintiffs. Oh, yes. I would think so. Another Title VII case involving not here punitive damages, but compensatory damages, involved a suit by Gibson against the West, the Secretary of Veterans Affairs. Very briefly, how did the court resolve this circuit split? Well, it's cut and dried, even though it was 5 to 4. The court determined that the EEOC does have the power to award compensatory damages against federal agencies. The court said sovereign immunity wasn't a problem. Even though the dissent claimed it was. Katherine and John, I want to take up two cases that came from school districts. One involving these individuals with Disabilities and Education Act, then we'll get to the Title IX case. John, you first. This is a case involving, as I said, a 1970s statute. We'll get to the ADA cases later in this program. This is the case of Cedar Rapids versus Garrett. Basically, what was that about? Well, this is a federal statute that gives federal financial assistance to school districts. On the condition that they provide what are called in the statute, related services to disabled students so that they can attend school. On the other hand, the statute creates an exception. It says that school districts don't need to provide what are called medical services. Here, the plaintiff was a student who was bound to a wheelchair bound and needed a ventilator and hence needed full-time nursing care in order to be able to go to school. The school district challenges whether this is a medical service or a related service. And the court holds that this is a related service because it's not being provided by a doctor. John, what do medical services now include in light of this decision? The decision's pretty clear, it seems to me, that after this case, anything that doesn't have to be provided by a medical doctor is now going to be considered a related service. And in fact, that creates this interesting dynamic that's going to force states and school districts over time to pick up more of a check for these kind of services. Because as medical technology improves, more and more medical, what we used to think of as medical services, can be able to be provided by nurses or nurses' assistants. Now, there may be a link, John, between this case and the case I'm going to ask Catherine about. So don't go away. This is the Title IX case this term. Last term in the Gebser case, the court told us what plaintiffs in the Title IX had to prove when they are alleging teacher on student sexual harassment. Here we have student on student sexual harassment, Davis versus Manny, Monroe County Board of Education. The court here said that in some circumstances, school boards could be liable under Title IX. And the court basically outlined four factors, although it didn't clearly specify these four. And it said, in looking at them, a plaintiff has to allege that the sexual harassment was severe, pervasive, and objectively unreasonable. That's factor number one. Two, this harassment has to be of such a nature that deprives the person of educational opportunities. Three, the entity, the school board, has to have actual notice of the sexual harassment. And then fourth, after it has actual notice, it has to be deliberately indifferent to the sexual harassment. What was interesting about this case is what the court decided is that the plaintiff's allegations were sufficient to withstand the motion to dismiss. So what are the facts of the case? Well, in this case, a fifth grader had told her teacher and her mother that one of her classmates had tried to touch her breasts, her genitals, and said that he wanted to get in bed with her.  Also, the harassment in this case lasted for many months, and other girls were also sexually harassed. When the mother spoke to the principal, the teacher said, well, why is only your daughter complaining, and the principal promised to get a little tougher on the harasser in the situation. Well, eventually the alleged harasser pleads guilty to sexual battery. And in addition, the court notices that the entity, the school, had no policy on peer harassment. So in light of all of these facts, the court said this was sufficient to withstand the motion to dismiss. But then court added a very important gloss. It said, we must consider the constellation of surrounding circumstances when we decide whether there really was actual sexual harassment. Well, now, constellation, does that mean that this is a totality of the circumstances test? And if so, does that mean all these cases have to go to trial? Well, it certainly does sound like a totality of circumstances test, because the court also made it very clear in light of the four factors, is that we have to give school boards flexibility in how they respond. And the conduct has to be clearly unreasonable. Now, the court did say, though, that motions to dismiss and motions for summary judgment will pass because of its very heightened standard that it's been created. In this case, there was a dissent by Justice Kennedy, which was longer than the majority of the audience. And in that dissent, he tried to draw some parallels with the case I discussed about the IDEA statute. What did you think of that? Well, I thought the parallel was very well drawn. It shows the conflicts that schools may face in these two statutes. For example, under the Title IX standard, the school has to have actual notice of the harassment and then be deliberately indifferent to it. Well, if the school has actual notice of the harasser, and it has to be a pretty significant harassment, the school then may actually have notice that the harasser, not the victim, is subject to protection under the individuals with disabilities in Education Act. And as a result, the harasser may be an emotionally disabled student. And as a result of that, the school may not be able to actually discipline the student in the way that it might like. But the court, in summary, did make it very clear. The majority is that this is a hard case to prove under Title IX. Well, the dissent predicted a wave of litigation. It did. Well, we'll watch what happens. Thanks very much, Kathy. Thank you, John. And thanks, Evan. In just a moment, John Yu and Jordan Stiker will join me in a special focus segment on five cases that arose this term under the Americans with Disabilities Act, the ADA. The court this year undertook to resolve some of the major questions that have emerged about the 1990 Americans with Disabilities Act, as applied directly and in conjunction with other statutes. The act figured prominently in six of this term's cases will focus on three of them and mention two others briefly. The three cases likely to have the greatest impact on federal judicial dockets are Sutton v. United Airlines, Albertsons v. Kirkenberg, and Murphy vs. United Parcel Service. These cases involved ADA provisions that make it illegal for an employer to discriminate against a qualified person with a disability. The ADA defines disability with respect to an individual as, a, a physical or mental impairment that substantially limits one or more of the major life activities of such individual. B, a record of such an impairment, or C, being regarded as having such an impairment. But the statute itself does not answer this key question. In determining whether a person is disabled, should the trial court consider the effect of medications or devices that can mitigate or correct the person's impairment? Yes, said the court in Sutton, Albertsons, and Murphy. We'll discuss the holdings in these cases, then turn to Senator Director Rhea W. Zabel for her thoughts on the practical issues judges may face in light of them. With us to begin this segment are Jordan Stiker of the University of Texas, and John U. of the University of California Bolt Hall School of Law. John, the Sutton case appears to be the lead case, at least in the definitional matter. Who were the plaintiffs in this case and why did they bring suit and what did the court say? These are the twins who wanted to fly the friendly skies. Twin sisters who both applied to be airline pilots with the United Airlines, but they couldn't meet United Airlines standard for eyesight vision without the use of corrected lenses. With corrected lenses, they could have met the standard. And the reason why they were rejected, according to the court quite properly, is because the court says that under the ADA, a district court is to evaluate whether someone is disabled in light of the corrective measures that are undertaken or medical treatments that ameliorate their condition. And the court gave three reasons for this. First, the ADA is written in the present tense. A disability is designed, I'm sorry, is defined as something that substantially impairs present tense major life activity. And because it's in the present tense, you look at the person as they are now with the corrective measures. Second, the court says that the ADA requires an individualized inquiry into each case so that each person who files suit under the ADA must be taken as a whole in the context of their corrective treatments. And third, and most importantly to the court, was the fact that the ADA in its text states Congress's belief that only 43 million Americans are to be considered disabled. And the court found that to be inconsistent with the idea that something like eyesight, which about half of all Americans require corrective lenses to see properly, could be considered a disability. Instead, the court said something that's not so easily remediable can only be considered a disability. It can come within the 43 million definition. Right. Jordan, the sisters also sued under this third prong of the definition. The regarded as disabled prong, they claim United regarded them as disabled. Explain that provision, would you, and how the court came out on that? Yeah, this provision focuses on what the employer believes about the abilities of the employee. And here, the court basically said that the employer, the fact that the employer believed that they couldn't function in a particular job didn't mean that the employer regarded them as disabled generally for the purposes of the ADA. And the court assumed without, at the same time criticizing the notion that working might be a major life activity for the purposes of the ADA. But the court basically said that the fact that you can't perform a particular job here, a global airline pilot, doesn't mean that your regard is substantially limited if you can serve in some other kind of position, such as a regional pilot or a pilot instructor. The court here was clearly concerned that a contrary reading would have meant that everyone would be regarded as disabled if the employer thought that they couldn't perform a particular job. Narrow it down to that. Thanks very much. We said, John, in other cases, Albertsons versus Kirkenberg. Kirkenberg was a truck driver with monarchy or vision. His brain evidently compensated for it, but he failed a Department of Transportation eye test that Albertson has set up as its test. How did the court come out here? The court essentially said that when an employer uses or adopts a federal safety regulation as its own job qualification, that the employer then, when the defendant in an ADA suit doesn't need to justify why he used that regulation because it's the product of an administrative agency process that has already resulted in a considered judgment. So this makes it a little easier for business, I guess, to go as far as the government goes, but no further? Yes, it's very much like these sexual harassment cases from last term. Here the court has created a safe harbor rule for businesses, and it would be very surprising to see businesses go outside it because then they will have to defend their own job qualifications in court with statistical studies and so on. Instead, within the safe harbor rule, they just rely on the federal government's regulations. Thanks, John. Jordan, very briefly, could you tell us about the last case, Murphy versus UPS? This was a case of somebody with hypertension. What did the court add to the Sutton decision here? They really do follow Sutton and basically say that again, the regard as position requires that you be limited more than just in a particular job but a whole class of jobs. Thanks very much. Thank you, John, as well. In these cases, the court emphasized that resolution of discrimination issues under the ADA depends largely on the specific circumstances of the plaintiff. The court said the same thing in Olmsted versus LC, where it held states are required to place persons with mental disabilities in community settings rather than in institutions, depending on the circumstances. These circumstances, of course, are the subject of litigation. And so we turned to Senator Director Ria Zobel, who has been a federal district judge in Massachusetts since 1979, for her thoughts on how the holdings in these cases might play out in practical terms in litigation before federal trial judges. Let's go to that interview now. Welcome, Judge Zobel. Thank you. I want to ask you first, in light of this trilogy of decisions, Sutton, Murphy, Albertson, and the ruling that courts must take into account in determining disability, the effect of a myriad of conditions or mitigating devices, what's going to be the practical impact of that, do you think, in the trial courts? Well, I think the immediate impact will be a flurry of summary judgment motions, and many of them are likely to be granted, particularly the obvious ones like the plaintiff with eyeglasses or the other cases where the plaintiff with some mitigating device clearly can do most of life's activities and is therefore not disabled. Do you see summary judgment as the preferred method throughout, do you think? I do not think so. I think that both these decisions and indeed the history of these cases suggest that they are, in fact, very much individualized to a plaintiff. If you look at the cases that the Supreme Court cited to show the split in the circuits, in almost all of them, the District Court had granted summary judgment, in part because it read the statute as the Supreme Court now does, but in part because it obviously saw no issues of fact. The courts of appeal reversed, not only because they read the statute differently, but also because in a number of these cases, they discerned unresolved issues of fact that the District Court hadn't seen. So now the ground rules, in a way, are clear both for the District Court and the Court of Appeals? I think that's right. It is clear now, but the definition of disability is in that you have to take, you have to consider this with reference to the mitigating devices, medicines or whatever, and that in the end, it is a highly individualized and fact intensive inquiry. Could you say a little bit more about what you think the nature of this intense individualized look is going to constitute in the trial courts? Well, the court in several of these cases gives examples of the sort of thing that I mean. In Sutton, for example, Justice O'Connor refers to the person who uses prosthetic devices or a wheelchair and she points out that although they assist the person to walk and thus be able to function in society, they may not, and they may yet be disabled because they can't walk well enough. In Murphy, the plaintiff takes medication for hypertension and yet the court points out that sometimes the medication itself imposes limitations, sometimes by virtue of negative side effects and sometimes the medication doesn't do the job in full and the person remains disabled despite the medication. So it's that kind of inquiry.  I think what it means is that a plaintiff is going to have to be given an opportunity at trial because this can't be done in the context of summary judgment to develop the entirety of her condition. What the condition is, what medications there are to ameliorate the condition, what the possible negative effects of the medication are or the device may be that imposes its own limitations and what adjustments the plaintiff may have to make to the medication or device. Give us another example of what are the effect of these statutes as interpreted in the district court as these cases come up. Well, I think the other, to me, logical development from this fact-intensive individualized look and from the fact that we now take into account medications is the notion of shifting disability. People's conditions change and medications change and the response to medications change. The court pointed this out in the case decided early on the term, Cleveland Against Policy Management Systems. Although the case is not a direct response, it holds that a plaintiff who has claimed total disability for SSDI purposes may is not thereby automatically foreclosed from claiming under the ADA, but it does also respond to this question because the court there points out that at the time that the plaintiff claimed under SSDI, her condition was such that she honestly could say she was totally disabled. To me, that suggests that a condition is never permanent and as it changes, the plaintiff may very well wish to bring a claim now saying that the condition is changed and I should be treated differently by the courts or I should have a different result. So I have the specter of serial disability cases and wonder what the limitations there are on the preclusive effect of judgment number one. Other than money. Other than, of course, money, right. Listening to you, I wonder if you'd comment briefly on what you perceive as a difference, if any, between this statute and other civil rights statutes in the 60s and the 70s in which this was modeled, title seven, for example. Well, you're right to look at the big picture. Sometimes when you have a complicated statute like this, it's very helpful to see it in the context of a scheme of legislation. When we were preparing for this discussion, Professor Stiker made a very good point about the distinction of these statutes. The ADA clearly is modeled on those anti-discrimination statutes that deal with race and sex. Title seven says that race and sex are irrelevant to whether a person can do a particular work. The ADA acknowledges that it is economically rational for an employer to want to know what the physical and mental limitations may be on a particular employee and how that would affect the ability of that employee to do the work. Whereas title seven does a comparative look. It looks to see whether this plaintiff is being treated differently from members of another group and therefore whether the plaintiff is being discriminated against. The ADA, on the other hand, looks at a norm, at an average, at, if you will, an able condition and then asks to what extent does this plaintiff depart from? To what extent is this plaintiff different from that norm? And what does the ADA say the norm is? Well, that's the hooker. It doesn't. And I think what is going to have to happen is that particularly the district courts will have to determine what that norm is on a case by case basis. Which takes us back to the individualized nature of the inquiry in each of these cases. Absolutely. George Zabel, thanks very much for coming by. My pleasure. That concludes the first part of our program. We'll take a five minute break, then come back and discuss some of the terms, decisions in the areas of criminal law and procedure.


All right. Good morning, everybody. Let me do our stand-up thing since it's Wednesday. Yeah, that's right. You might think you're sick, but I think you can stand up. Ladies, participation points are at stake? OK. For the slowest stand-upers? All right, let me sit down. All right, so today we're going to. So on Monday, we talked about file system caching. We talked about a couple of design decisions related to caching, and we talked about, in general, why would we cache file system information, particularly because the memory is the slow-fast thing that makes the big, sorry, the small-fast thing that makes the big slow thing, namely the disk, look faster. That's given me a long day. So today we're going to talk a little bit about the implications that that caching has on file system consistency. So specifically, because we're caching information and memory, what happens if there's a failure? And we'll talk about ways that we'll talk about some things that can go wrong. We start caching information, and we'll talk about one approach, which is called journaling, that many modern file systems use to be able to recover completely and rapidly after a failure. It's pretty similar to Monday. I'm really going to work on the assignment through your auto-grading today. I promise. This keeps being up there. I'm like, ah, it should be done today or tomorrow or today or tomorrow or the next day or the next day. But yeah, so I'm going to do that right after class. And it's not a big deal. But I've also started up an extra grading machine. So assignment through your grading takes even longer than assignment to potentially.  So yeah, that can take a little while. So we have a little bit more resources that are now being devoted to grading. And we have a little bit more that we can devote to it as well if we need to. So hopefully not too many machines. We'll have to run 421 tests. All right, so any questions on file system caching before we go on? Any questions on this? So what was our trick to make a big, slow thing look fast, Greg? Yeah, so we used the cache, right? Or putting a smaller, faster thing in front of it. We talked about that being memory. Today maybe that could be like an SSD or something like that. But anyway, the point is we make our big, slow disk look faster by putting a smaller, faster thing in front of it. For consistency, what becomes interesting here is that these two things have different failure semantics. Stuff that's on disk is permanent. It's persistent. You write it, it stays there. Stuff that's in memory does not. But it is faster. And so that's why we use it for caching, right? And remember, we call the file system cache the buffer cache. So now we're talking about two different uses of memory, right? So on modern systems, how does the operating system make a decision about how to allocate memory at runtime? First of all, what are the two things that I could be doing with memory? Sirach. One of them's up on the slide, and the other one is, yeah, so I could be using it to hold what? Yeah, address spaces, right? Remember, I could be having pages that are assigned to process address spaces, or I could have pages that are in use in the buffer cache, right? And we talked a little bit about how modern systems have to make this trade-off at runtime, and they try to make it based on the needs of the system. So I use memory as memory, and I also use it to cache file data. These two types of memory usage are competitive. And depending on how I allocate things, I can ruin performance, right? So if I have a very file-intensive workload, but I use a lot of memory for address spaces, then the system's going to be slow. If I do, actually, I think I just said the opposite. So if I have a lot of memory in use as memory, but I actually have a lot of file IO that I need to cache, then I can make the system quite slow. On the other hand, if I reduce the amount of memory I use for address spaces, I can create thrashing, right? So either one of these problems. So it's kind of interesting, right? Because what do both of these sort of bad cases have in common? Why is the system slow in either case? Sam? Yeah, so in both cases, the system is slow because of the disk, right? So it's kind of funny. I mean, we've talked about, essentially, we talked about thrashing, right, a case where all the swapping activities making my system look so. And then you can also have cases where improper file system caching or not enough file system caching makes the system look slow. The disk is really slow, right? When your system runs at the speed of your disk, it's really slow, right? So in both these cases, essentially, what's happening is the disk is now starting to bottleneck the rest of your system. And the system will very, very rapidly start to feel very slow once the disk becomes the bottleneck, either because of too much swapping or because of too little caching in the file system itself, right? So in general, again, I mean, it's kind of like I'm doing my best. The operating system is really doing its best in both cases to avoid using the slowest part of the system, right? Don't be bottlenecked by the slowest thing on the system, right? And we talked on Linux. We had this cute little parameter of swappiness that controls how aggressively the system tries to reduce the amount of memory that's in use for address spaces, right? And that memory gets added to the buffer cache, right? So swapping is to term sort of how much downward memory pressure the system applies to try to increase the amount of memory that can be used for the buffer cache, right? So we talked about two different design choices in terms of where we could locate a buffer cache. Where were those two places? Well, it's one of them, see me? Yeah, so I could put it down here, right? And at that point, what is my file system caching? Richard, is your name Robert? OK, I get confused. Is it Richard or Robert? OK, Robert. Disbox, right? So if I put the cache down here, then when I'm caching our disk box, right? And all I see are disk box, right? What's the other place I could put the cache? Alyssa. Yeah, so I could put it in between the virtual file system and the file system implementations. And at that level, what would I cache, Dan? Yeah, my cache interface is essentially defined by the file system interface, right? So you have to think about where I put the cache. The cache has to expose the same interface as the thing that it's caching, right? So if I cache down here, the cache has to expose the disk interface, which is reading and writing blocks. If I put it here, the cache has to expose the file system interface, right? So what was kind of a serious problem with putting the cache up here, actually? Yeah, so the file system potentially doesn't see all the reads and writes, right? Which could have some problems for consistency. And when we talk about the approach to consistency we're going to cover today, you guys should think about the implications that that style of caching would have on it, right? What was another problem? Right. Yeah, so this is that same problem, right? It's essentially that because I have the file system hasn't seen all the writes or reads, it may not have maintained metadata that's important. But what else about metadata was I concerned about here? Jen? Yeah, remember that none of these operations directly access or return all of this internal file system structure, right? Inodes, super blocks, free bitmaps, et cetera, all that good stuff that lives on the disk. It's things that are necessary for the file system. It's frequently information. The file system has to touch a lot, right? We talked about writing to a file and how that might have to make several modifications to the inode. So this might be stuff that I'd be really interested in caching, but if I do it up there, I never see it, right? The nice thing about putting the cache down here is I can cache everything. Anything that's stored in the disk block I can cache, right? What was one potential drawback, though, of caching above the disk? Yeah. Well, I see, I mean, on some level, I see all the actions, right? Because I see them after they've been translated to reads and writes to disk box. Harish, what kind of information don't I see? Varun, you want to help them? What kind of information do I miss down here? Spencer? Yeah, so for example, if I see up here, right, what am I seeing? I see read from this file at this offset, right? And so if I wanted to add some other blocks to the cache that were nearby, right, and maybe some blocks that were a few offsets away in case I was doing some sort of, if I was reading the file from one end to another, I could do that more easily, where down at the disk interface, that's more difficult to do, right, Jeremy? Probably, yeah. And I mean, this example is a little bit simplistic, right? So for example, I could, so for example, if I wanted to put a cache here, let's say I wanted to put a cache here, but I also wanted the underlying file systems to still know about every read and write that occurred. What could I do? You're building this system, right? You've decided I want to do a cache below the file system layer. What could I do, Spencer? Yeah, yeah. So for example, I might change the file system interface. I might widen it a little, but I might add some calls. I might have a call that says, hey, I'm just letting you know that I satisfied this write from the cache, right? That I'm not, like, I'm going to tell you that these, I might have a call that says, hey, these are disk blocks that were modified in the cache, right? You don't have to write them to disk because I've got them in the cache, but I'm just letting you know that they were modified, right? So the file system can do things, same thing with reads, right? So, hey, I satisfied this read from the cache, right? Writes turn out to be more important, right? Because why, Andrew? Maybe, Bart, why am I more worried about writes when it comes to caching? What do writes do that reads don't? This is not a trick question, Robert. Yeah, writes change the disk, right? Reads aren't going to modify the disk, right? Writes are going to modify the disk. So when we start talking in a second about caching and consistency, we think much more about writes, right? Because if a cache will read, that's great.  Whereas when writes get stuck in the cache, that can happen. Yeah. Sure. What do what do? No, I mean, why would the memory manager do that? No, I'm saying that what Spencer was proposing before, I think, right, is this idea that what I might want, if I put the cache here, was a way to still inform the file system that there had been operations on files in the cache, right? Even if I don't push the contents down to disk, right? We'll see in a minute, for example, that file systems actually record some information about these operations as they're going as a way to survive failures, right? If I put my cache in here and I complete, so for example, if I just stop write operations from going down to the file system at all, then the file system is potentially now missing information that it might need in order to survive failures, right? But instead of saying, hey, you have to change these blocks on disk, I might say, these blocks were changed in the cache, right? So if you want to make a note of that somewhere or something, then that's fine, right? But I've cashed these in, I've sort of, I've allowed this write to lodge itself in the cache, right? And I haven't pushed it to disk yet. You also might need an interface so that the file system can actually pull dirty blocks down from the cache, right? Because I mean, so what's the other, when we start to think about policies regarding when I actually write things to the disk, what's another challenge with having the file system buffer cache up here, right? What do I end up kind of doing? Paul, I'll take a guess. Question is, when I start thinking about policies, for example, when I write things to disk, right? I want to let some write stick in the cache, but from time to time for consistency, I might actually need to flush stuff to disk, right? So let's say I put the cache right here. What am I kind of doing in a certain way? What am I forcing all the file systems below me to do? Or what am I making it more difficult for them to do? That's part of it. I'll answer this question. So what I'm doing is essentially, whatever policy the cache implements about when to write out information is now kind of imposed on all the file systems below me, right? So file systems can now, can't make their own choices about when to write information out to disk, right? I'm kind of making it for them, right? I might add an interface so that they could tell me how to do it, but then it starts to get a little bit ugly, right? So down here, the idea is that if I'm reading and writing disk blocks, then the file systems above me essentially have a lot of control over when things get written, right? And usually what we'll talk about is caches have ways to allow the file system above them to say, please write this block to disk immediately, right? I don't want this block to, you can cache this block, but I want this disk write to go to disk immediately, right? All right, so we talked about these two locations. All right, any other questions about caching before we talk about consistency? All right, so why, okay, so the first question is, we talked about this a little bit at the end of class. Why does caching exacerbate consistency? A couple of different ways to answer this question, Tim. Right, so that's a great observation, right? The cache is not persistent, right? So information that is in the cache potentially when the system crashes is lost, right? So okay, keep going in that direction, yeah. Yeah, so I have some sort of failure. So what could potentially be in the cache that would cause a problem when the system failed? Nothing. All right, okay, so the idea is that there's some change to the disk that hasn't actually been written to disk yet, right? So in databases, you might talk about committing a transaction. It means the transaction is actually on the disk, right? So we can talk about that in a similar way here. You could say there are changes to the disk that haven't been committed. They're not on the disk yet, right? The disk platters don't reflect those changes, right? But why does caching cause this problem? I mean, this can happen anyway, right? We talked about the fact that even just a simple operation like appending to a file has to make multiple changes to disk blocks, right? So, you know, I yanked the power in the middle of a right and there's some set of changes that haven't been made. So who cares, right? I mean, why does caching make this work, Alyssa? Okay, right, so if I cache metadata, this is particularly problematic, right? Because the metadata is pretty important for file system structure. But what else does caching do? Yeah, okay, we're getting closer here. Greg, wanna add to that answer? Right, so you guys are identifying nice things that can go wrong, right? So why does caching make this worse? What does caching definitely do? Yeah, right? There's no caching since it doesn't return a success value with up to the user application to manage that. Okay, that's part of what I want to look to. What does caching definitely do, Nick? Okay, I will accept that answer, right? I mean, think about it this way, right? You have a disk that's running, right? You have a file system that's running in your operating system and it's making changes to that disk over time and there's programs running and the contents of things on disk are changing. You can think about it as if there's like a target, right? There's a target on the disk. There are these brief periods of time, right? Where if you manage to, like if you were sitting there with scissors, don't do this with scissors, right? I would advise or have big gloves or something, right? Anyway, or maybe you weren't even gonna cut the power cord. You weren't gonna be that dramatic because why ruin a good power cord, right? You were just gonna flip the machine off, right? Suddenly without any warning, right?   There's gonna be data loss. There's gonna be some kind of inconsistency, right? And there are these teeny little little moments of time, right? What caching does is caching makes those that target bigger, right? Because stuff sits in the cache, right? So for example, a right to some critical piece of file system metadata, right? Let's say I've allocated a disk block and I'm working on marking the bit in the block bitmap as allocated so that I know that that disk block is allocated on disk, right? So now I've done the allocation, I've got my disk block, I've had this right and the right is kind of, you know, making its way, you know, down, you know, through the disk controller, out onto the bus, over the bus, onto the disk, the disk has to move the heads, find the sector, write that actual bit, right? So there's my window of time, okay? And actually, I don't know, I mean, it's probably pretty short in certain cases. Now you're gonna let it sit in the cache, right? So now I wrote it and like Nick said, you know, it's in the cache, it hasn't actually been committed to disk yet, right? Because I'm caching it because I don't wanna, I'm hoping that there'll be some other changes to it. I'm trying to, you know, reduce the number of writes I'm doing and so the longer it sits in the cache, right? The longer that window of time is where if you, you know, cut the power, now you have an inconsistency on disk, right? So this is the problem, right? Caching is gonna create more opportunities for you to have failures if you're not clever, right? And a lot of what we're gonna talk about today is cleverness, right? The ways the file systems have found to work around this, you know, what seems to be kind of like an irreconcilable trade-off, Jeremy. Yeah, so yeah, so we'll talk in a second about writing policies, right? And we particularly are interested in policies related to disk writes, right? Because disk writes are the thing that we're worried about, right? Again, reads, we could just serve from the cache until we're blue in the face and we're happy and there's no consistency problems, right? Writes on the other hand, if they get stuck in the cache, right, are lost, right? And we talked before about how any file system operation has all of these different steps to it, right? So for example, so let's go through this, right? So let's say that after step one, my file system fails. What's wrong with the file system after step one if it fails? What would be something that I'd have to fix when I start up against Simon? Yeah, so now I come back up and I've got one I know that's just gone, right? It's not in use for anything, right? It's just gone, right? So this example, I'm creating a new file, right? So I need a new inode. I've allocated the inode, whoops, gone, right?  But it's allocated. And so if I just let the file system keep running, there's one fewer file that you won't be able to allocate, right? Probably not the end of the world, but still kind of annoying, right? Okay, so what happens if I fail after two? Thor, what's wrong with the file system? I fail after two, I come back up. I still have one that's wrong, right? So I still have an inode that's wandered off, right? I'll never find again. But what else, what other problem do I have here? Sir? Yeah, they're not linked to anything, right? Where are those data blocks, right? Those data blocks have been marked as allocated, but they're not in use for anything, right? So now I've lost one of my capacity on the disk, right? All right, what happens, what happens? Okay, so what happens if I fail after three, right? So now I'm doing better, right? These data blocks are associated with the file, right? But does the file exist anywhere? Ping. This file is just like gone, right? It's like the ultimate hidden file, right? There is no path name on the system that will actually translate to this file. If you guys, I don't know how many of you have ever noticed that in certain Unix file systems there's a directory called lostandfound. Has anybody ever noticed this? Have you ever wondered what's in lostandfound? This kind of stuff, right? So if your file system checker runs and it finds a file that's there, that looks consistent, that has this box, but it's like, it's nowhere in the file system, it's not linked, right? What does it do with it? Where does it go? Nobody knows, right? So it throws it in this random directory and it's your job to kind of figure it out, right? So you go into lostandfound and you find a file and then you're like, oh, I remember where this goes, right? And then you can move it back to the directory, but that's what that's for, right? That's one of the things that ends up in lostandfound are unlinked files, right? Files that somehow exist on disk, but there's no path name that translates to them, so otherwise you would never be able to find that file, right? All right, what happens if I fail after four? Okay, I'm getting closer here, so I've actually changed the directory, yeah. Yeah, okay, so at this point I'm getting closer to something that might actually be okay, right? I've got the file, the size is correct, maybe the i-node's got the right information in it. The problem is that your date is not there, sorry, you know, like that's the last thing that happened, right? So at this point, again, I can find this file, I can, you can potentially delete it, so I'm in much better shape, the date is not there, right? So on some level, if you think about it, one through four are all things that are associated with file system metadata, right? This last thing is actually writing the data into the file, and in many cases file systems actually care more about their own metadata, than they care about your data, right? And that's a good thing in general, right? Because their metadata is actually more important, you know, if their metadata gets corrupted enough, they won't be able to find any of your data, right?  And then having some idea of being able to navigate this, right? All right, so we talked about the fact that caching can increase this time span, right? So essentially, you know, the caching can make this whole thing take longer, right? So if I think about here, if I start caching at any point here, right, what it does is it increases the period of time where I can have a failure of the kind that we've talked about, right? So, okay, so let's talk about the safest possible approach to maintaining file system consistency, right? And doing caching, right? So what's the safest approach, Jen? Yeah, so the safest approach is just don't buffer rights at all, right? Remember, the cache is still really helpful for reads, okay? You know, even if I don't allow rights to ever sit in the cache, I'm still gonna get a performance boost from reads, right? And that's gonna make me happy. So this isn't as crazy a policy as we might think about, right? And what we call this is this kind of cache is called a write through cache, right? Because rights go just straight through the cache, right? They don't, they might update the information in the cache. Why would I update the information in the cache if I'm not actually going to use it? Why would I change the cache and then do the operation at disk, okay, that's fine. Yeah, so I want the read blocks to be up to date, right? Otherwise, the read block for that block is stale, right? And I might have to fetch it again from disk, so exactly. So in order for reads to work, I still modify the cache on writes. I just don't actually allow rights to sit in the cache, right? I immediately flush rights to disk, okay? Now, what would be the opposite approach, right? Let's say that you are like super certain that the power will never fail or that you will never crash your system, yeah. Yeah, or well, okay, how about, how about I can do better than that, right? I here don't write it to the files closed. I think I can be even more daring, right, great. No, no, no, remember, this is for the daring, right? This is, these are the risk takers, right? I'm not gonna write through a Spencer, yeah. Yeah, yeah, how about that, right? Because look, I mean, writing when the files closed sounds like it's pretty daring, but what if the file is opened again, right? Then the file, I could just keep it in there, right? Like, why, hey, that's too early, man. That file might be reopened like an hour later, right? So I might as well wait and let it sit in the cache and hope that I can amortize a few writes. So, yeah, on the other hand, wait in until the file system shuts down or is unmounted or something, right? Or here in the cache, when we talk about this, we actually will say until blocks are evicted, right? Because the cache is an infinite size. So at some point, I'm gonna have to remove a block from the cache, right? This is kind of like virtual memory. I have to evict a page or I have to evict a block from the cache. At that point, I have to actually write it to disk, right? Otherwise, the changes aren't permanent. But in the best case, if I had an infinite size buffer cache, this moment would be shut down, right? And that would be great. And we can call this approach what's called a write back cache. So a write back cache is kind of the opposite, right? So a write through says everything hits the disk as soon as possible. A write back says I wait as long as possible before I make a write to the disk. I essentially only write when I have to write for correctness, right? And I think you guys can imagine, right? That the write back cache is, the write back cache will amortize as many disk operations as possible, right? The whole point of buffering writes in the cache is that I hope that I can combine a couple of writes to the same disk block and move them into one write to disk, right? The longer I hold blocks in the cache, the more of those operations I can amortize, right? The shorter, with the write back, sorry, with the write through, I never do this. With the write through, there's a one to one mapping between changes to the cache and operations to disk, right? With the write back cache, there's the end to one mapping where n is as large as possible, right? That's one way of thinking about it, right? Of course, for safety, right? This is much better, right? Because things are on disk as soon as possible, especially changes, and so if I crash the number of uncommitted changes, this is the smallest possible, right? What can I do as kind of a middle ground? I think, Jeremy, you've hinted at this before, right? What's one thing where if I didn't want to wait as long as possible about it, I didn't want to write things as soon as possible of room? Okay, okay, yeah, so actually that's a great point, right? So one thing I could do, right, is I might say, hey, you know what? Like, operations to file system metadata are pretty important, right? Inodes, super block operations, on disk data structures, those I might write immediately, right? What would be left? What would I be actually caching at that point? I'd be caching rights to what? If I let the metadata go straight to disk, Tim, what would I be caching? Yeah, user level stuff, let's be more file system friendly here, yeah? Yeah, data blocks, right? Remember, blocks on disk divided into two categories, data blocks, metadata, and actual data, right? So data blocks, data blocks that are part of the file, and everything else, right? Everything else that the file system uses to find files, to organize information, et cetera, et cetera, right? So when you format a disk, some of that disk goes immediately into these on-disk data structures, the rest is reserved for data blocks. So I can still buffer data blocks in the cache, but I allow metadata blocks to be written through immediately, right? What's another approach? Another way to balance these two things, Bethany? Yeah, oh, yeah, that's, okay. So that's actually a really, that's a really interesting observation, and it's not one that I put up here, but they're actually, yeah, so they actually have, there was some research work maybe five years ago looking at user perception of when things should be in sync, right? And it was actually using that do this sort of thing. So that's certainly, that's a potential approach, right? But remember, to some degree, when you hit save, like let's say you're using work, right? And Word actually will auto-save a lot, right? A lot of those auto-saves never hit the disk, right? They're just sitting in the cache, right? And that's okay because I'm doing that because Word is gonna auto-save like another 60 seconds later, right? And a lot of those blocks will be the same, right? But I could, and Bethany's writing that most file systems have ways to force things to disk, right? So on Unix, there's a file system system called called sync, right? The idea behind sync is sync is supposed to tell the file system, synchronize your on disk, synchronize the on disk file system with whatever changes I made up to this point, right? So sync should essentially flush everything from the cache. And I can do this on a whole system basis or I can do it on a per file system base. But what's a different middle ground here? Yeah, AJ. Yeah, so periodically, right? I might, sorry, so somebody pointed out I can write this immediately but delay data writes. I also can use sync. And a third approach is that I can essentially periodically write things back, right?  And what does that do, right? Well, it takes that window of time that I was worried about failures and it shortens it, right?  I'm gonna like write that out periodically so that the period of time in which a failure can cause a problem is reduced, right? Where'd that go? Okay, so one of the things that we talked about is the fact that making changes to any part of the file system requires multiple changes to disk boss, actually, yeah. Yeah, I mean, you can imagine having, yeah, okay. So this is a great question, right? So one of the things we haven't talked about and we're not going to talk about is buffer cache block allocation policies, right? So we've been talking about this buffer cache thing. You have some vague idea about how it's organized. Sadly, there used to be a fourth assignment in this class that you guys don't have to do, part of which was implementing that. It turns out that implementing a buffer cache and choosing what blocks to buffer in the cache ends up feeling very similar like an assignment you guys are going to do, right? At least to me, right? So it's actually saying like how, you know, if I thought about it, how might I decide what blocks to keep in the cache? My buffer cache is not infinite size, right? It's a cache, right? It's smaller than the disk, right? It's much smaller than the disk.  Well, yeah, I mean, but in general, I want to keep sort of hot blocks in there, right? I want blocks that are accessed regularly, right? So the idea is that my cache works better if I have a lot of hits in the cache, right? It's like any other cache. What I want, think about the TLB, right? When did the TLB work well? When most of the addresses were being translated by the TLB and the kernel didn't have to help, right? It's the same thing here. Caches work well when my operations hit the cache, right? If I hit a disk, then I'm as slow as the disk, right? If I hit the cache, I'm as fast as memory. The more often I can hit the cache, the better. So file systems and buffer caches do have this block allocation challenge, right? Which is to figure out I've got the small amount of memory which blocks from the file system should be in there, right? And so certainly one thing that I want to look at is activity, right? If I have a bunch of processes that are reading and writing to the same file, that's a great file to cache, right? Because a lot of my file system operations will not hit in the cache, right? What are other things that would be pretty good to cache? What are other pieces of the, just generic, right? Generic pieces of the file system that would be good to put in the cache that are accessed often. Okay. What's that? Yeah, Sean. Well, you're getting closer. Where do the timestamps live? Yeah. Yeah, the file system metadata, right? So even if things like this, for example, the super block and all those on disk data structures, they may not, I still might write them to disk immediately, but I still want them in the cache, right? Because they're used all the time, right? What's another file system, like, what's an inode on the file system that's probably used quite a bit? Yeah. The root inode, right? Like any absolute path name translation starts with the root inode, right? So there are certain parts of the file system that I probably want in the cache, right?  So yeah, if somebody opens a file, if a bunch of processes are using a file together and there's a lot of reads and writes to that file, I would want as much of that file in the cache as possible. Yeah, okay. So back to thinking about files to some animicity, right? So we talked about how we want these operations to files to look atonic, right? So if I append some data to a file, I want, on some level, when I, if I'm interrupted in the middle of doing this, right, by a failure, I want it to look like it either did happen or it didn't happen, right? I don't want to be stuck in some inconsistent state where I've got an inode that's dangling or I've got data blocks that aren't, are allocated but aren't associated with any file, right? But we also talked about the fact that this always involves writing a bunch of disk blocks, right? So, so if I think about the disk, right? From the perspective of the operating system, we know that writing multiple disk blocks is an atomic, right, it requires multiple operations, right? What is something that is atomic? When I think about the disk, if writing multiple disk blocks, I can't think of it as atomic, what can I think of it as atomic? Paul. Yeah, how about writing one disk block, right? I mean, on some level, I sell the disk, this is the amount of data I want to write, 250, you know, 4K or whatever, and the disk is going to seek and it's going to write that data, right?  Is there a window of time when if I shut the disk, it might be in the middle of doing the right? But I actually, yeah, it might actually finish the right. Some disks have some on-disk battery and other things will allow it to complete operations, right? But that period of time is very, very, very small, right? So if I write one disk block, right, then it either happened or didn't, right? And so, this is so embarrassing. I don't know why I have this quote up here. I used to be a big Tom Clancy fan when I was a kid. I find that to be embarrassing to admit in public, but one of the Tom Clancy characters, right, had this, what I considered when I was 12, this really brilliant insight about the world, which was, you know, if you don't write it down, it never happened, right? So how many, did anyone else read these books? Oh yeah, I don't know, kind of. Anyway, it's a dark period of my life. I do read better books now, I promise. So anyway, so one of the tricks the file systems use is we exploit this fact, right? We exploit the fact that writing one disk block is atomic, right? And what we do is we keep changes to the file system in a data structure that's called a journal, okay? And a journal is a lot like what it sounds like, right? A journal is a data structure that the file system uses to, you know, say, hey, it's April 8th and I'm a file system and, you know, like I was asked to write this disk block and I was gonna go do it, so I wrote it down in my journal that I did this. Like it's probably the most boring journal you would ever read, right? Except for the ones you guys might keep yourselves. But the best thing about these journals, right, is the entries are very small and they can be used very easily to bring the file system into a consistent state after a failure, right? So again, there's a special area on the file system, a special thing about it is a file, really. And there's a structure for these entries, right? So the idea is that the file system keeps track of the things it's doing, right? The things it's done to the file system and the things, and this is one way that I could figure out when I fail what had been finished, what was done, what wasn't done, right? And again, so here's an example of this, right? So it's like, okay, let's say I'm creating a file, right? So what do I have to write in the journal, right? Why I say, okay, I'm gonna allocate this iNode, right? And I'm also going to associate these data blocks with it, right? And then I'm gonna add it to this directory, right? This is our example from before. I'm creating a file in a new directory. I'm creating a new file in an existing directory, right? So I need the iNode for the file, right? So here's my iNode number. I found some data blocks in a certain part of the disk. I'm gonna associate those, and then I'm going to put it in this directory, right? And then there's usually a message in the journal that says that's an operation, right? So these operations themselves, right, are not atomic, right? This is gonna be one disk write. This is gonna be a couple other disk writes. This is gonna be another disk write. So this is gonna require multiple writes. However, writing this entry in the journal, I can potentially do with a single write, right? So again, this journal data structure is pretty compact, and so I can write this out, right? So now let's say, so it's okay. So I'm going along and I've written this down in my journal, now let's say at some point later, all of these changes are on disk, right? Some of these changes I cached, right? Maybe I had some changes to these data blocks, so I didn't write them out immediately, but at some point, all of these operations have actually made it to the disk, okay? So what do I do at that point with my journal? Yeah, I update the journal, I create what's called a checkpoint, right? So essentially, again, as I'm going along, I'm keeping track in my journal of things that I'm going to do, right? When I know, so I cannot checkpoint this journal until all of the operations before it are on disk, right? However, once they are on disk, what I do do is I go through and I check off everything, right? So what it means is, every time I perform a checkpoint, it means that all of the changes above it in the journal are on disk, right? However, what does it mean about changes below the checkpoint? So let's say I fail and I come up and I find it, so I go back, I find a checkpoint, the last checkpoint in my journal, right? And then I have a bunch of changes after that checkpoint. What do I have to assume about those changes? Did they happen? Nothing. They might have, but I can't, right, I don't know. That's the tricky thing, right? Because some of these changes are gonna, these changes are not gonna, oh, sorry. These changes are not gonna happen in the same order, right, depending on the caching strategy that my buffer cache is using, you know, I might actually update this I node first and then later I go back and do this or whatever. So just because I have a checkpoint, it doesn't mean that none of the operations have made it to disk, some of them have, right? But I can't assume that any of them have because I haven't created this check, right? So I think we are, yeah, we're basically out of time. So I'll leave you guys to think about this for Friday, which is, what do I do when I recover, right? So when I recover, I've got this journal, I've written down things I'm going to do, I've taken very, very good notes, and I've written, I've also kept track of the things I've already done, right? So when I start up the system again after some sort of failure, how do I use the journal to recover things? That's what we'll talk about on Friday. I'll see you guys on Friday.


That's enough! One, two, three, four! Make sure you guys make entry. And as they make entry, we start pushing in. Here we go. I'm sorry. Alright. It's gonna be your team. Wait, your second team.  Once that building is cleared, we're gonna... We saw a building. Gameway went into each one. I didn't see it.