md.c (35bfc52187f6df8779d0f1cebdb52b7f797baf4e) | md.c (b03e0ccb5ab9df3efbe51c87843a1ffbecbafa1f) |
---|---|
1/* 2 md.c : Multiple Devices driver for Linux 3 Copyright (C) 1998, 1999, 2000 Ingo Molnar 4 5 completely rewritten, based on the MD driver code from Marc Zyngier 6 7 Changes: 8 --- 4832 unchanged lines hidden (view full) --- 4841suspend_lo_show(struct mddev *mddev, char *page) 4842{ 4843 return sprintf(page, "%llu\n", (unsigned long long)mddev->suspend_lo); 4844} 4845 4846static ssize_t 4847suspend_lo_store(struct mddev *mddev, const char *buf, size_t len) 4848{ | 1/* 2 md.c : Multiple Devices driver for Linux 3 Copyright (C) 1998, 1999, 2000 Ingo Molnar 4 5 completely rewritten, based on the MD driver code from Marc Zyngier 6 7 Changes: 8 --- 4832 unchanged lines hidden (view full) --- 4841suspend_lo_show(struct mddev *mddev, char *page) 4842{ 4843 return sprintf(page, "%llu\n", (unsigned long long)mddev->suspend_lo); 4844} 4845 4846static ssize_t 4847suspend_lo_store(struct mddev *mddev, const char *buf, size_t len) 4848{ |
4849 unsigned long long old, new; | 4849 unsigned long long new; |
4850 int err; 4851 4852 err = kstrtoull(buf, 10, &new); 4853 if (err < 0) 4854 return err; 4855 if (new != (sector_t)new) 4856 return -EINVAL; 4857 4858 err = mddev_lock(mddev); 4859 if (err) 4860 return err; 4861 err = -EINVAL; 4862 if (mddev->pers == NULL || 4863 mddev->pers->quiesce == NULL) 4864 goto unlock; | 4850 int err; 4851 4852 err = kstrtoull(buf, 10, &new); 4853 if (err < 0) 4854 return err; 4855 if (new != (sector_t)new) 4856 return -EINVAL; 4857 4858 err = mddev_lock(mddev); 4859 if (err) 4860 return err; 4861 err = -EINVAL; 4862 if (mddev->pers == NULL || 4863 mddev->pers->quiesce == NULL) 4864 goto unlock; |
4865 old = mddev->suspend_lo; | 4865 mddev_suspend(mddev); |
4866 mddev->suspend_lo = new; | 4866 mddev->suspend_lo = new; |
4867 if (new >= old) { 4868 /* Shrinking suspended region */ 4869 wake_up(&mddev->sb_wait); 4870 mddev->pers->quiesce(mddev, 2); 4871 } else { 4872 /* Expanding suspended region - need to wait */ 4873 mddev_suspend(mddev); 4874 mddev_resume(mddev); 4875 } | 4867 mddev_resume(mddev); 4868 |
4876 err = 0; 4877unlock: 4878 mddev_unlock(mddev); 4879 return err ?: len; 4880} 4881static struct md_sysfs_entry md_suspend_lo = 4882__ATTR(suspend_lo, S_IRUGO|S_IWUSR, suspend_lo_show, suspend_lo_store); 4883 4884static ssize_t 4885suspend_hi_show(struct mddev *mddev, char *page) 4886{ 4887 return sprintf(page, "%llu\n", (unsigned long long)mddev->suspend_hi); 4888} 4889 4890static ssize_t 4891suspend_hi_store(struct mddev *mddev, const char *buf, size_t len) 4892{ | 4869 err = 0; 4870unlock: 4871 mddev_unlock(mddev); 4872 return err ?: len; 4873} 4874static struct md_sysfs_entry md_suspend_lo = 4875__ATTR(suspend_lo, S_IRUGO|S_IWUSR, suspend_lo_show, suspend_lo_store); 4876 4877static ssize_t 4878suspend_hi_show(struct mddev *mddev, char *page) 4879{ 4880 return sprintf(page, "%llu\n", (unsigned long long)mddev->suspend_hi); 4881} 4882 4883static ssize_t 4884suspend_hi_store(struct mddev *mddev, const char *buf, size_t len) 4885{ |
4893 unsigned long long old, new; | 4886 unsigned long long new; |
4894 int err; 4895 4896 err = kstrtoull(buf, 10, &new); 4897 if (err < 0) 4898 return err; 4899 if (new != (sector_t)new) 4900 return -EINVAL; 4901 4902 err = mddev_lock(mddev); 4903 if (err) 4904 return err; 4905 err = -EINVAL; | 4887 int err; 4888 4889 err = kstrtoull(buf, 10, &new); 4890 if (err < 0) 4891 return err; 4892 if (new != (sector_t)new) 4893 return -EINVAL; 4894 4895 err = mddev_lock(mddev); 4896 if (err) 4897 return err; 4898 err = -EINVAL; |
4906 if (mddev->pers == NULL || 4907 mddev->pers->quiesce == NULL) | 4899 if (mddev->pers == NULL) |
4908 goto unlock; | 4900 goto unlock; |
4909 old = mddev->suspend_hi; | 4901 4902 mddev_suspend(mddev); |
4910 mddev->suspend_hi = new; | 4903 mddev->suspend_hi = new; |
4911 if (new <= old) { 4912 /* Shrinking suspended region */ 4913 wake_up(&mddev->sb_wait); 4914 mddev->pers->quiesce(mddev, 2); 4915 } else { 4916 /* Expanding suspended region - need to wait */ 4917 mddev_suspend(mddev); 4918 mddev_resume(mddev); 4919 } | 4904 mddev_resume(mddev); 4905 |
4920 err = 0; 4921unlock: 4922 mddev_unlock(mddev); 4923 return err ?: len; 4924} 4925static struct md_sysfs_entry md_suspend_hi = 4926__ATTR(suspend_hi, S_IRUGO|S_IWUSR, suspend_hi_show, suspend_hi_store); 4927 --- 4406 unchanged lines hidden --- | 4906 err = 0; 4907unlock: 4908 mddev_unlock(mddev); 4909 return err ?: len; 4910} 4911static struct md_sysfs_entry md_suspend_hi = 4912__ATTR(suspend_hi, S_IRUGO|S_IWUSR, suspend_hi_show, suspend_hi_store); 4913 --- 4406 unchanged lines hidden --- |